CaseWiki:RelaxNG
This site uses Relax NG to define the XML structure for embedded elements. An attempt was made to use XML Schema, however the lack of maxOccurs="unbounded" for an <all> made things rather difficult. Relax NG appears easier to read anyway.
<?xml version='1.0' encoding='ISO-8859-1'?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<start>
<choice>
<element name="building">
<ref name="buildingType" />
</element>
<element name="foodProvider">
<ref name="foodProviderType" />
</element>
<element name="department">
<ref name="departmentType" />
</element>
<element name="office">
<ref name="officeType" />
</element>
</choice>
</start>
<define name="buildingType">
<interleave>
<element name="name">
<text />
</element>
<optional>
<element name="wiki">
<text />
</element>
</optional>
<element name="abbr">
<text />
</element>
<optional>
<element name="floors">
<data type="integer" />
</element>
</optional>
<optional>
<element name="built">
<data type="integer" />
</element>
</optional>
<optional>
<element name="destroyed">
<data type="integer" />
</element>
</optional>
<optional>
<element name="location">
<ref name="locationElement" />
</element>
</optional>
</interleave>
</define>
<define name="foodProviderType">
<interleave>
<element name="name">
<text />
</element>
<optional>
<element name="wiki">
<text />
</element>
</optional>
<optional>
<element name="menu">
<ref name="foodProviderMenu" />
</element>
</optional>
<optional>
<element name="location">
<ref name="locationElement" />
</element>
</optional>
</interleave>
</define>
<define name="foodProviderMenu">
<oneOrMore>
<element name="item">
<ref name="foodProviderMenuItem" />
</element>
</oneOrMore>
</define>
<define name="foodProviderMenuItem">
<interleave>
<element name="name">
<text />
</element>
<element name="description">
<text />
</element>
<element name="cost">
<data type="decimal" />
</element>
</interleave>
</define>
<define name="departmentType">
<interleave>
<element name="name">
<text />
</element>
<optional>
<element name="wiki">
<text />
</element>
</optional>
<optional>
<element name="abbr">
<text />
</element>
</optional>
<zeroOrMore>
<element name="location">
<ref name="locationElement" />
</element>
</zeroOrMore>
</interleave>
</define>
<define name="officeType">
<interleave>
<element name="name">
<text />
</element>
<optional>
<element name="wiki">
<text />
</element>
</optional>
<zeroOrMore>
<element name="location">
<ref name="locationElement" />
</element>
</zeroOrMore>
</interleave>
</define>
<define name="locationElement">
<choice>
<ref name="buildingLocation" />
<ref name="geoLocation" />
</choice>
</define>
<define name="buildingLocation">
<element name="wiki">
<text />
</element>
<optional>
<element name="floor">
<!-- 0 or 1 is ground floor; negative signifies basement -->
<data type="integer" />
</element>
</optional>
</define>
<define name="geoLocation">
<interleave>
<element name="lat">
<data type="decimal" />
</element>
<element name="lon">
<data type="decimal" />
</element>
<optional>
<element name="alt">
<data type="decimal" />
</element>
</optional>
</interleave>
</define>
</grammar>
Case Referrers
Blog Entries
- Gregory Szorc's blog - Storing XML in the Case Wiki (12 referral)
- Gregory Szorc's blog - Case Archives (1 referral)
- Gregory Szorc's blog - Services Archives (1 referral)
- Gregory Szorc's blog - Computing Archives (1 referral)
