<?xml version="1.0" encoding="UTF-8"?> <grammar xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" xmlns="http://relaxng.org/ns/structure/1.0"> <define name="features"> <element name="features"> <ref name="attlist.features"/> <oneOrMore> <ref name="category"/> </oneOrMore> </element> </define> <define name="attlist.features" combine="interleave"> <empty/> </define> <define name="category"> <element name="category"> <ref name="attlist.category"/> <zeroOrMore> <choice> <ref name="feature"/> <ref name="category"/> </choice> </zeroOrMore> </element> </define> <define name="attlist.category" combine="interleave"> <attribute name="name"/> </define> <define name="feature"> <element name="feature"> <ref name="attlist.feature"/> <optional> <ref name="summary"/> </optional> <zeroOrMore> <ref name="responsible"/> </zeroOrMore> </element> </define> <define name="attlist.feature" combine="interleave"> <optional> <attribute name="status" a:defaultValue="todo"> <choice> <value>inprogress</value> <value>todo</value> <value>done</value> </choice> </attribute> </optional> <attribute name="target"/> </define> <define name="responsible"> <element name="responsible"> <ref name="attlist.responsible"/> <empty/> </element> </define> <define name="attlist.responsible" combine="interleave"> <optional> <attribute name="name"/> </optional> <optional> <attribute name="email"/> </optional> </define> <define name="summary"> <element name="summary"> <ref name="attlist.summary"/> <zeroOrMore> <choice> <text/> <ref name="i"/> <ref name="a"/> <ref name="b"/> <ref name="em"/> <ref name="strong"/> <ref name="br"/> </choice> </zeroOrMore> </element> </define> <define name="attlist.summary" combine="interleave"> <empty/> </define> <define name="i"> <element name="i"> <ref name="attlist.i"/> <text/> </element> </define> <define name="attlist.i" combine="interleave"> <empty/> </define> <define name="b"> <element name="b"> <ref name="attlist.b"/> <text/> </element> </define> <define name="attlist.b" combine="interleave"> <empty/> </define> <define name="em"> <element name="em"> <ref name="attlist.em"/> <text/> </element> </define> <define name="attlist.em" combine="interleave"> <empty/> </define> <define name="strong"> <element name="strong"> <ref name="attlist.strong"/> <text/> </element> </define> <define name="attlist.strong" combine="interleave"> <empty/> </define> <define name="br"> <element name="br"> <ref name="attlist.br"/> <empty/> </element> </define> <define name="attlist.br" combine="interleave"> <empty/> </define> <define name="a"> <element name="a"> <ref name="attlist.a"/> <text/> </element> </define> <define name="attlist.a" combine="interleave"> <optional> <attribute name="href"/> </optional> </define> <define name="attlist.a" combine="interleave"> <optional> <attribute name="title"/> </optional> </define> <start> <choice> <ref name="features"/> </choice> </start> </grammar>