我在这里有一个模式,我试图包含/导入另一个没有命名空间的模式(这不能改变,因为它来自另一个供应商,它将不再验证他们的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时,它打印出<samp:some-elem-from-NO_NAME_SPACE_PROBLEM_SCHEMA><child-elem/></samp:some-elem-from-NO_NAME_SPACE_PROBLEM_SCHEMA>
,这是一个很大的问题,因为XML不会验证,因为它不具备。所以我的目标是简单地将元素导入到无命名空间的命名空间中。
更新1 :很抱歉这是混乱,我当时正在使用xs:include,而不是xs:import用于no-namespace模式。问题语法已更新。我也使用JiBX codegen生成域对象和JiBX绑定进行编组。因此它也必须与JiBX兼容。
更新2 :根据skaffman的回答,我现在将使用xs:import。我想我会把它分成一个新问题。
答案 0 :(得分:3)
你试过吗
<xs:import namespace="" schemaLocation="NO_NAME_SPACE_PROBLEM.xsd"/>
有趣的是,XML Schema规范strongly suggests
<xs:import schemaLocation="NO_NAME_SPACE_PROBLEM.xsd"/>
应将NO_NAME_SPACE_PROBLEM.xsd
导入“no namespace”。如果您的环境将其导入封闭模式文档的命名空间,那么我很确定您的平台中存在错误。
更新:好的,您的更新说您正在尝试使用<xs:include>
来引用不同命名空间中的类型。您无法执行此操作 - <xs:include>
始终将包含的项目与父模式文档放在同一名称空间中。如果它们用于不同的命名空间,则必须使用<xs:import>
。
如果要引用导入的无命名空间模式中的一个元素定义,则需要找到一种为“无命名空间”命名空间分配前缀的方法。如果它有前缀,你可以像这样引用它们:
<xs:element ref="nn:some-elem-from-NO_NAME_SPACE_PROBLEM_SCHEMA"/>
尝试将属性xmlns:nn=""
添加到父架构文档中,看看是否有效。