xmlxsdxsd-validationxml-validation

Where does xsd:attribute declaration go? (A problem was found starting at: attribute.)


I want to declare an attribute of an element already defined. I would like that the element person could have 2 attributes (name, id) I have this:

<xs:element name="person" type="perso" />

<xs:complexType name="perso">
 <!-- I tried to declare the attribute here.Not working-->
        <xs:sequence>
            <!-- I tried to declare the attribute here.Not working-->
            <xs:element name="description" type="xs:string" />
        </xs:sequence>
</xs:complexType>

I am looking to declare a global, not local, complex type. I am not interested in mixed content.

The error message I'm getting:

element attribute: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}sequence': The content is not valid. Expected is (annotation?, (element | group | choice | sequence | any)*).


Solution

  • Attribute declarations go after xs:sequence:

    <?xml version="1.0" encoding="UTF-8"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
      <xs:element name="person" type="perso" />
      <xs:complexType name="perso">
        <xs:sequence>
          <xs:element name="description" type="xs:string" />
        </xs:sequence>
        <xs:attribute name="name" type="xs:string"/>
        <xs:attribute name="id" type="xs:string"/>
      </xs:complexType>
    </xs:schema>