- From: Eddie Robertsson <eddie@allette.com.au>
- Date: Thu, 31 May 2001 09:47:45 +1000
- To: Roman Rytov <roman@davinci.co.il>
- CC: "'xmlschema-dev@w3.org'" <xmlschema-dev@w3.org>
- Message-ID: <3B1586A1.D374210C@allette.com.au>
Hi Roman,
> I tryed to implement UNIQUE element to restrict a set but couldn't do
> it. Where can I find examples of XSD files?
Here is an example schema I developed for a sport tournament (At the end
you'll find the declaration of the Tournament element along with keys,
keyrefs and unique elements). Hope this helps. For more information have
a look in the Primer [1]
Cheers,
/Eddie
[1] http://www.w3.org/TR/xmlschema-0/#specifyingUniqueness
---------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:complexType name="Tournament">
<xsd:sequence>
<xsd:element name="Name" type="xsd:string"/>
<xsd:element name="Type">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Singles"/>
<xsd:enumeration value="Doubles"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="Date" type="xsd:date"/>
<xsd:element name="Participants" type="Participants" minOccurs="0"/>
<xsd:element name="Teams" type="Teams"/>
<xsd:element name="Matches" type="Matches"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="Participants">
<xsd:sequence>
<xsd:element name="Name" minOccurs="2" maxOccurs="unbounded">
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="id" type="xsd:string" use="required"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="nbrParticipants" type="xsd:positiveInteger"
use="required"/>
</xsd:complexType>
<xsd:complexType name="Teams">
<xsd:sequence>
<xsd:element name="Team" minOccurs="2" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Member" type="xsd:string" maxOccurs="2"/>
</xsd:sequence>
<xsd:attribute name="id" type="xsd:string" use="required"/>
<xsd:attribute name="Name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="nbrTeams" type="xsd:positiveInteger"
use="required"/>
</xsd:complexType>
<xsd:complexType name="Matches">
<xsd:sequence>
<xsd:element name="Match" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Team" type="xsd:string" minOccurs="2"
maxOccurs="2"/>
</xsd:sequence>
<xsd:attribute name="id" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="nbrMatches" type="xsd:positiveInteger"
use="required"/>
</xsd:complexType>
<xsd:element name="Tournament" type="Tournament">
<xsd:key name="key_Participant">
<!-- Make sure that each Participant has a unique id -->
<xsd:selector xpath="Participants/Participant"/>
<xsd:field xpath="@id"/>
</xsd:key>
<xsd:keyref name="ref_Participant" refer="key_Participant">
<!-- Make sure that the value of each Member element in the Team
elements is an identifier for an existing Participant -->
<xsd:selector xpath="Teams/Team/Member"/>
<xsd:field xpath="."/>
</xsd:keyref>
<xsd:key name="key_Team">
<!-- Make sure that each Team has a unique id -->
<xsd:selector xpath="Teams/Team"/>
<xsd:field xpath="@id"/>
</xsd:key>
<xsd:keyref name="ref_Team" refer="key_Team">
<!-- Make sure that the value of each Team element in the Match
elements is an identifier for an existing Team -->
<xsd:selector xpath="Matches/Match/Team"/>
<xsd:field xpath="."/>
</xsd:keyref>
<xsd:unique name="unique_Match">
<!-- Make sure that each Match has a unique id -->
<xsd:selector xpath="Matches/Match"/>
<xsd:field xpath="@id"/>
</xsd:unique>
</xsd:element>
</xsd:schema>
Received on Wednesday, 30 May 2001 19:49:15 UTC