<?xml version="1.0" encoding="UTF-8"?>
<!--
    
    HyperRecordML Markup Language for Museum Collections
    
    Copyright (C) 2004-2008 Klaus E. Werner
    
    This file is part of HRecordML.
    
    HRecordML is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
    
    HRecordML is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
    along with HRecordML.  If not, see <http://www.gnu.org/licenses/>.
    
    Contact the author at kewerner@icrim.net
    
-->
<grammar datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
    ns="http://hyperrecord.net/hrecord/"
    xmlns:xlink="http://www.w3.org/1999/xlink"
    xmlns:class="http://collectio.org/classifications/"
    xmlns="http://relaxng.org/ns/structure/1.0">
    <documentation xmlns="http://relaxng.org/ns/compatibility/annotations/1.0"
        >HyperRecordML: An XML RelaxNG Schema for museum documentation provided
        by HyperRecord.Net. Copyright Klaus E. Werner</documentation>
    <start>
        <element name="record">
            <documentation
                xmlns="http://relaxng.org/ns/compatibility/annotations/1.0"
                >Starting the record</documentation>
            <ref name="id"></ref>
            <optional>
                <documentation
                    xmlns="http://relaxng.org/ns/compatibility/annotations/1.0"
                    >Optional "parent" record for aggregations</documentation>
                <ref name="parent-id"></ref>
            </optional>
            <attribute name="xml:lang">
                <!-- here we could also have made a reference to "lang" as used for inscriptions, but we'll hardly ever have a latin record ... -->
                <choice>
                    <value>ita</value>
                    <value>deu</value>
                    <value>eng</value>
                </choice>
            </attribute>
            <ref name="iconography"></ref>
            <ref name="administration"></ref>
            <element name="location">
                <ref name="locationContent"></ref>
            </element>
            <element name="creation">
                <optional>
                    <ref name="protected"></ref>
                </optional>
                <ref name="creationContent"></ref>
            </element>
            <ref name="techdata"></ref>
            <ref name="events"></ref>
            <optional>
                <element name="description">
                    <ref name="mixedcontents"></ref>
                </element>
            </optional>
            <optional>
                <element name="bibliography">
                    <zeroOrMore>
                        <element name="entry">
                            <attribute name="type">
                                <choice>
                                    <value>print resource</value>
                                    <value>archival resource</value>
                                    <value>web resource</value>
                                </choice>
                            </attribute>
                            <optional>
                            <attribute name="scope">
                                <choice>
                                    <value>comparison</value>
                                    <value>classification</value>
                                </choice>
                            </attribute>
                            </optional>
                            <data type="token"></data>
                        </element>
                    </zeroOrMore>
                </element>
            </optional>
            <element name="editing">
                <documentation
                    xmlns="http://relaxng.org/ns/compatibility/annotations/1.0"
                    >first and subsequent editing are distinct by their relative
                    dates only</documentation>
                <oneOrMore>
                    <element name="editorship">
                        <ref name="date"></ref>
                        <oneOrMore>
                            <element name="name">
                                <data type="token"></data>
                            </element>
                        </oneOrMore>
                        <ref name="notes"></ref>
                    </element>
                </oneOrMore>
                <optional>
                    <element name="data"
                        ns="http://hyperrecord.net/hrecord/legacy/">
                        <ref name="genericdata"></ref>
                    </element>
                </optional>
            </element>
        </element>
    </start>
    <define name="acquisition">
        <element name="acquisition">
            <optional>
                <ref name="protected"></ref>
            </optional>
            <ref name="acquisitionContent"></ref>
        </element>
    </define>
    <define name="exhibition">
        <element name="exhibition">
            <optional>
                <ref name="protected"></ref>
            </optional>
            <ref name="exhibitionContent"></ref>
        </element>
    </define>
    <define name="finding">
        <element name="finding">
            <optional>
                <ref name="protected"></ref>
            </optional>
            <ref name="locationContent"></ref>
        </element>
    </define>
    <define name="loss">
        <element name="loss">
            <optional>
                <ref name="protected"></ref>
            </optional>
            <ref name="event-content"></ref>
        </element>
    </define>
    <define name="observation">
        <element name="observation">
            <optional>
                <ref name="protected"></ref>
            </optional>
            <ref name="event-content"></ref>
        </element>
    </define>
    <define name="restoration">
        <element name="restoration">
            <optional>
                <ref name="protected"></ref>
            </optional>
            <ref name="event-content"></ref>
        </element>
    </define>
    <define name="reuse">
        <element name="reuse">
            <optional>
                <ref name="protected"></ref>
            </optional>
            <ref name="event-content"></ref>
        </element>
    </define>
    <define name="events">
        <optional>
            <choice>
                <group>
                    <interleave>
                        <ref name="acquisition"></ref>
                        <optional>
                            <ref name="exhibition"></ref>
                        </optional>
                        <optional>
                            <ref name="finding"></ref>
                        </optional>
                        <optional>
                            <ref name="loss"></ref>
                        </optional>
                        <optional>
                            <ref name="observation"></ref>
                        </optional>
                        <optional>
                            <ref name="restoration"></ref>
                        </optional>
                        <optional>
                            <ref name="reuse"></ref>
                        </optional>
                    </interleave>
                </group>
                <group>
                    <interleave>
                        <ref name="reuse"></ref>
                        <optional>
                            <ref name="acquisition"></ref>
                        </optional>
                        <optional>
                            <ref name="exhibition"></ref>
                        </optional>
                        <optional>
                            <ref name="finding"></ref>
                        </optional>
                        <optional>
                            <ref name="loss"></ref>
                        </optional>
                        <optional>
                            <ref name="observation"></ref>
                        </optional>
                        <optional>
                            <ref name="restoration"></ref>
                        </optional>
                    </interleave>
                </group>
                <group>
                    <interleave>
                        <ref name="restoration"></ref>
                        <optional>
                            <ref name="reuse"></ref>
                        </optional>
                        <optional>
                            <ref name="acquisition"></ref>
                        </optional>
                        <optional>
                            <ref name="exhibition"></ref>
                        </optional>
                        <optional>
                            <ref name="finding"></ref>
                        </optional>
                        <optional>
                            <ref name="loss"></ref>
                        </optional>
                        <optional>
                            <ref name="observation"></ref>
                        </optional>
                    </interleave>
                </group>
                <group>
                    <interleave>
                        <ref name="loss"></ref>
                        <optional>
                            <ref name="observation"></ref>
                        </optional>
                        <optional>
                            <ref name="restoration"></ref>
                        </optional>
                        <optional>
                            <ref name="reuse"></ref>
                        </optional>
                        <optional>
                            <ref name="acquisition"></ref>
                        </optional>
                        <optional>
                            <ref name="exhibition"></ref>
                        </optional>
                        <optional>
                            <ref name="finding"></ref>
                        </optional>
                    </interleave>
                </group>
                <group>
                    <interleave>
                        <ref name="observation"></ref>
                        <optional>
                            <ref name="restoration"></ref>
                        </optional>
                        <optional>
                            <ref name="reuse"></ref>
                        </optional>
                        <optional>
                            <ref name="acquisition"></ref>
                        </optional>
                        <optional>
                            <ref name="exhibition"></ref>
                        </optional>
                        <optional>
                            <ref name="finding"></ref>
                        </optional>
                        <optional>
                            <ref name="loss"></ref>
                        </optional>
                    </interleave>
                </group>
                <group>
                    <interleave>
                        <ref name="finding"></ref>
                        <optional>
                            <ref name="loss"></ref>
                        </optional>
                        <optional>
                            <ref name="observation"></ref>
                        </optional>
                        <optional>
                            <ref name="restoration"></ref>
                        </optional>
                        <optional>
                            <ref name="reuse"></ref>
                        </optional>
                        <optional>
                            <ref name="acquisition"></ref>
                        </optional>
                        <optional>
                            <ref name="exhibition"></ref>
                        </optional>
                    </interleave>
                </group>
                <group>
                    <interleave>
                        <ref name="exhibition"></ref>
                        <optional>
                            <ref name="finding"></ref>
                        </optional>
                        <optional>
                            <ref name="loss"></ref>
                        </optional>
                        <optional>
                            <ref name="observation"></ref>
                        </optional>
                        <optional>
                            <ref name="restoration"></ref>
                        </optional>
                        <optional>
                            <ref name="reuse"></ref>
                        </optional>
                        <optional>
                            <ref name="acquisition"></ref>
                        </optional>
                    </interleave>
                </group>
            </choice>
        </optional>
    </define>
    <define name="protected">
        <attribute name="protected">
            <value>on</value>
        </attribute>
    </define>
    <define name="datetime">
        <documentation
            xmlns="http://relaxng.org/ns/compatibility/annotations/1.0">what we
            want is some thing like this: "1997-11-20" OR "1997-11" OR "1997" OR
            [empty/undefined]</documentation>
        <element name="begin">
            <ref name="date"></ref>
            <optional>
                <ref name="date"></ref>
            </optional>
        </element>
        <optional>
            <element name="end">
                <ref name="date"></ref>
                <optional>
                    <ref name="date"></ref>
                </optional>
            </element>
        </optional>
    </define>
    <define name="administration">
        <element name="administration">
            <oneOrMore>
                <element name="frame">
                    <documentation
                        xmlns="http://relaxng.org/ns/compatibility/annotations/1.0"
                        >the "[time-]frame" element</documentation>
                    <ref name="datetime"></ref>
                    <choice>
                        <group>
                            <interleave>
                                <ref name="owner"></ref>
                                <optional>
                                    <ref name="administrator"></ref>
                                </optional>
                                <optional>
                                    <ref name="inventary"></ref>
                                </optional>
                                <optional>
                                    <ref name="insurance"></ref>
                                </optional>
                                <optional>
                                    <ref name="jurisdiction"></ref>
                                </optional>
                                <optional>
                                    <ref name="patrimony"></ref>
                                </optional>
                                <optional>
                                    <ref name="responsibility"></ref>
                                </optional>
                            </interleave>
                        </group>
                        <group>
                            <interleave>
                                <optional>
                                    <ref name="owner"></ref>
                                </optional>
                                <ref name="administrator"></ref>
                                <optional>
                                    <ref name="inventary"></ref>
                                </optional>
                                <optional>
                                    <ref name="insurance"></ref>
                                </optional>
                                <optional>
                                    <ref name="jurisdiction"></ref>
                                </optional>
                                <optional>
                                    <ref name="patrimony"></ref>
                                </optional>
                                <optional>
                                    <ref name="responsibility"></ref>
                                </optional>
                            </interleave>
                        </group>
                        <group>
                            <interleave>
                                <optional>
                                    <ref name="owner"></ref>
                                </optional>
                                <optional>
                                    <ref name="administrator"></ref>
                                </optional>
                                <ref name="inventary"></ref>
                                <optional>
                                    <ref name="insurance"></ref>
                                </optional>
                                <optional>
                                    <ref name="jurisdiction"></ref>
                                </optional>
                                <optional>
                                    <ref name="patrimony"></ref>
                                </optional>
                                <optional>
                                    <ref name="responsibility"></ref>
                                </optional>
                            </interleave>
                        </group>
                        <group>
                            <interleave>
                                <optional>
                                    <ref name="owner"></ref>
                                </optional>
                                <optional>
                                    <ref name="administrator"></ref>
                                </optional>
                                <optional>
                                    <ref name="inventary"></ref>
                                </optional>
                                <ref name="insurance"></ref>
                                <optional>
                                    <ref name="jurisdiction"></ref>
                                </optional>
                                <optional>
                                    <ref name="patrimony"></ref>
                                </optional>
                                <optional>
                                    <ref name="responsibility"></ref>
                                </optional>
                            </interleave>
                        </group>
                        <group>
                            <interleave>
                                <optional>
                                    <ref name="owner"></ref>
                                </optional>
                                <optional>
                                    <ref name="administrator"></ref>
                                </optional>
                                <optional>
                                    <ref name="inventary"></ref>
                                </optional>
                                <optional>
                                    <ref name="insurance"></ref>
                                </optional>
                                <ref name="jurisdiction"></ref>
                                <optional>
                                    <ref name="patrimony"></ref>
                                </optional>
                                <optional>
                                    <ref name="responsibility"></ref>
                                </optional>
                            </interleave>
                        </group>
                        <group>
                            <interleave>
                                <optional>
                                    <ref name="owner"></ref>
                                </optional>
                                <optional>
                                    <ref name="administrator"></ref>
                                </optional>
                                <optional>
                                    <ref name="inventary"></ref>
                                </optional>
                                <optional>
                                    <ref name="insurance"></ref>
                                </optional>
                                <optional>
                                    <ref name="jurisdiction"></ref>
                                </optional>
                                <ref name="patrimony"></ref>
                                <optional>
                                    <ref name="responsibility"></ref>
                                </optional>
                            </interleave>
                        </group>
                        <group>
                            <interleave>
                                <optional>
                                    <ref name="owner"></ref>
                                </optional>
                                <optional>
                                    <ref name="administrator"></ref>
                                </optional>
                                <optional>
                                    <ref name="inventary"></ref>
                                </optional>
                                <optional>
                                    <ref name="insurance"></ref>
                                </optional>
                                <optional>
                                    <ref name="jurisdiction"></ref>
                                </optional>
                                <optional>
                                    <ref name="patrimony"></ref>
                                </optional>
                                <ref name="responsibility"></ref>
                            </interleave>
                        </group>
                    </choice>
                </element>
            </oneOrMore>
        </element>
    </define>
    <define name="owner">
        <element name="owner">
            <data type="token"></data>
        </element>
    </define>
    <define name="administrator">
        <element name="administrator">
            <data type="token"></data>
        </element>
    </define>
    <define name="inventary">
        <oneOrMore>
            <element name="inventary">
                <element name="name">
                    <data type="token"></data>
                </element>
                <oneOrMore>
                    <element name="number">
                        <data type="NMTOKEN">
                            <param name="pattern">[0-9]{5}</param>
                        </data>
                    </element>
                </oneOrMore>
            </element>
        </oneOrMore>
    </define>
    <define name="responsibility">
        <oneOrMore>
            <element name="responsibility">
                <attribute name="type">
                    <choice>
                        <value>scientific</value>
                        <value>security</value>
                    </choice>
                </attribute>
                <optional>
                    <attribute name="protected">
                        <value>on</value>
                    </attribute>
                </optional>
                <data type="token"></data>
            </element>
        </oneOrMore>
    </define>
    <define name="jurisdiction">
        <element name="jurisdiction">
            <attribute name="type">
                <choice>
                    <value>restricted</value>
                    <value>unrestricted</value>
                </choice>
            </attribute>
            <optional>
                <attribute name="protected">
                    <value>on</value>
                </attribute>
            </optional>
        </element>
    </define>
    <define name="patrimony">
        <element name="patrimony">
            <ref name="value"></ref>
            <optional>
                <attribute name="protected">
                    <value>on</value>
                </attribute>
            </optional>
        </element>
    </define>
    <define name="insurance">
        <element name="insurance">
            <ref name="value"></ref>
            <optional>
                <attribute name="protected">
                    <value>on</value>
                </attribute>
            </optional>
        </element>
    </define>
    <define name="locationContent">
        <element name="frame">
            <documentation
                xmlns="http://relaxng.org/ns/compatibility/annotations/1.0">the
                "[time-]frame" element</documentation>
            <ref name="datetime"></ref>
            <choice>
                <ref name="cadastre"></ref>
                <ref name="excavation"></ref>
                <ref name="locationclass"></ref>
                <ref name="georeference"></ref>
            </choice>
            <optional>
                <ref name="notes"></ref>
            </optional>
        </element>
    </define>
    <define name="acquisitionContent">
        <oneOrMore>
            <element name="frame">
                <documentation
                    xmlns="http://relaxng.org/ns/compatibility/annotations/1.0"
                    >the "[time-]frame" element</documentation>
                <ref name="datetime"></ref>
                <zeroOrMore>
                    <ref name="authorclass"></ref>
                </zeroOrMore>
                <ref name="notes"></ref>
            </element>
        </oneOrMore>
    </define>
    <define name="locationclass">
        <element name="class:locationclass">
            <ref name="genericdata"></ref>
        </element>
    </define>
    <define name="georeference">
        <element name="georeference">
            <choice>
                <element name="utm">
                    <element name="zone">
                        <data type="token"></data>
                    </element>
                    <element name="easting">
                        <data type="decimal">
                            <param name="minInclusive">0000000</param>
                            <param name="maxInclusive">9999999</param>
                            <param name="pattern">[0-9]{7}</param>
                        </data>
                    </element>
                    <element name="northing">
                        <data type="decimal">
                            <param name="minInclusive">0000000</param>
                            <param name="maxInclusive">9999999</param>
                            <param name="pattern">[0-9]{7}</param>
                        </data>
                    </element>
                </element>
                <element name="geo">
                    <element name="latitude">
                        <attribute name="direction">
                            <choice>
                                <value>N</value>
                                <value>S</value>
                            </choice>
                        </attribute>
                        <element name="degree">
                            <data type="integer">
                                <param name="minInclusive">0</param>
                                <param name="maxInclusive">180</param>
                                <param name="pattern">[0-9]{1,3}</param>
                            </data>
                        </element>
                        <element name="minute">
                            <data type="integer">
                                <param name="minInclusive">0</param>
                                <param name="maxInclusive">59</param>
                                <param name="pattern">[0-9]{1,2}</param>
                            </data>
                        </element>
                        <element name="second">
                            <data type="integer">
                                <param name="minInclusive">0</param>
                                <param name="maxInclusive">59</param>
                                <param name="pattern">[0-9]{1,2}</param>
                            </data>
                        </element>
                    </element>
                    <element name="longitude">
                        <attribute name="direction">
                            <choice>
                                <value>E</value>
                                <value>W</value>
                            </choice>
                        </attribute>
                        <element name="degree">
                            <data type="integer">
                                <param name="minInclusive">0</param>
                                <param name="maxInclusive">180</param>
                                <param name="pattern">[0-9]{1,3}</param>
                            </data>
                        </element>
                        <element name="minute">
                            <data type="integer">
                                <param name="minInclusive">0</param>
                                <param name="maxInclusive">59</param>
                                <param name="pattern">[0-9]{1,2}</param>
                            </data>
                        </element>
                        <element name="second">
                            <data type="integer">
                                <param name="minInclusive">0</param>
                                <param name="maxInclusive">59</param>
                                <param name="pattern">[0-9]{1,2}</param>
                            </data>
                        </element>
                    </element>
                </element>
            </choice>
        </element>
    </define>
    <define name="iconography">
        <element name="iconography">
            <ref name="objectclass"></ref>
            <oneOrMore>
                <ref name="iconclass"></ref>
            </oneOrMore>
            <!-- in case of presentation of cities etc.? -->
            <!-- 
        <optional>
        <ref name="locationclass"/>
      </optional>
      -->
            <oneOrMore>
                <ref name="denomination"></ref>
            </oneOrMore>
            <!-- really really unnecessary ...  -->
            <!--
  <zeroOrMore>
        <element name="aspect">
          <attribute name="name">
            <data type="token"/>
          </attribute>
          <ref name="iconclass"/>
          <optional>
            <ref name="locationclass"/>
          </optional>
          <optional>
            <ref name="denomination"/>
          </optional>
        </element>
      </zeroOrMore>
      -->
        </element>
    </define>
    <define name="objectclass">
        <element name="class:objectclass">
            <ref name="genericdata"></ref>
        </element>
    </define>
    <define name="iconclass">
        <zeroOrMore>
            <element name="class:iconclass">
                <ref name="genericdata"></ref>
            </element>
        </zeroOrMore>
    </define>
    <define name="cadastre">
        <element name="cadastre">
            <documentation
                xmlns="http://relaxng.org/ns/compatibility/annotations/1.0">this
                needs some further work to cover all complex cadastral
                schemas</documentation>
            <ref name="denomination"></ref>
            <element name="map">
                <data type="token"></data>
            </element>
            <element name="parcel">
                <data type="token"></data>
            </element>
        </element>
    </define>
    <define name="excavation">
        <element name="excavation">
            <documentation
                xmlns="http://relaxng.org/ns/compatibility/annotations/1.0"
                >first try for an excavation schema</documentation>
            <ref name="denomination"></ref>
            <element name="area">
                <data type="token"></data>
            </element>
            <element name="structure">
                <data type="token"></data>
            </element>
            <element name="room">
                <data type="token"></data>
            </element>
            <element name="trench">
                <data type="token"></data>
            </element>
            <element name="sector">
                <data type="token"></data>
            </element>
            <element name="stratigraphicUnit">
                <data type="token"></data>
            </element>
            <element name="sf">
                <data type="token"></data>
            </element>
        </element>
    </define>
    <define name="genericdata">
        <oneOrMore>
            <choice>
                <element>
                    <anyName></anyName>
                    <ref name="genericdata"></ref>
                </element>
                <optional>
                    <attribute>
                        <anyName></anyName>
                    </attribute>
                </optional>
                <text></text>
            </choice>
        </oneOrMore>
    </define>
    <define name="denomination">
        <element name="denomination">
            <text></text>
        </element>
    </define>
    <define name="date">
        <element name="date">
            <optional>
                <attribute name="calendar">
                    <choice>
                        <value>coptic</value>
                        <value>gregorian</value>
                        <value>hebrew</value>
                        <value>islamic</value>
                        <value>julian</value>
                        <value>republican</value>
                        <value>roman</value>
                        <value>seleucid</value>
                    </choice>
                </attribute>
            </optional>
            <choice>
                <data type="gYear"></data>
                <data type="gYearMonth"></data>
                <data type="date"></data>
                <empty></empty>
            </choice>
        </element>
    </define>
    <define name="event-content">
        <oneOrMore>
            <element name="frame">
                <documentation
                    xmlns="http://relaxng.org/ns/compatibility/annotations/1.0"
                    >the "[time-]frame" element</documentation>
                <ref name="datetime"></ref>
                <ref name="notes"></ref>
            </element>
        </oneOrMore>
    </define>
    <define name="creationContent">
        <oneOrMore>
            <element name="frame">
                <documentation
                    xmlns="http://relaxng.org/ns/compatibility/annotations/1.0"
                    >the "[time-]frame" element</documentation>
                <ref name="datetime"></ref>
                <ref name="authorclass"></ref>
                <ref name="notes"></ref>
            </element>
        </oneOrMore>
    </define>
    <define name="authorclass">
        <zeroOrMore>
            <element name="class:authorclass">
                <ref name="genericdata"></ref>
            </element>
        </zeroOrMore>
    </define>
    <define name="exhibitionContent">
        <oneOrMore>
            <element name="frame">
                <documentation
                    xmlns="http://relaxng.org/ns/compatibility/annotations/1.0"
                    >the "[time-]frame" element</documentation>
                <ref name="datetime"></ref>
                <ref name="locationclass"></ref>
                <ref name="exhibitionclass"></ref>
                <ref name="notes"></ref>
            </element>
        </oneOrMore>
    </define>
    <define name="exhibitionclass">
        <element name="class:exhibitionclass">
            <ref name="genericdata"></ref>
        </element>
    </define>
    <define name="techdata">
        <element name="techdata">
            <ref name="notes"></ref>
            <oneOrMore>
                <ref name="aspect"></ref>
            </oneOrMore>
            <zeroOrMore>
                <choice>
                    <ref name="materialclass"></ref>
                    <ref name="techniqueclass"></ref>
                </choice>
            </zeroOrMore>
            <!--    <optional>
        <element name="extent">
        <choice>
        <value>parts</value>
        <value>fragments</value>
        <value>volumes</value>
        <value>pages</value>
        </choice>
        </element>
        </optional>
      -->
        </element>
    </define>
    <define name="materialclass">
        <element name="class:materialclass">
            <ref name="genericdata"></ref>
        </element>
    </define>
    <define name="techniqueclass">
        <element name="class:techniqueclass">
            <ref name="genericdata"></ref>
        </element>
    </define>
    <define name="aspect">
        <element name="aspect">
            <attribute name="name">
                <data type="token"></data>
            </attribute>
            <choice>
                <group>
                    <interleave>
                        <ref name="axis"></ref>
                        <optional>
                            <ref name="circumference"></ref>
                        </optional>
                        <optional>
                            <ref name="depth"></ref>
                        </optional>
                        <optional>
                            <ref name="diameter"></ref>
                        </optional>
                        <optional>
                            <ref name="height"></ref>
                        </optional>
                        <optional>
                            <ref name="length"></ref>
                        </optional>
                        <optional>
                            <ref name="weight"></ref>
                        </optional>
                        <optional>
                            <ref name="width"></ref>
                        </optional>
                    </interleave>
                    <optional>
                        <ref name="notes"></ref>
                    </optional>
                </group>
                <group>
                    <interleave>
                        <ref name="width"></ref>
                        <optional>
                            <ref name="axis"></ref>
                        </optional>
                        <optional>
                            <ref name="circumference"></ref>
                        </optional>
                        <optional>
                            <ref name="depth"></ref>
                        </optional>
                        <optional>
                            <ref name="diameter"></ref>
                        </optional>
                        <optional>
                            <ref name="height"></ref>
                        </optional>
                        <optional>
                            <ref name="length"></ref>
                        </optional>
                        <optional>
                            <ref name="weight"></ref>
                        </optional>
                    </interleave>
                    <optional>
                        <ref name="notes"></ref>
                    </optional>
                </group>
                <group>
                    <interleave>
                        <ref name="weight"></ref>
                        <optional>
                            <ref name="width"></ref>
                        </optional>
                        <optional>
                            <ref name="axis"></ref>
                        </optional>
                        <optional>
                            <ref name="circumference"></ref>
                        </optional>
                        <optional>
                            <ref name="depth"></ref>
                        </optional>
                        <optional>
                            <ref name="diameter"></ref>
                        </optional>
                        <optional>
                            <ref name="height"></ref>
                        </optional>
                        <optional>
                            <ref name="length"></ref>
                        </optional>
                    </interleave>
                    <optional>
                        <ref name="notes"></ref>
                    </optional>
                </group>
                <group>
                    <interleave>
                        <ref name="length"></ref>
                        <optional>
                            <ref name="weight"></ref>
                        </optional>
                        <optional>
                            <ref name="width"></ref>
                        </optional>
                        <optional>
                            <ref name="axis"></ref>
                        </optional>
                        <optional>
                            <ref name="circumference"></ref>
                        </optional>
                        <optional>
                            <ref name="depth"></ref>
                        </optional>
                        <optional>
                            <ref name="diameter"></ref>
                        </optional>
                        <optional>
                            <ref name="height"></ref>
                        </optional>
                    </interleave>
                    <optional>
                        <ref name="notes"></ref>
                    </optional>
                </group>
                <group>
                    <interleave>
                        <ref name="height"></ref>
                        <optional>
                            <ref name="length"></ref>
                        </optional>
                        <optional>
                            <ref name="weight"></ref>
                        </optional>
                        <optional>
                            <ref name="width"></ref>
                        </optional>
                        <optional>
                            <ref name="axis"></ref>
                        </optional>
                        <optional>
                            <ref name="circumference"></ref>
                        </optional>
                        <optional>
                            <ref name="depth"></ref>
                        </optional>
                        <optional>
                            <ref name="diameter"></ref>
                        </optional>
                    </interleave>
                    <optional>
                        <ref name="notes"></ref>
                    </optional>
                </group>
                <group>
                    <interleave>
                        <ref name="diameter"></ref>
                        <optional>
                            <ref name="height"></ref>
                        </optional>
                        <optional>
                            <ref name="length"></ref>
                        </optional>
                        <optional>
                            <ref name="weight"></ref>
                        </optional>
                        <optional>
                            <ref name="width"></ref>
                        </optional>
                        <optional>
                            <ref name="axis"></ref>
                        </optional>
                        <optional>
                            <ref name="circumference"></ref>
                        </optional>
                        <optional>
                            <ref name="depth"></ref>
                        </optional>
                    </interleave>
                    <optional>
                        <ref name="notes"></ref>
                    </optional>
                </group>
                <group>
                    <interleave>
                        <ref name="circumference"></ref>
                        <optional>
                            <ref name="depth"></ref>
                        </optional>
                        <optional>
                            <ref name="diameter"></ref>
                        </optional>
                        <optional>
                            <ref name="height"></ref>
                        </optional>
                        <optional>
                            <ref name="length"></ref>
                        </optional>
                        <optional>
                            <ref name="weight"></ref>
                        </optional>
                        <optional>
                            <ref name="width"></ref>
                        </optional>
                        <optional>
                            <ref name="axis"></ref>
                        </optional>
                    </interleave>
                    <optional>
                        <ref name="notes"></ref>
                    </optional>
                </group>
                <group>
                    <interleave>
                        <ref name="depth"></ref>
                        <optional>
                            <ref name="diameter"></ref>
                        </optional>
                        <optional>
                            <ref name="height"></ref>
                        </optional>
                        <optional>
                            <ref name="length"></ref>
                        </optional>
                        <optional>
                            <ref name="weight"></ref>
                        </optional>
                        <optional>
                            <ref name="width"></ref>
                        </optional>
                        <optional>
                            <ref name="axis"></ref>
                        </optional>
                        <optional>
                            <ref name="circumference"></ref>
                        </optional>
                    </interleave>
                    <optional>
                        <ref name="notes"></ref>
                    </optional>
                </group>
            </choice>
            <!-- easy, but not correct (lack of at-least-one): -->
            <!-- 
        <interleave>
        <optional>
        <ref name="height"/>
        </optional>
        <optional>
        <ref name="circumference"/>
        </optional>
        <optional>
        <ref name="width"/>
        </optional>
        <optional>
        <ref name="length"/>
        </optional>
        <optional>
        <ref name="depth"/>
        </optional>
        <optional>
        <ref name="diameter"/>
        </optional>
        <optional>
        <ref name="weight"/>
        </optional>
        </interleave> 
      -->
        </element>
    </define>
    <define name="axis">
        <element name="axis">
            <attribute name="unit">
                <value>hour</value>
            </attribute>
            <data type="NMTOKEN">
                <param name="pattern">(1|2|3|4|5|6|7|8|9|10|11|12)</param>
            </data>
        </element>
    </define>
    <define name="height">
        <element name="height">
            <ref name="metric-units"></ref>
        </element>
    </define>
    <define name="width">
        <element name="width">
            <ref name="metric-units"></ref>
        </element>
    </define>
    <define name="length">
        <element name="length">
            <ref name="metric-units"></ref>
        </element>
    </define>
    <define name="depth">
        <element name="depth">
            <ref name="metric-units"></ref>
        </element>
    </define>
    <define name="circumference">
        <element name="circumference">
            <ref name="metric-units"></ref>
        </element>
    </define>
    <define name="diameter">
        <element name="diameter">
            <ref name="metric-units"></ref>
        </element>
    </define>
    <define name="weight">
        <element name="weight">
            <ref name="weight-units"></ref>
        </element>
    </define>
    <define name="metric-units">
        <attribute name="unit">
            <choice>
                <value>meter</value>
                <value>centimeter</value>
                <value>millimeter</value>
                <value>palmo romano</value>
                <value>braccio</value>
                <value>dito</value>
            </choice>
        </attribute>
        <data type="decimal"></data>
    </define>
    <define name="weight-units">
        <attribute name="unit">
            <choice>
                <value>kilogramm</value>
                <value>gramm</value>
                <value>milligramm</value>
            </choice>
        </attribute>
        <data type="decimal"></data>
    </define>
    <define name="value">
        <element name="value">
            <attribute name="currency">
                <value>EUR</value>
            </attribute>
            <!-- this one looks nice, but prevents calculations ...
            <data type="NMTOKEN">
                <param name="pattern">([0-9]{1,3})|([0-9]{1,3})(.)([0-9]{3})|([0-9]{1,3})(.)([0-9]{3})(.)([0-9]{3})</param>
            </data>
            -->
            <data type="integer"></data>
        </element>
    </define>
    <define name="mixedcontents">
        <oneOrMore>
            <choice>
                <element name="para">
                    <interleave>
                        <text></text>
                        <zeroOrMore>
                            <ref name="link"></ref>
                        </zeroOrMore>
                        <zeroOrMore>
                            <ref name="footnote"></ref>
                        </zeroOrMore>
                    </interleave>
                </element>
                <ref name="inscription"></ref>
            </choice>
        </oneOrMore>
    </define>
    <define name="notes">
        <element name="notes">
            <interleave>
                <text></text>
                <zeroOrMore>
                    <ref name="link"></ref>
                </zeroOrMore>
            </interleave>
        </element>
    </define>
    <define name="footnote">
        <element name="footnote">
            <oneOrMore>
                <element name="para">
                    <interleave>
                        <text></text>
                        <zeroOrMore>
                            <ref name="link"></ref>
                        </zeroOrMore>
                    </interleave>
                </element>
            </oneOrMore>
        </element>
    </define>
    <define name="link">
        <element name="link">
            <ref name="href"></ref>
            <!-- seemed a bright idea, but really only complicates things: -->
            <!--
  <optional>
        <attribute name="rel">
          <choice>
            <value>part-of</value>
            <value>copy-of</value>
            <value>copied-by</value>
            <value>model-for</value>
            <value>based-on</value>
            <value>reproduction-of</value>
            <value>reproduced-by</value>
            <value>reproduction-of</value>
            <value>formally-related-to</value>
            <value>technically-related-to</value>
            <value>iconographically-related-to</value>
            <value>related-to</value>
          </choice>
        </attribute>
      </optional>
-->
            <text></text>
        </element>
    </define>
    <define name="inscription">
        <element name="inscription">
            <ref name="lang"></ref>
            <attribute name="transcription">
                <choice>
                    <value>normalised</value>
                    <value>diplomatic</value>
                    <value>phonetic</value>
                </choice>
            </attribute>
            <oneOrMore>
                <element name="line">
                    <attribute name="dir">
                        <choice>
                            <value>→</value>
                            <value>←</value>
                            <value>↷</value>
                            <value>↶</value>
                            <value>↺</value>
                            <value>↻</value>
                        </choice>
                    </attribute>
                    <text></text>
                </element>
            </oneOrMore>
        </element>
    </define>
    <define name="lang">
        <attribute name="xml:lang">
            <!--
      <data type="language"/>
    -->
            <choice>
                <value>grc</value>
                <value>lat</value>
                <value>ara</value>
                <value>ita</value>
                <value>fra</value>
                <value>deu</value>
                <value>eng</value>
            </choice>
        </attribute>
    </define>
    <define name="href">
        <attribute name="xlink:href">
            <ref name="general-id"></ref>
        </attribute>
    </define>
    <define name="id">
        <attribute name="xlink:href">
            <documentation
                xmlns="http://relaxng.org/ns/compatibility/annotations/1.0"
                >binding the "object" record to a unique id</documentation>
            <ref name="general-id"></ref>
        </attribute>
    </define>
    <define name="parent-id">
        <attribute name="parentid" ns="http://www.w3.org/XML/1998/namespace">
            <documentation
                xmlns="http://relaxng.org/ns/compatibility/annotations/1.0"
                >linking the record up to a parent id</documentation>
            <ref name="general-id"></ref>
        </attribute>
    </define>
    <include href="ids/ids.rng"></include>
</grammar>

