2010-09-08 110 views
3

我在我的XSD文件中定義了幾個元素,以後在文檔中用作參考。我確實希望這些「引用」元素中的任何一個構成一個有效的xml文件。如何排除XSD中的根元素?

比如我有

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> 
    <xs:element name="Section"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element ref="Section" minOccurs="0" maxOccurs="unbounded"/> 
      </xs:sequence> 
      <xs:attribute name="code"/> 
      <xs:attribute name="url"/> 
      <xs:attribute name="isLegacy"/> 
      <xs:attribute name="name"/> 
      <xs:attribute name="helpFileName"/> 
     </xs:complexType> 
    </xs:element> 
    <xs:element name="Sections"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element ref="Section" minOccurs="0" maxOccurs="unbounded"/> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

我不希望下面的XML驗證(如果這是文件中唯一線)

<Section code="" url="" isLegacy="" name="" helpFileName="" /> 

去除「部分」節點全球防止我引用它遞歸

回答

5

如果你想,作爲全球性的,而是立足於複雜類型的模式設計不聲明這些元素,並聲明只有你想要的元素全球根。沒有人強迫你讓每個元素都成爲全局的。

例如,您的樣品可以如下重構:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> 
    <xs:complexType name="Section"> 
     <xs:sequence> 
      <xs:element name="Section" type="Section" minOccurs="0" maxOccurs="unbounded"/> 
     </xs:sequence> 
     <xs:attribute name="code"/> 
     <xs:attribute name="url"/> 
     <xs:attribute name="isLegacy"/> 
     <xs:attribute name="name"/> 
     <xs:attribute name="helpFileName"/> 
    </xs:complexType> 
    <xs:element name="Sections"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="Section" type="Section" minOccurs="0" maxOccurs="unbounded"/> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 
+0

編輯原帖提供的是什麼,我試圖完成 – Tom 2010-09-09 13:08:45

+0

相應的更新我的例子一個更好的例子;答案仍然是相同的 – xcut 2010-09-09 14:30:28

+0

使用XMLSpy的來驗證XSD,我仍然得到,當你說裁判=「章節」同樣的問題,它母犬「‘節’必須引用現有的元素」。無論如何圍繞? – Tom 2010-09-09 17:12:19