2016-02-05 105 views
2

你好我是全新的XML/XSD。有誰可以幫我這個: XML(假設):XML驗證問題

<?xml version="1.0" encoding="UTF-8"?> 

     <filmliste xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="filmliste.xsd" 
      author="Max" datum="20.01.2016"> 
    <film> 
     <titel> Movie</titel> 
     <regiseur> abc </regiseur> 
     <erscheinungsjahr> 2015 </erscheinungsjahr> 
     <schauspieler> abc </schauspieler> 
     <bewertung> abc </bewertung> 
    </film> 
    <film> 
     <titel> Movie2 </titel> 
     <erscheinungsjahr> 2015 </erscheinungsjahr> 
     <regiseur> abc </regiseur> 
     <schauspieler> abc </schauspieler> 
     <genre> abc </genre> 
    </film> 
</filmliste> 

我的架構:

 <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="filmliste"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="film"> 
      <xs:complexType> 
      <xs:choice > 
       <xs:element type="xs:string" name="titel" maxOccurs="1"/> 
       <xs:element type="xs:string" name="regiseur" maxOccurs="unbounded"/> 
       <xs:element type="xs:float" name="erscheinungsjahr" maxOccurs="1"/> 
       <xs:element type="xs:string" name="schauspieler" maxOccurs="unbounded"/> 
       <xs:element type="xs:float" name="bewertung" minOccurs="0"/> 
       <xs:element type="xs:string" name="genre"/> 
      </xs:choice> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
     <xs:attribute type="xs:string" name="author"/> 
     <xs:attribute type="xs:string" name="datum"/> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

現在我有我的XML文檔中的兩個驗證錯誤。 1:元素'regiseur':該元素不是預期的。 2:元素'電影':此元素不是預期的。

回答

1
  1. xsd:choice元素不正確。它只允許包含成員的一個出現。也就是說,你可以有一個titel或一個regiseur但不是兩者都有。使用xsd:all(項目以任意順序出現)或xsd:sequence(項目按指定順序出現)。通過您的XML判斷,訂單並不重要,因此這應該是xsd:all

  2. 默認xsd:[email protected]1。因此,它在第二個film抱怨。指定適當的最大限制:

    <xs:sequence maxOccurs="unbounded"> 
    
1

錯誤是您正在使用<xs:choice>標記。 使用此標籤意味着您只能放入其中一個選項(子元素)。將其更改爲以下任一標籤。

<xsd:all> - 子元素可以以任何順序出現。

<xsd:sequence> - 子元素只能按提到的順序出現。