如何将 XML 模式导入到“无命名空间”环境中
我这里有一个模式,我试图在其中包含/导入另一个没有命名空间的模式(并且不能更改它,因为它来自另一个供应商,并且它将不再验证其 XML)。这是第一个架构:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:samp="http://sample/namespace"
targetNamespace="http://sample/namespace"
elementFormDefault="unqualified" attributeFormDefault="unqualified"
xmlns:otr1="http://sample/import/namespace1"
xmlns:otr2="http://sample/import/namespace2">
<xs:import namespace="http://sample/import/namespace1" schemaLocation="other1.xsd" />
<xs:import namespace="http://sample/import/namespace2" schemaLocation="other2.xsd" />
<!-- This one below is having problems, it is valid XML, and I am able to use it
but I am not meeting the actual requirments I have (explained later) -->
<xs:include schemaLocation=="NO_NAME_SPACE_PROBLEM.xsd"/>
...
<xs:element ref="some-elem-from-NO_NAME_SPACE_PROBLEM_SCHEMA"/>
...
</xs:schema>
“NO_NAME_SPACE_SHEMA_PROBLEM.xsd”可以在一定程度上进行更改,但不能有命名空间。
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="unqualified" attributeFormDefault="unqualified">
<xsd:element name="some-elem-from-NO_NAME_SPACE_PROBLEM_SCHEMA"
type="xsd:string" nillable="true"/>
</xs:schema>
问题在于 some-elem-from-NO_NAME_SPACE_PROBLEM_SCHEMA
被放入 samp
命名空间中。因此,当我尝试将其编组为 XML 时,它会打印出
更新 1:抱歉造成混淆,我过去和现在都在使用 xs:include,而不是 xs:import 来处理无命名空间架构。问题语法已更新。我还使用 JiBX codegen 生成域对象和用于编组的 JiBX 绑定。所以它也必须兼容 JiBX。
更新 2:根据 skaffman 的回答,我现在将使用 xs:import。我想我会把这个问题分成一个新问题。
I have a schema here where I am trying to include/import another schema that has no namespace (and this cannot be changed because it comes from another vendor and it would no longer validate their XML). Here is the first Schema:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:samp="http://sample/namespace"
targetNamespace="http://sample/namespace"
elementFormDefault="unqualified" attributeFormDefault="unqualified"
xmlns:otr1="http://sample/import/namespace1"
xmlns:otr2="http://sample/import/namespace2">
<xs:import namespace="http://sample/import/namespace1" schemaLocation="other1.xsd" />
<xs:import namespace="http://sample/import/namespace2" schemaLocation="other2.xsd" />
<!-- This one below is having problems, it is valid XML, and I am able to use it
but I am not meeting the actual requirments I have (explained later) -->
<xs:include schemaLocation=="NO_NAME_SPACE_PROBLEM.xsd"/>
...
<xs:element ref="some-elem-from-NO_NAME_SPACE_PROBLEM_SCHEMA"/>
...
</xs:schema>
And the "NO_NAME_SPACE_SHEMA_PROBLEM.xsd" which can be changed to some extent, but it cannot have namespace.
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="unqualified" attributeFormDefault="unqualified">
<xsd:element name="some-elem-from-NO_NAME_SPACE_PROBLEM_SCHEMA"
type="xsd:string" nillable="true"/>
</xs:schema>
The problem is that the some-elem-from-NO_NAME_SPACE_PROBLEM_SCHEMA
is being put into the samp
namespace. So when I try to marshall this to XML it prints out <samp:some-elem-from-NO_NAME_SPACE_PROBLEM_SCHEMA><child-elem/></samp:some-elem-from-NO_NAME_SPACE_PROBLEM_SCHEMA>
which is a big problem because that XML will not validate since it isn't meant to have. So my goal is to simply import elements into the no-namespace namespace.
Update 1: Sorry for the confusion, I was and am using xs:include, not xs:import for the no-namespace schema. Question syntax has been updated. I am also using JiBX codegen to generate domain objects and JiBX binding for marshalling. So it it must be JiBX compatible too.
Update 2: As per skaffman's answer, I will now be using xs:import. I think I will be branching this into a new question.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您尝试过吗
?有趣的是,XML Schema 规范强烈建议
应该这样做将
NO_NAME_SPACE_PROBLEM.xsd
导入“无命名空间”。如果您的环境将其导入到封闭架构文档的命名空间中,那么我很确定这是您平台中的错误。更新:好的,您的更新表明您正在尝试使用
来引用不同命名空间中的类型。您不能执行此操作 -
始终 将包含的项目带入与父架构文档相同的命名空间中。如果它们用于不同的命名空间,则必须使用
。如果要引用导入的无命名空间模式中的元素定义之一,则需要找到一种为“无命名空间”命名空间分配前缀的方法。如果它有前缀,您可以像这样引用它们:
尝试将属性
xmlns:nn=""
添加到父架构文档中,看看是否有效。Have you tried
Interesting, the XML Schema spec strongly suggests that
should import
NO_NAME_SPACE_PROBLEM.xsd
into the "no namespace". If your environment is instead importing it into the enclosing schema document's namespace, then I'm pretty sure that's a bug in your platform.update: OK, your update says you're trying to use
<xs:include>
to refer to types in a different namespace. You can't do this -<xs:include>
always brings the included items into the same namespace as the parent schema document. If they're for a different namespace, you must use<xs:import>
.If you want to refer to one of the element definitions in the imported no-namespace schema, then you need to find a way of assigning a prefix to the "no namespace" namespace. If it had a prefix, you could refer to them like this:
Try adding the attribute
xmlns:nn=""
to the parent schema document, see if that works.