Examples of all the different ways of creating XML Schema simpleTypes

Hi Folks,

Below is an XML Schema. It contains examples of all the different ways of creating simpleTypes. Please let me know if there are other ways that I haven't accounted for.  /Roger


<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                     targetNamespace="http://www.example.org"
                     xmlns="http://www.example.org"
                     elementFormDefault="qualified">
        
    <!-- 
        Lists
        1. An unbounded list of integers
        2. A list of integers, constrained to 10 items in the list
        3. A restriction of a type that is a list of integers, constrained to 5 items of the type
        4. A list of strings that are constrained by a regex and a maxLength of 15, and the list is constrained to 4 items
    -->
    
    <!-- ******************************** -->
    <!-- 1. An unbounded list of integers -->
    <!-- ******************************** -->
    
    <xsd:element name="Numbers" type="Numbers" />
    
    <xsd:simpleType name="Numbers">
        <xsd:list itemType="xsd:integer" />
    </xsd:simpleType>
    
    <!-- ********************************************************** -->
    <!-- 2. A list of integers, constrained to 10 items in the list -->
    <!-- ********************************************************** -->
    
    <xsd:element name="Ten-Numbers" type="Ten-Numbers" />
    
    <xsd:simpleType name="Ten-Numbers">
        <xsd:restriction>
            <xsd:simpleType>
                <xsd:list itemType="xsd:integer" />
            </xsd:simpleType>
            <xsd:length value="10"/>
        </xsd:restriction>
    </xsd:simpleType>
    
    <!-- ***************************************************************************************** -->
    <!-- 3. A restriction of a type that is a list of integers, constrained to 5 items of the type -->
    <!-- ***************************************************************************************** -->
    
    <xsd:element name="Five-Numbers" type="Five-Numbers" />
    
    <xsd:simpleType name="Five-Numbers">
        <xsd:restriction base="Numbers">
            <xsd:length value="5"/>
        </xsd:restriction>
    </xsd:simpleType>
    
    <!-- ****************************************************************************************************************** -->
    <!-- 4. A list of strings that are constrained by a regex and a maxLength of 15, and the list is constrained to 4 items -->
    <!-- ****************************************************************************************************************** -->

    <xsd:element name="Names" type="Names" />
    
    <xsd:simpleType name="Names">
        <xsd:restriction>
            <xsd:simpleType>
                <xsd:list itemType="Name"/>
            </xsd:simpleType>
            <xsd:length value="4"/>
        </xsd:restriction>
    </xsd:simpleType>
    
    <xsd:simpleType name="Name">
        <xsd:restriction base="xsd:string">
            <xsd:maxLength value="15" />
            <xsd:pattern value="[a-zA-Z]*" />
        </xsd:restriction>
    </xsd:simpleType>
    
    <!-- *********************************************** -->
    <!-- 5. Same as (4), except the list type is inlined -->
    <!-- *********************************************** -->
    
    <xsd:element name="Names-Inlined" type="Names-Inlined" />
    
    <xsd:simpleType name="Names-Inlined">
        <xsd:restriction>
            <xsd:simpleType>
                <xsd:list>
                    <xsd:simpleType >
                        <xsd:restriction base="xsd:string">
                            <xsd:maxLength value="15" />
                            <xsd:pattern value="[a-zA-Z]*" />
                        </xsd:restriction>
                    </xsd:simpleType>
                </xsd:list>
            </xsd:simpleType>
            <xsd:length value="4"/>
        </xsd:restriction>
    </xsd:simpleType>
    

    
    <!-- 
        Unions
        6. A union of string and integer
        7. A union of a nonNegativeInteger and a single string
        8. A union of a strings of maxLength 10 and integers of maxInclusive 50
        9. A simpleType that is a synonym for the Names-and-Numbers simpleType
    -->
    
    <!-- ******************************** -->
    <!-- 6. A union of string and integer -->
    <!-- ******************************** -->

    <xsd:element name="Names-and-Numbers" type="Names-and-Numbers" />
    
    <xsd:simpleType name="Names-and-Numbers">
        <xsd:union memberTypes="xsd:string xsd:integer" />
    </xsd:simpleType>
    
    <!-- ****************************************************** -->
    <!-- 7. A union of a nonNegativeInteger and a single string -->
    <!-- ****************************************************** -->
    
    <xsd:element name="maxOccurs" type="maxOccurs" />
    
    <xsd:simpleType name="maxOccurs">
        <xsd:union memberTypes="xsd:nonNegativeInteger" >
            <xsd:simpleType>
                <xsd:restriction base="xsd:string">
                    <xsd:enumeration value="unbounded" />
                </xsd:restriction>
            </xsd:simpleType>
        </xsd:union>
    </xsd:simpleType>
 
    <!-- *********************************************************************** -->
    <!-- 8. A union of a strings of maxLength 10 and integers of maxInclusive 50 -->
    <!-- *********************************************************************** -->
    
    <xsd:element name="Restricted-Names-and-Numbers" type="Restricted-Names-and-Numbers" />
    
    <xsd:simpleType name="Restricted-Names-and-Numbers">
        <xsd:union>
            <xsd:simpleType>
                <xsd:restriction base="xsd:string">
                    <xsd:maxLength value="10" />
                </xsd:restriction>
            </xsd:simpleType>
            <xsd:simpleType>
                <xsd:restriction base="xsd:integer">
                    <xsd:maxInclusive value="50" />
                </xsd:restriction>
            </xsd:simpleType>
        </xsd:union>
    </xsd:simpleType>

    <!-- ********************************************************************** -->
    <!-- 9. A simpleType that is a synonym for the Names-and-Numbers simpleType -->
    <!-- ********************************************************************** -->
    
    <xsd:element name="My-Names-and-Numbers" type="My-Names-and-Numbers" />
    
    <xsd:simpleType name="My-Names-and-Numbers">
        <xsd:restriction base="Names-and-Numbers" />
    </xsd:simpleType>
    
    <!-- 
        Other
        10. A simpleType restricts a simpleType which restricts another simpleType
        11. Same as (10) except all simpleTypes are inlined
    -->
    
    <!-- ************************************************************************** -->
    <!-- 10. A simpleType restricts a simpleType which restricts another simpleType -->
    <!-- ************************************************************************** -->
    
    <xsd:simpleType name="BostonAreaSurfaceElevation">
        <xsd:restriction base="EarthSurfaceElevation">
            <xsd:minInclusive value="0"/>
            <xsd:maxInclusive value="120"/>
        </xsd:restriction>
    </xsd:simpleType>
    
    <xsd:simpleType name="EarthSurfaceElevation">
        <xsd:restriction base="Elevation">
            <xsd:minInclusive value="-1290"/>
            <xsd:maxInclusive value="29035"/>
        </xsd:restriction>
    </xsd:simpleType>
    
    <xsd:simpleType name="Elevation">
        <xsd:restriction base="xsd:integer">
            <xsd:minInclusive value="-999999"/>
            <xsd:maxInclusive value="999999"/>
        </xsd:restriction>
    </xsd:simpleType>
    
    <!-- *************************************************** -->
    <!-- 11. Same as (10) except all simpleTypes are inlined -->
    <!-- *************************************************** -->
    
    <xsd:simpleType name="BostonAreaSurfaceElevation-Inlined">
        <xsd:restriction>
            <xsd:simpleType>
                <xsd:restriction>
                    <xsd:simpleType>
                        <xsd:restriction base="xsd:integer">
                            <xsd:minInclusive value="-999999"/>
                            <xsd:maxInclusive value="999999"/>
                        </xsd:restriction>
                    </xsd:simpleType>
                    <xsd:minInclusive value="-1290"/>
                    <xsd:maxInclusive value="29035"/>
                </xsd:restriction>
            </xsd:simpleType>	
            <xsd:minInclusive value="0"/>
            <xsd:maxInclusive value="120"/>
        </xsd:restriction>
    </xsd:simpleType>
    
</xsd:schema>

Received on Friday, 24 June 2011 17:54:17 UTC