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