2014-02-16 55 views
1

我已經創建了一個驗證我的xml實例的xml架構。由於我一直在研究它,因此我一直在評論當時的小部分xml代碼,以便簡化我對xml模式的學習。我現在有一個具有以下結構的有效模式:如何添加父「包裝」元素並在現有架構中驗證它們

<xsd:element name="singer" type="singerType"/> 
<xsd:complexType name="singerType"> 
    <xsd:sequence> 
    <xsd:element name="singer_id"> 
    .... 
    .... 
.... 

但現在我的XML文件中有這樣的結構

<element1> 
    <element2 id="1"> 
     <singer> 
      <singer_id> 

我想要做的是將element1element2到我的現有架構。這兩個元素都是複雜的類型,我試圖用幾種不同的方式做到這一點,但一直在犯錯誤。有人能指出我如何將這2個元素添加到我的模式的正確方向嗎?

+0

'element2'內允許有多少'singer'元素?那麼'element1'呢?它裏面有多少個'element2'?另外,您是否可以顯示完整的有效XSD以及應由其驗證的一個或多個XML實例? – helderdarocha

+0

可以有零個或更多的歌手內元素2 – Stribor

回答

0

我不得不在這裏做一些假設,因爲你沒有包含足夠的代碼示例。如果這不能解答您的問題,請編輯您的問題並添加更多詳細信息。

你有這樣一個XML:

<?xml version="1.0" encoding="UTF-8"?> 
<element1 xmlns="http://your.target.namespace/singer" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://your.target.namespace/singer schema.xsd"> 
    <element2 id="1"> 
     <singer> 
      <singer_id>123</singer_id> 
     </singer> 
     <singer> 
      <singer_id>456</singer_id> 
     </singer> 
    </element2> 
    <element2></element2> 
    <element2> 
     <singer> 
      <singer_id>789</singer_id> 
     </singer> 
    </element2> 
</element1> 

您可以使用此模式驗證它:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      targetNamespace="http://your.target.namespace/singer" 
      xmlns="http://your.target.namespace/singer" 
      elementFormDefault="qualified"> 

    <xs:element name="singer" type="singerType"/> 
    <xs:complexType name="singerType"> 
     <xs:sequence> 
      <xs:element name="singer_id" type="xs:token" /> 
     </xs:sequence> 
    </xs:complexType> 

    <xs:element name="element1"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="element2" minOccurs="0" maxOccurs="unbounded"> 
        <xs:complexType> 
         <xs:sequence> 
          <xs:element ref="singer" minOccurs="0" maxOccurs="unbounded" /> 
         </xs:sequence> 
         <xs:attribute name="id" type="xs:token" /> 
        </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

您可能希望以不同的方式組織它,當然,通過暴露覆雜類型名稱,如果你打算使用它們,或者如果你想在其他地方使用它,則定義頂層的element2

+0

謝謝你...非常感謝 – Stribor

相關問題