【发布时间】:2010-08-23 18:19:58
【问题描述】:
我在这里有一个架构,我试图在其中包含/导入另一个没有命名空间的架构(这无法更改,因为它来自另一个供应商并且不再验证他们的 XML)。这是第一个 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>
还有“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 用于无命名空间架构。问题语法已更新。我还使用 JiBX 代码生成来生成域对象和用于编组的 JiBX 绑定。所以它也必须兼容 JiBX。
更新 2:根据 skaffman 的回答,我现在将使用 xs:import。我想我将把它扩展到一个新问题。
【问题讨论】:
-
您需要非常清楚
import和include之间的区别,它们做的事情截然不同。 -
是的,很抱歉,我本来想早点说的,但还没等我回到键盘上就被阻止了。
标签: xml xsd marshalling jibx