bobber205
bobber205

Reputation: 13372

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

Upvotes: 6

Views: 3179

Answers (2)

blueberryfields
blueberryfields

Reputation: 50388

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

Upvotes: 5

9000
9000

Reputation: 40894

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>

Upvotes: 6

Related Questions