Yet Another Sundial 
現時点で定義しているスキーマは次の通りです。
$ cat schema/book.rng
<?xml version="1.0" encoding="UTF-8" ?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
<choice>
<ref name="doc" />
</choice>
</start>
<!-- doc -->
<define name="doc">
<element name="doc">
<attribute name="id" />
<optional>
<ref name="head" />
<ref name="body" />
</optional>
</element>
</define>
<!-- head -->
<define name="head">
<element name="head">
<interleave>
<ref name="title" />
<ref name="abstract" />
<zeroOrMore>
<ref name="keyword" />
</zeroOrMore>
</interleave>
</element>
</define>
<define name="title">
<element name="title">
<text />
</element>
</define>
<define name="abstract">
<element name="abstract">
<text />
</element>
</define>
<define name="keyword">
<element name="keyword">
<attribute name="name" />
</element>
</define>
<!-- body -->
<define name="body">
<element name="body">
<interleave>
<zeroOrMore>
<ref name="compare_block_contents" />
</zeroOrMore>
<zeroOrMore>
<ref name="block_contents" />
</zeroOrMore>
<zeroOrMore>
<ref name="common_contents" />
</zeroOrMore>
<zeroOrMore>
<ref name="part" />
</zeroOrMore>
</interleave>
</element>
</define>
<define name="part">
<element name="part">
<interleave>
<attribute name="title" />
<optional>
<attribute name="id" />
</optional>
</interleave>
<interleave>
<zeroOrMore>
<ref name="compare_block_contents" />
</zeroOrMore>
<zeroOrMore>
<ref name="block_contents" />
</zeroOrMore>
<zeroOrMore>
<ref name="common_contents" />
</zeroOrMore>
<zeroOrMore>
<ref name="chapter" />
</zeroOrMore>
</interleave>
</element>
</define>
<define name="chapter">
<element name="chapter">
<interleave>
<attribute name="title" />
<optional>
<attribute name="id" />
</optional>
</interleave>
<interleave>
<zeroOrMore>
<ref name="compare_block_contents" />
</zeroOrMore>
<zeroOrMore>
<ref name="block_contents" />
</zeroOrMore>
<zeroOrMore>
<ref name="common_contents" />
</zeroOrMore>
<zeroOrMore>
<ref name="section" />
</zeroOrMore>
</interleave>
</element>
</define>
<define name="section">
<element name="section">
<interleave>
<attribute name="title" />
<optional>
<attribute name="id" />
</optional>
</interleave>
<interleave>
<zeroOrMore>
<ref name="compare_block_contents" />
</zeroOrMore>
<zeroOrMore>
<ref name="block_contents" />
</zeroOrMore>
<zeroOrMore>
<ref name="common_contents" />
</zeroOrMore>
</interleave>
</element>
</define>
<!-- compare_block_contents: Not the SmartDoc elemnt -->
<define name="compare_block_contents">
<choice>
<ref name="compare" />
<ref name="annotate" />
</choice>
</define>
<define name="compare">
<element name="compare">
<ref name="before" />
<ref name="after" />
</element>
</define>
<define name="before">
<element name="before">
<zeroOrMore>
<ref name="block_contents" />
</zeroOrMore>
</element>
</define>
<define name="after">
<element name="after">
<zeroOrMore>
<ref name="block_contents" />
</zeroOrMore>
</element>
</define>
<!-- ya annotate -->
<define name="annotate">
<element name="annotate">
<ref name="before_annotate" />
<ref name="after_annotate" />
</element>
</define>
<define name="before_annotate">
<element name="before_annotate">
<zeroOrMore>
<ref name="block_contents" />
</zeroOrMore>
</element>
</define>
<define name="after_annotate">
<element name="after_annotate">
<zeroOrMore>
<ref name="block_contents" />
</zeroOrMore>
</element>
</define>
<!-- block_contents -->
<define name="block_contents">
<choice>
<ref name="p" />
<ref name="ul" />
<ref name="program" />
<ref name="note" />
</choice>
</define>
<define name="p">
<element name="p">
<interleave>
<zeroOrMore>
<ref name="common_text" />
</zeroOrMore>
<zeroOrMore>
<ref name="common_contents" />
</zeroOrMore>
</interleave>
</element>
</define>
<define name="ul">
<element name="ul">
<zeroOrMore>
<ref name="li" />
</zeroOrMore>
</element>
</define>
<define name="li">
<element name="li">
<zeroOrMore>
<ref name="common_text" />
</zeroOrMore>
<optional>
<ref name="ul" />
</optional>
</element>
</define>
<define name="program">
<element name="program">
<ref name="common_attrs" />
<zeroOrMore>
<ref name="common_text" />
</zeroOrMore>
</element>
</define>
<define name="note">
<element name="note">
<ref name="common_attrs" />
<zeroOrMore>
<ref name="common_text" />
</zeroOrMore>
</element>
</define>
<!-- common_text -->
<define name="common_text">
<choice>
<ref name="a" />
<ref name="cite" />
<ref name="img" />
<ref name="em" />
<ref name="q" />
<ref name="dfn" />
<ref name="code" />
<!-- non-smartdoc tags -->
<ref name="foaf" />
<ref name="abbr" />
<ref name="ruby" />
<text />
</choice>
</define>
<define name="a">
<element name="a">
<interleave>
<optional>
<attribute name="href"/>
</optional>
<optional>
<attribute name="title"/>
</optional>
</interleave>
<choice>
<empty />
<ref name="common_text" />
</choice>
</element>
</define>
<define name="cite">
<element name="cite">
<interleave>
<optional>
<attribute name="href"/>
</optional>
<optional>
<attribute name="title"/>
</optional>
</interleave>
<text />
</element>
</define>
<define name="img">
<element name="img">
<interleave>
<ref name="common_attrs" />
<attribute name="alt" />
</interleave>
<empty />
</element>
</define>
<define name="em">
<element name="em">
<text />
</element>
</define>
<define name="q">
<element name="q">
<text />
</element>
</define>
<define name="dfn">
<element name="dfn">
<interleave>
<attribute name="alt" />
<attribute name="src" />
</interleave>
<empty />
</element>
</define>
<define name="code">
<element name="code">
<ref name="common_text" />
</element>
</define>
<!-- non-smartdoc tags -->
<define name="foaf">
<element name="foaf">
<interleave>
<ref name="common_attrs" />
<attribute name="alt" />
</interleave>
<empty />
</element>
</define>
<define name="abbr">
<element name="abbr">
<interleave>
<optional>
<attribute name="src"/>
</optional>
<optional>
<attribute name="title"/>
</optional>
</interleave>
<choice>
<empty />
<ref name="common_text" />
</choice>
</element>
</define>
<define name="ruby">
<element name="ruby">
<interleave>
<optional>
<attribute name="src"/>
</optional>
<optional>
<attribute name="title"/>
</optional>
</interleave>
<choice>
<empty />
<ref name="common_text" />
</choice>
</element>
</define>
<!-- common_contents -->
<define name="common_contents">
<interleave>
<zeroOrMore>
<ref name="console" />
</zeroOrMore>
</interleave>
</define>
<define name="console">
<element name="console">
<ref name="common_attrs" />
<zeroOrMore>
<ref name="common_text" />
</zeroOrMore>
</element>
</define>
<!-- common_attr -->
<define name="common_attrs">
<interleave>
<optional>
<attribute name="src"/>
</optional>
<optional>
<attribute name="title"/>
</optional>
<optional>
<attribute name="id"/>
</optional>
<optional>
<attribute name="class"/>
</optional>
<optional>
<attribute name="normalizer"/>
</optional>
</interleave>
</define>
</grammar>
Created: 2011-02-23T15:29:20+09:00
Last modified: 2011-02-23T15:33:15+09:00
www.yasundial.org by
Yasuhiro ABE
is licensed under a Creative Commons Attribution 2.1 Japan License.
Permissions beyond the scope of this license may be available at http://www.yasundial.org/info/license.html.