user1523295
user1523295

Reputation: 53

How to define an element in an xsd which has parent element in the child

How to define an element in an xsd which has parent element in the child?

Here is an example:

<score seq="1" type="test" numeric="23">
    <option lbound="0" ubound="">
        <score seq="1" type="app" numeric="575">
            <option lbound="" ubound="0">0</option>
        </score>
    </option>
</score>

Upvotes: 3

Views: 305

Answers (2)

Daniel Haley
Daniel Haley

Reputation: 52858

Here's an option for any level of nesting...

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    <xs:element name="score">
        <xs:complexType>
            <xs:sequence>
                <xs:element minOccurs="0" maxOccurs="unbounded" ref="option"/>
                <xs:element minOccurs="0" maxOccurs="unbounded" ref="ignore"/>
            </xs:sequence>
            <xs:attribute name="numeric" use="optional" type="xs:integer"/>
            <xs:attribute name="seq" use="required" type="xs:integer"/>
            <xs:attribute name="type" use="required" type="xs:NCName"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="option">
        <xs:complexType mixed="true">
            <xs:sequence>
                <xs:element minOccurs="0" maxOccurs="unbounded" ref="score"/>
            </xs:sequence>
            <xs:attribute name="id" use="optional"/>
            <xs:attribute name="lbound" use="optional"/>
            <xs:attribute name="ubound" use="optional"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="ignore"/>
</xs:schema>

This works for both examples you've given:

Example 1

<score seq="1" type="test" numeric="23">
    <option lbound="0" ubound="">
        <score seq="1" type="app" numeric="575">
            <option lbound="" ubound="0">0</option>
        </score>
    </option>
</score>

Example 2 (from comment)

<score seq="1" type="IN">
    <option id="1">10</option>
    <ignore/>
</score>

Upvotes: 0

Rookie Programmer Aravind
Rookie Programmer Aravind

Reputation: 12154

Like this:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="score">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="option">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="score">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="option">
                      <xs:complexType>
                        <xs:simpleContent>
                          <xs:extension base="xs:unsignedByte">
                            <xs:attribute name="lbound" type="xs:string" use="required" />
                            <xs:attribute name="ubound" type="xs:unsignedByte" use="required" />
                          </xs:extension>
                        </xs:simpleContent>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                  <xs:attribute name="seq" type="xs:unsignedByte" use="required" />
                  <xs:attribute name="type" type="xs:string" use="required" />
                  <xs:attribute name="numeric" type="xs:unsignedShort" use="required" />
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute name="lbound" type="xs:unsignedByte" use="required" />
            <xs:attribute name="ubound" type="xs:string" use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:attribute name="seq" type="xs:unsignedByte" use="required" />
      <xs:attribute name="type" type="xs:string" use="required" />
      <xs:attribute name="numeric" type="xs:unsignedByte" use="required" />
    </xs:complexType>
  </xs:element>
</xs:schema>

Upvotes: 1

Related Questions