2011-07-28 91 views
0

我們,我在架構的含義有點糊塗生成的XML模式(即,它到底是什麼尋找到有效)XML架構意味着問題

<xs:element name="element"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element minOccurs="0" name="firstitem_id" type="xs:integer" /> 
     <xs:element minOccurs="0" maxOccurs="unbounded" name="seconditem_id"> 
     <xs:complexType> 
      <xs:simpleContent> 
      <xs:extension base="xs:integer"> 
       <xs:attribute name="order" type="xs:integer" /> 
      </xs:extension> 
      </xs:simpleContent> 
     </xs:complexType> 
     </xs:element> 
    </xs:sequence> 
    <xs:attribute name="id" type="xs:integer" use="required" /> 
    </xs:complexType> 
</xs:element> 

從我被告知這其實是在問以下:

<element> 
    <firstitem_id>17</firstitem_id> 
    <seconditem_id order="2">34</seconditem_id> 
</element> 

這是真的,爲什麼會這樣規格以這種方式出現?

回答

1

即模式片段定義了 「元件」 元件下述結構規則:

  • 它的名字是「元素」
  • 它必須有一個整數值的「id」屬性(您的例子並不)
  • 子元素「firstitem_id」
    • 是可選
    • 只能使用一次
    • 它的值必須是一個整數
    • 與之前的「seconditem_id」它必須出現如果兩個元素在實例文檔
  • 子元素「seconditem_id」
    • 也是可選
    • 可以出現不止一次
    • 它的值必須是整數

這是一個有效的例子:

<element id="1"> 
    <firstitem_id>17</firstitem_id> 
    <seconditem_id order="2">34</seconditem_id> 
</element> 

這是另一種:

<element id="2"> 
    <seconditem_id order="2">34</seconditem_id> 
</element> 

這是另一種:

<element id="3"> 
    <firstitem_id>17</firstitem_id> 
</element> 

而另:

<element id="4"> 
    <firstitem_id>17</firstitem_id> 
    <seconditem_id order="2">34</seconditem_id> 
    <seconditem_id order="3">35</seconditem_id> 
</element> 

而另:

<element id="5"> 
    <seconditem_id order="2">34</seconditem_id> 
    <seconditem_id order="3">35</seconditem_id> 
</element> 
+0

謝謝你,忘了ID爲基本元素只是我的一個錯字,並且我理解可選要求,但爲什麼會在此細長格式中生成「seconditem_id」的選項?我認爲這些選項的呈現要簡單得多。 –

+0

看起來好像「seconditem_id」可以表示爲:'(未測試)。至於爲什麼它是這樣產生的,不知道。你使用什麼工具? –

+0

'xs:element minOccurs =「0」maxOccurs =「unbounded」type =「xs:integer」name =「seconditem_id」>' - 它不起作用。 –

2

根據您的架構,提供的XML無效,因爲元素element需要設置屬性id。 表示XML的另一種方式是使用XSD中的引用,例如等效模式:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="element"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element minOccurs="0" name="firstitem_id" type="xs:integer" /> 
       <xs:element ref="seconditem_id" minOccurs="0" maxOccurs="unbounded"/> 
      </xs:sequence> 
      <xs:attribute name="id" type="xs:integer" use="required" /> 
     </xs:complexType> 
    </xs:element> 

    <xs:element name="seconditem_id"> 
     <xs:complexType> 
      <xs:simpleContent> 
       <xs:extension base="xs:integer"> 
        <xs:attribute name="order" type="xs:integer" /> 
       </xs:extension> 
      </xs:simpleContent> 
     </xs:complexType> 
    </xs:element> 

</xs:schema> 

樣品有效的XML:

<element id="12"/> 

<element id="12"> 
    <firstitem_id>17</firstitem_id> 
    <seconditem_id>10</seconditem_id> 
    <seconditem_id order="2">34</seconditem_id> 
    <seconditem_id>20</seconditem_id> 
    <seconditem_id>30</seconditem_id> 
</element>