Skip to content

Instantly share code, notes, and snippets.

@homelinen
Created March 22, 2012 20:37
Show Gist options
  • Save homelinen/2163876 to your computer and use it in GitHub Desktop.
Save homelinen/2163876 to your computer and use it in GitHub Desktop.
My Horrible XML Schema File
<?xml version="1.0" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- Structure -->
<xs:element name="movieReviews">
<xs:complexType>
<xs:sequence>
<!--Movies-->
<xs:element name="movies">
<xs:complexType>
<xs:sequence>
<xs:element name="movie" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string"/>
<xs:element name="releases">
<xs:complexType>
<xs:sequence>
<xs:element name="release" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:date">
<xs:attribute name="country" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="MPAA">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="U" />
<xs:enumeration value="PG" />
<xs:enumeration value="12" />
<xs:enumeration value="15" />
<xs:enumeration value="18" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="genre" type="xs:string" maxOccurs="3" />
<!-- types should really by ints -->
<xs:element name="director" type="xs:string" />
<xs:element name="producer" type="xs:string" />
<xs:element name="actors">
<xs:complexType>
<xs:sequence>
<xs:element name="actorID" type="aIDType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="awards" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="award" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="status">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Nominated" />
<xs:enumeration value="Won" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="type" type="xs:string" />
<xs:element name="awardaID" type="aIDType" minOccurs="0" />
<xs:element name="year" type="xs:gYear" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- People -->
<xs:element name="people">
<xs:complexType>
<xs:sequence>
<xs:element name="person" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="profession" type="xs:string" maxOccurs="unbounded"/>
<xs:element name="age" type="xs:nonNegativeInteger"/>
<xs:element name="gender">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="male"/>
<xs:enumeration value="female"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
<xs:attribute name="aID" type="aIDType" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:key name="actorKey">
<xs:selector xpath="movieReviews/people/person"/>
<xs:field xpath="@aID" />
</xs:key>
<xs:keyref name="actorRef" refer="actorKey">
<xs:selector xpath="movieReviews/movies/movie/actors"/>
<xs:field xpath="actorID"/>
</xs:keyref>
<xs:keyref name="actAwardRef" refer="actorKey">
<xs:selector xpath="movieReviews/movies/movie/awards/award"/>
<xs:field xpath="awardaID" />
</xs:keyref>
<xs:keyref name="directorRef" refer="actorKey">
<xs:selector xpath="movieReviews/movies/movie"/>
<xs:field xpath="director" />
</xs:keyref>
<xs:keyref name="prodRef" refer="actorKey">
<xs:selector xpath="movieReviews/movies/movie"/>
<xs:field xpath="poducer" />
</xs:keyref>
</xs:element>
<xs:simpleType name="aIDType">
<xs:restriction base="xs:string">
<xs:pattern value="[A][0-9]*" />
</xs:restriction>
</xs:simpleType>
</xs:schema>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment