2016-02-05 90 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> - 子元素只能按提到的顺序出现。