Project Index | Documentation | Relax NG | Sample XML File
<grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> <start> <element name = "family_tree"> <ref name = "peopleRef"/> <ref name = "familiesRef"/> </element> </start> <define name = "peopleRef"> <element name = "people"> <oneOrMore> <ref name = "personRef"/> </oneOrMore> </element> </define> <define name = "personRef"> <element name = "person"> <attribute name = "id"> <data type="ID"/> </attribute> <attribute name = "gender"> <choice> <value type = "string">m</value> <value type = "string">f</value> </choice> </attribute> <element name = "name"> <group> <element name = "given"><text/></element> <element name = "surname"><text/></element> </group> </element> <interleave> <optional> <element name = "birth"> <ref name="place-date"/> </element> </optional> <optional> <element name = "death"> <ref name="place-date"/> </element> </optional> <optional> <element name = "spouse"> <ref name = "person-idref"> </element> </optional> <optional> <element name = "father"> <ref name = "person-idref"/> </element> </optional> <optional> <element name = "mother"> <ref name = "person-idref"/> </element> </optional> </interleave> </element> </define> <define name = "familiesRef"> <element name = "families"> <oneOrMore> <element name = "family"> <attribute name = "id"> <data type="ID"> <param name ="pattern">[f]\d{1,}</param> </data> </attribute> <interleave> <optional> <element name = "husband"> <ref name="person-idref"/> </element> </optional> <optional> <element name = "wife"> <ref name="person-idref"/> </element> </optional> <optional> <zeroOrMore> <element name = "child"> <ref name="person-idref"/> </element> </zeroOrMore> </optional> <optional> <element name = "marriage"> <interleave> <optional> <element name = "date"> <data type="string"> <param name = "pattern">\d{4}-\d{2}-\d{2}</param> </data> </element> </optional> <optional> <element name = "place"><text/></element> </optional> </interleave> </element> </optional> <optional> <element name = "description"><text/></element> </optional> </interleave> </element> </oneOrMore> </element> </define> <define name="place-date"> <interleave> <element name = "place"> <data type="string"> <param name ="pattern">\w+</param> </data> </element> <element name = "date"> <data type="string"> <param name = "pattern">\d{4}-\d{2}-\d{2}</param> </data> </element> </interleave> </define> <define name="person-idref"> <attribute name = "idref"> <data type = "IDREF"> <param name="pattern">[p]\d{1,}</param> </data> </attribute> </define> </grammar>