2016-02-05 3 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: Элемент 'film': этого элемента не ожидается.

ответ

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> - дочерние элементы могут отображаться только в указанном порядке.

Смежные вопросы