0
免责声明:我对XSD不太熟悉,可能会错误地表达自己。如何在另一个XSD中使用命名空间定义的类型? (通过命名空间引用它)
我有我需要验证和处理XML文件。我可以更改XSD,但不能更改XML。
XML文件的类型为a.xsd,而a.xsd包含b.xsd的类型。这种类型被称为在XML参考命名空间,像这样:
a.xsd
<!-- language: lang-xml -->
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:supertype="http://www.b.com">
<xs:import namespace="http://www.b.com"
schemaLocation="b.xsd" />
<xs:element name="StuffDtl">
<xs:complexType>
<xs:sequence>
<xs:element name="elem1" type="xs:decimal" />
<xs:element name="elem2" type="xs:int" />
<xs:element name="uuuh_special" type="supertype:SuperType" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
b.xsd
<!-- language: lang-xml -->
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.b.com"
elementFormDefault="qualified">
<xs:complexType name="SuperType">
<xs:sequence>
<xs:choice>
<xs:group ref="one_thing" />
<xs:group ref="another_thing" />
</xs:choice>
</xs:sequence>
</xs:complexType>
<xs:group name="one_thing">
<xs:sequence>
<xs:element name="year" type="xs:decimal" />
<xs:sequence minOccurs="0">
<xs:element name="hour" type="xs:decimal" />
</xs:sequence>
</xs:sequence>
</xs:group>
<xs:group name="another_thing">
<xs:sequence>
<xs:element name="date-value" type="xs:string" />
<xs:element name="date-format" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:group>
</xs:schema>
:
的的XSD是像下面定义
我的情况稍微复杂一些,我试着产生这种“子集”,以便能够在声音的交代和一般有用的方式的问题 - 那样的解释例子中的空白。但是我很可能会更改XML,使其更简单。 –
如果您想要进一步的帮助,请将这个答案中提出的松散结束:您是否希望o'uuuh_special'与XML的其余部分位于不同的名称空间中? (不同的名称空间并不仅仅是用于组合两个模式的目的。)您是否希望它的内容是XML中所示的字符串或XSD中显示的元素? – kjhughes