Example of XML schema: Person
Person Schema
Person Schema Diagram
This diagram illustrates the concept of schema in general (class with the XML Document Definition Root stereotype), the modeling of XML elements using associations and the use of abstract classes (Person Address).
Person Schema XSD Generation
<xsd:schema targetNamespace="Person" xmlns="Person" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:Alias1="urn:schemas-microsoft-com:datatypes" xmlns:Alias2="Library" xmlns:Alias3="Enterprise">
<xsd:import namespace="urn:schemas-microsoft-com:datatypes"/>
<xsd:import namespace="Library"/>
<xsd:import namespace="Enterprise" schemaLocation=""/>
<xsd:element name="Document" type="Document" minOccurs="1" maxOccurs="1">
</xsd:element>
<xsd:attribute name="Name" type="xsd:language" use="required">
</xsd:attribute>
<xsd:attribute name="FirstName" type="xsd:language" use="required">
</xsd:attribute>
<xsd:simpleType name="USStateList">
<xsd:list base="USState">
</xsd:list>
</xsd:simpleType>
<xsd:simpleType name="USState">
<xsd:restriction base="xsd:language">
<xsd:enumeration value="PA"/>
<xsd:enumeration value="NY"/>
<xsd:enumeration value="CA"/>
<xsd:enumeration value="LA"/>
<xsd:enumeration value="AK"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="ZipCode">
<xsd:union memberTypes="xsd:int USState">
</xsd:union>
</xsd:simpleType>
<xsd:complexType name="Address" abstract="false" mixed="false">
<xsd:sequence>
<xsd:element name="Description" type="Alias2:Comment" minOccurs="1" maxOccurs="1">
</xsd:element>
</xsd:sequence>
<xsd:attribute name="id" use="required" type="xsd:ID"/>
<xsd:attribute name="StreetNumber" type="xsd:int" use="required">
</xsd:attribute>
<xsd:attribute name="ZipCode" type="ZipCode" use="required">
</xsd:attribute>
<xsd:attribute name="City" type="xsd:anyType" use="required">
</xsd:attribute>
<xsd:attribute name="StreetName" type="xsd:anyType" use="required">
</xsd:attribute>
</xsd:complexType>
<xsd:complexType name="PersonAddress" abstract="true" mixed="false">
<xsd:attribute name="id" use="required" type="xsd:ID"/>
</xsd:complexType>
<xsd:complexType name="WorkLocation" abstract="false" mixed="false">
<xsd:complexContent mixed="false">
<xsd:extension base="PersonAddress">
<xsd:attribute name="Enterprise" use="required" type="xsd:IDREF"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="PersonalAddress" abstract="false" mixed="false">
<xsd:complexContent mixed="false">
<xsd:extension base="PersonAddress">
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="Document" abstract="false" mixed="false">
<xsd:sequence>
<xsd:element name="Enterprise" type="Alias3:Enterprise" minOccurs="0" maxOccurs="unbounded">
</xsd:element>
<xsd:element name="Person" type="Person" minOccurs="0" maxOccurs="unbounded">
<xsd:key name="IDPerson">
<xsd:selector xpath="Document/Person">
<xsd:field xpath="@Name"/>
<xsd:field xpath="@FirstName"/>
</xsd:selector>
</xsd:key>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="id" use="required" type="xsd:ID"/>
</xsd:complexType>
<xsd:complexType name="Person" abstract="false" mixed="false">
<xsd:sequence>
<xsd:element name="PersonAddress" type="PersonAddress" minOccurs="1" maxOccurs="unbounded">
</xsd:element>
</xsd:sequence>
<xsd:attribute name="id" use="required" type="xsd:ID"/>
<xsd:attribute ref="Name" use="required">
</xsd:attribute>
<xsd:attribute ref="FirstName" use="required">
</xsd:attribute>
</xsd:complexType>
</xsd:schema>