<grammar xmlns="http://relaxng.org/ns/structure/1.0" xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" ns="http://www.daisy.org/ns/2008/pef" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> <a:documentation> RELAX NG schema for PEF 1.0 - Portable Embosser Format Public Draft 12 February 2009 Authors: Joel Håkansson, Piotr Kiernicki, Linus Ericson </a:documentation> <start> <ref name="element.pef"/> </start> <define name="element.pef"> <element name="pef" ns="http://www.daisy.org/ns/2008/pef"> <ref name="element.pef.attList"/> <ref name="element.head"/> <ref name="element.body"/> </element> </define> <define name="element.pef.attList"> <attribute name="version"> <choice> <value>2008-1</value> </choice> </attribute> <zeroOrMore> <ref name="attribute.anyExceptDefault"/> </zeroOrMore> </define> <define name="element.head"> <element name="head"> <zeroOrMore> <ref name="attribute.anyExceptDefault"/> </zeroOrMore> <interleave> <ref name="element.meta"/> <zeroOrMore> <ref name="element.any"/> </zeroOrMore> </interleave> </element> </define> <define name="element.meta"> <element xmlns:dc="http://purl.org/dc/elements/1.1/" name="meta"> <zeroOrMore> <ref name="attribute.anyExceptDefault"/> </zeroOrMore> <interleave> <element name="dc:identifier"> <zeroOrMore> <ref name="attribute.anyExceptDefault"/> </zeroOrMore> <ref name="datatype.string"/> </element> <element name="dc:format"> <zeroOrMore> <ref name="attribute.anyExceptDefault"/> </zeroOrMore> <ref name="datatype.mime.pef"/> </element> <optional> <element name="dc:title"> <zeroOrMore> <ref name="attribute.anyExceptDefault"/> </zeroOrMore> <ref name="datatype.string"/> </element> </optional> <zeroOrMore> <element name="dc:creator"> <zeroOrMore> <ref name="attribute.anyExceptDefault"/> </zeroOrMore> <ref name="datatype.string"/> </element> </zeroOrMore> <zeroOrMore> <element name="dc:subject"> <zeroOrMore> <ref name="attribute.anyExceptDefault"/> </zeroOrMore> <ref name="datatype.string"/> </element> </zeroOrMore> <optional> <element name="dc:description"> <zeroOrMore> <ref name="attribute.anyExceptDefault"/> </zeroOrMore> <ref name="datatype.string"/> </element> </optional> <zeroOrMore> <element name="dc:publisher"> <zeroOrMore> <ref name="attribute.anyExceptDefault"/> </zeroOrMore> <ref name="datatype.string"/> </element> </zeroOrMore> <zeroOrMore> <element name="dc:contributor"> <zeroOrMore> <ref name="attribute.anyExceptDefault"/> </zeroOrMore> <ref name="datatype.string"/> </element> </zeroOrMore> <optional> <element name="dc:date"> <zeroOrMore> <ref name="attribute.anyExceptDefault"/> </zeroOrMore> <ref name="datatype.iso8601.yyyyMmDd"/> </element> </optional> <zeroOrMore> <element name="dc:type"> <zeroOrMore> <ref name="attribute.anyExceptDefault"/> </zeroOrMore> <ref name="datatype.string"/> </element> </zeroOrMore> <zeroOrMore> <element name="dc:source"> <zeroOrMore> <ref name="attribute.anyExceptDefault"/> </zeroOrMore> <ref name="datatype.string"/> </element> </zeroOrMore> <zeroOrMore> <element name="dc:language"> <zeroOrMore> <ref name="attribute.anyExceptDefault"/> </zeroOrMore> <ref name="datatype.rfc1766"/> </element> </zeroOrMore> <zeroOrMore> <element name="dc:relation"> <zeroOrMore> <ref name="attribute.anyExceptDefault"/> </zeroOrMore> <ref name="datatype.string"/> </element> </zeroOrMore> <zeroOrMore> <element name="dc:coverage"> <zeroOrMore> <ref name="attribute.anyExceptDefault"/> </zeroOrMore> <ref name="datatype.string"/> </element> </zeroOrMore> <zeroOrMore> <element name="dc:rights"> <zeroOrMore> <ref name="attribute.anyExceptDefault"/> </zeroOrMore> <ref name="datatype.string"/> </element> </zeroOrMore> <zeroOrMore> <ref name="element.any.meta"/> </zeroOrMore> </interleave> </element> </define> <define name="element.body"> <element name="body"> <zeroOrMore> <ref name="attribute.anyExceptDefault"/> </zeroOrMore> <interleave> <oneOrMore> <ref name="element.volume"/> </oneOrMore> <zeroOrMore> <ref name="element.any"/> </zeroOrMore> </interleave> </element> </define> <define name="element.volume"> <element name="volume"> <a:documentation>Defines a volume of embossed braille.</a:documentation> <ref name="attribute.cols"/> <ref name="attribute.rows"/> <ref name="attribute.rowgap"/> <ref name="attribute.duplex"/> <zeroOrMore> <ref name="attribute.anyExceptDefault"/> </zeroOrMore> <interleave> <oneOrMore> <ref name="element.section"/> </oneOrMore> <zeroOrMore> <ref name="element.any"/> </zeroOrMore> </interleave> </element> </define> <define name="element.section"> <element name="section"> <a:documentation>Defines a section of embossed braille.</a:documentation> <ref name="attribute.cols.optional"/> <ref name="attribute.rows.optional"/> <ref name="attribute.rowgap.optional"/> <ref name="attribute.duplex.optional"/> <zeroOrMore> <ref name="attribute.anyExceptDefault"/> </zeroOrMore> <interleave> <oneOrMore> <ref name="element.page"/> </oneOrMore> <zeroOrMore> <ref name="element.any"/> </zeroOrMore> </interleave> </element> </define> <define name="element.page"> <element name="page"> <a:documentation>Defines a page of embossed braille.</a:documentation> <ref name="attribute.rowgap.optional"/> <zeroOrMore> <ref name="attribute.anyExceptDefault"/> </zeroOrMore> <interleave> <zeroOrMore> <ref name="element.row"/> </zeroOrMore> <zeroOrMore> <ref name="element.any"/> </zeroOrMore> </interleave> </element> </define> <define name="element.row"> <element name="row"> <a:documentation>Defines a row of embossed braille.</a:documentation> <ref name="attribute.rowgap.optional"/> <zeroOrMore> <ref name="attribute.anyExceptDefault"/> </zeroOrMore> <ref name="datatype.string.unicode.braille"/> </element> </define> <define name="element.any"> <element> <anyName> <except> <nsName ns="http://www.daisy.org/ns/2008/pef"/> </except> </anyName> <zeroOrMore> <choice> <ref name="attribute.any"/> <text/> <ref name="element.any"/> </choice> </zeroOrMore> </element> </define> <define name="element.any.meta"> <element> <anyName> <except> <nsName ns="http://www.daisy.org/ns/2008/pef"/> <nsName ns="http://purl.org/dc/elements/1.1/"/> </except> </anyName> <zeroOrMore> <choice> <ref name="attribute.any"/> <text/> <ref name="element.any.meta"/> </choice> </zeroOrMore> </element> </define> <define name="attribute.any"> <attribute> <anyName/> </attribute> </define> <define name="attribute.anyExceptDefault"> <attribute> <anyName> <except> <nsName ns=""/> </except> </anyName> </attribute> </define> <define name="attribute.cols"> <a:documentation>Defines the width (measured in characters) of page descendants.</a:documentation> <attribute name="cols"> <ref name="datatype.positiveInteger"/> </attribute> </define> <define name="attribute.cols.optional"> <a:documentation>Overrides any value defined by ancestors.</a:documentation> <optional> <ref name="attribute.cols"/> </optional> </define> <define name="attribute.rows"> <a:documentation>Defines the height (measured in characters) of page descendants.</a:documentation> <attribute name="rows"> <ref name="datatype.positiveInteger"/> </attribute> </define> <define name="attribute.rows.optional"> <a:documentation>Overrides any value defined by ancestors.</a:documentation> <optional> <ref name="attribute.rows"/> </optional> </define> <define name="attribute.rowgap"> <a:documentation>Defines the size of a gap between rows (expressed as a multiple of the dot-to-dot height). In practice, this value should be 0 or more for six dot braille and 1 or more for eight dot braille</a:documentation> <attribute name="rowgap"> <ref name="datatype.nonNegativeInteger"/> </attribute> </define> <define name="attribute.rowgap.optional"> <a:documentation>Overrides any value defined by ancestors.</a:documentation> <optional> <ref name="attribute.rowgap"/> </optional> </define> <define name="attribute.duplex"> <a:documentation>Defines whether page descendants are intended for duplex printing or not.</a:documentation> <attribute name="duplex"> <ref name="datatype.boolean"/> </attribute> </define> <define name="attribute.duplex.optional"> <a:documentation>Overrides any value defined by ancestors.</a:documentation> <optional> <ref name="attribute.duplex"/> </optional> </define> <define name="datatype.mime.pef"> <choice> <value>application/x-pef+xml</value> </choice> </define> <define name="datatype.string.unicode.braille"> <data type="string"> <param name="pattern">([⠀-⣿])*</param> </data> </define> <define name="datatype.rfc1766"> <data type="language"/> </define> <define name="datatype.string"> <data type="string"/> </define> <define name="datatype.boolean"> <data type="boolean"/> </define> <define name="datatype.integer"> <data type="integer"/> </define> <define name="datatype.iso8601.yyyyMmDd"> <a:documentation>[ISO8601] subset: requires yyyy-mm-dd format</a:documentation> <data type="string"> <param name="pattern">[0-9]{4}-[0-9]{2}-[0-9]{2}</param> </data> </define> <define name="datatype.nonNegativeInteger"> <data type="nonNegativeInteger"/> </define> <define name="datatype.positiveInteger"> <data type="positiveInteger"/> </define> </grammar>