Что-то в корне не так с этой XML-схемой? - PullRequest
6 голосов
/ 02 марта 2011

У меня есть только элементарное понимание XML-схемы.По сути, это мое первое общение с ними, и у меня возникли некоторые проблемы.Я прочитал о XSD в Google, и все выглядит с этим файлом.

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="credits">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="property" maxOccurs="16" minOccurs="13" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="property" type="xs:string">    
    <xs:complexType>        
        <xs:sequence>            
            <xs:element ref="item" minOccurs="1" maxOccurs="unbounded" />
        </xs:sequence>
        <xs:attribute ref="name" use="required"/>
    </xs:complexType>

  </xs:element>

  <xs:element name="item" type="xs:string"/>

  <xs:attribute name="name" type="xs:string">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:enumeration value="example1"/>
          <xs:enumeration value="example2"/>
          <xs:enumeration value="example3"/>
          <xs:enumeration value="example4"/>
          <xs:enumeration value="example5"/>
          <xs:enumeration value="example6"/>
          <xs:enumeration value="example7"/>
          <xs:enumeration value="example8"/>
          <xs:enumeration value="example9"/>
          <xs:enumeration value="example10"/>
          <xs:enumeration value="example11"/>
          <xs:enumeration value="example12"/>
          <xs:enumeration value="example13"/>
          <xs:enumeration value="example14"/>
          <xs:enumeration value="example15"/>
          <xs:enumeration value="example16"/>
        </xs:restriction>
      </xs:simpleType>
  </xs:attribute>

</xs:schema>

Вот как я его загружаю:

SchemaFactory schemaFactory = SchemaFactory.newInstance( XMLConstants.W3C_XML_SCHEMA_NS_URI );
Schema schemaXSD = schemaFactory.newSchema( new File ( "test.xsd" ) );

Я получаю исключение, подобное следующему:

org.xml.sax.SAXParseException: src-element.3: Элемент «свойство» имеет как атрибут «тип», так и дочерний «анонимный тип».Только один из них разрешен для элемента.

Спасибо за помощь, ТАК!Любые общие советы по чтению / использованию схем, созданных другими, также приветствуются!: D

Ответы [ 2 ]

6 голосов
/ 02 марта 2011

Элемент 'property' имеет как атрибут 'type', так и дочерний элемент 'anonymous type'

Другими словами, вы говорите type="xs:string", и это предписывает узлы, подобные <property>foo</property>. Но также вы помещаете ComplexType item в property, и это предписывает узлы, подобные <property><item>...</item></property>. Это противоречие, которое парсер считает ошибкой.

Если вы хотите сохранить число item с в каждой property и одной отдельной строке на property, сохраните эту строку как отдельный узел, либо дочерний элемент с тегом, либо атрибут property. Например. <property mystring="foo"><item>...</item></property>

5 голосов
/ 02 марта 2011

Этот бит - ваш код проблемы:

<xs:element name="property" type="xs:string">    
    <xs:complexType>        
        <xs:sequence>            
            <xs:element ref="item" minOccurs="1" maxOccurs="unbounded" />
        </xs:sequence>
        <xs:attribute ref="name" use="required"/>
    </xs:complexType>

  </xs:element>

либо удалите тип на внешнем элементе (type="xs:string"), либо удалите анонимный внутренний элемент complexType (<xs:complexType> ... </xs:complexType>)

...