开发者

Is there something radically wrong with this XML Schema?

I have only an elementary understanding of XML Schema. This is basically my first interaction with them in any serious way and I'm having some is开发者_StackOverflow社区sues. I've read up on XSDs on google and everything looks on the up and up with this file.

<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>

Here's how I'm loading it:

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

I'm getting an exception like the following:

org.xml.sax.SAXParseException: src-element.3: Element 'property' has both a 'type' attribute and a 'anonymous type' child. Only one of these is allowed for an element.

Thanks for the help SO! Any general advice on reading/using schemas created by others is also appreciated! :D


Element 'property' has both a 'type' attribute and a 'anonymous type' child

In other words, you say type="xs:string" and this prescribes nodes like <property>foo</property>. But also you put a ComplexType item inside the property, and this prescribes nodes like <property><item>...</item></property>. This is the contradiction which the parser considers an error.

If you want to store a number of items in each property and one separate string per property, store this string as separate node, either a child with a tag, or an attribute of property. E.g. <property mystring="foo"><item>...</item></property>


This bit is your problem code:

<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>

either remove the type on the outer element (type="xs:string"), or remove the anonymous inner complexType element (<xs:complexType> ... </xs:complexType>)

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜