2017-02-21 45 views
1

У меня есть XSD:Java XML Schema Validation elementFormDefault = "квалифицированное"

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" 
     elementFormDefault="qualified"> 
<xs:element name="Structure"> 
    <xs:annotation> 
     <xs:documentation>Comment describing your root element</xs:documentation> 
    </xs:annotation> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element minOccurs="0" ref="Tag1"/> 
      <xs:element maxOccurs="unbounded" minOccurs="0" ref="Tag2"/> 
      <xs:element minOccurs="0" ref="Properties"/> 
      <xs:element minOccurs="0" ref="Tag3"/> 
     </xs:sequence> 
     <xs:attribute name="url"/> 
    </xs:complexType> 
</xs:element> 
<xs:element name="Tag1"> 
    <xs:complexType> 
     <xs:attribute name="attr"/> 
     <xs:attribute name="attr2"/> 
    </xs:complexType> 
</xs:element> 
<xs:element name="Tag2"> 
    <xs:complexType> 
     <xs:sequence maxOccurs="unbounded"> 
      <xs:element minOccurs="0" ref="Object"/> 
      <xs:element maxOccurs="unbounded" minOccurs="0" ref="Tag2"/> 
     </xs:sequence> 
     <xs:attribute name="filter"/> 
    </xs:complexType> 
</xs:element> 
<xs:element name="Object"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element minOccurs="0" name="tag35"> 
       <xs:complexType> 
        <xs:sequence minOccurs="0"> 
         <xs:element maxOccurs="unbounded" minOccurs="0" ref="Tag3"/> 
        </xs:sequence> 
        <xs:attribute name="attr4"/> 
       </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
     <xs:attribute name="attr48"/> 
    </xs:complexType> 
</xs:element> 

<xs:element name="element52"> 
    <xs:annotation> 
     <xs:documentation>Text54</xs:documentation> 
    </xs:annotation> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element minOccurs="0" ref="el58"/> 
     </xs:sequence> 
     <xs:attribute name="vector"/> 
    </xs:complexType> 
</xs:element> 
<xs:element name="el66" type="el66Type"/> 
<xs:element name="el58"> 
    <xs:complexType mixed="true"> 
     <xs:attribute name="ID" type="xs:string"/> 
    </xs:complexType> 
</xs:element> 
<xs:element name="Tag3"> 
    <xs:complexType> 
     <xs:sequence maxOccurs="unbounded" minOccurs="0"> 
      <xs:element minOccurs="0" name="MetaProperty"> 
       <xs:complexType> 
        <xs:sequence minOccurs="0"> 
         <xs:any/> 
        </xs:sequence> 
        <xs:attribute name="name"/> 
        <xs:attribute name="value"/> 
       </xs:complexType> 
      </xs:element> 
      <xs:element minOccurs="0" ref="Property"/> 
     </xs:sequence> 
     <xs:attribute name="ID"/> 
     <xs:attribute name="language" use="optional"/> 
    </xs:complexType> 
</xs:element> 
<xs:element name="Property"> 
    <xs:complexType> 
     <xs:sequence minOccurs="0"> 
      <xs:any minOccurs="0" processContents="skip"/> 
     </xs:sequence> 
     <xs:attribute name="name"/> 
     <xs:attribute name="type"/> 
    </xs:complexType> 
</xs:element> 
<xs:element name="Properties"> 
    <xs:complexType> 
     <xs:sequence maxOccurs="unbounded" minOccurs="0"> 
      <xs:element minOccurs="0" ref="Property"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 
<xs:complexType mixed="true" name="el66Type"> 
    <xs:attribute name="ID" type="xs:string"/> 
</xs:complexType> 
</xs:schema> 

И в XML:

<Structure url="/Test/url"> 
<Tag1/> 
<Tag2> 
    <Object> 
     <tag35/> 
    </Object> 
</Tag2> 
<Properties> 
    <Property name="bla" type="value1"/> 
    <Property name="bla2" type="value2"/> 
</Properties> 
</Structure> 

Я делаю проверку, и я получаю следующее сообщение об ошибке:

org.xml.sax.SAXParseException; cvc-complex-type.2.4.a: Invalid content was found starting with element 'Tag2'. One of '{Tag1, Tag2, Tag3}' is expected. 

Я проверил в предыдущих вопросах и всегда решение связано с elementFormDefau lt = "qualified", но теперь это не так, возможно ли, что там есть ошибка? Любая подсказка, будем благодарны.

+0

Хм, «как это» не так хорошо, как нам нужно было бы угадать, что реально и что упрощено, так что «точно» понадобится. Можете ли вы воспроизвести проблему с помощью очень простого примера XSD и XML и вставить их здесь? –

+2

elementFormDefault: (a) он не имеет эффекта, если для схемы нет целевого пространства имен, которое у вас нет; (b) он влияет только на объявления локальных элементов (используя name =, а не ref =), и в вашей схеме их нет. Поэтому я не думаю, что это проблема. Но без реплики я не знаю, что есть. –

ответ

0

Ваш XML действителен в отношении вашего XSD, опубликованного в вашем вопросе.

Сообщение об ошибке в вашем ответе не возвращается. Должно быть, это было из разных документов XML или XSD.

Как Майкл Кей утверждает в комментариях:

  • elementFormDefault влияет только на локальные объявления элементов.
  • elementFormDefault только вступает в игру, когда XSD имеет targetNamespace.

Для получения более подробной информации о elementFormDefault см this answer.