155

I'm having difficulty searching for this. How would I define an element in an XML schema file for XML that looks like this:

<option value="test">sometext</option>

I can't figure out how to define an element that is of type xs:string and also has an attribute.

Here's what I've got so far:

<xs:element name="option">
    <xs:complexType>
        <xs:attribute name="value" type="xs:string" />
    </xs:complexType>
</xs:element>

3 Answers 3

190

Try

  <xs:element name="option" type="AttrElement" />

  <xs:complexType name="AttrElement">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="value" type="xs:string">
        </xs:attribute>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
Sign up to request clarification or add additional context in comments.

3 Comments

I am getting the following exception on trying your code - org.xml.sax.SAXParseException: src-resolve: Cannot r esolve the name 'AttrElement' to a(n) 'type definition' component. Why is that so?
If that is so, it is probably because your schema document has a target namespace and you will need to use a prefixed name to point to the type. (If the prefix tns is bound to the schema document's target namespace, you will use type="tns:AttrElement" to refer to the type.)
@Ashwin you might need to reference the type with the type namespace (type="tns:AtrElement" if your default namespace of the XSD is xs not the targetNamespace of the document. Typically in that case tns is defined and used.
87

... or the inline equivalent:

<xs:element name="option">
  <xs:complexType>
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="value" type="xs:string" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
</xs:element>

2 Comments

I find it really unintuitive to define simpleContent within a complexType. But then again it's XSD, where nothing seems really intuitive. Thanks nonetheless! :-)
This will show an error for me in IntelliJ (V12.1.3): The value attribute is "not allowed". Using complexContent instead of simpleContent fixed it.
-1

I know it is not the same, but it works for me:

<xsd:element name="option">
    <xsd:complexType mixed="true">
        <xsd:attribute name="value" use="optional" type="xsd:string"/>
    </xsd:complexType>
</xsd:element>

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.