<?xml version="1.0" encoding="UTF-8"?>
<!--
  gdmxml - an XML schema for the GENTECH Genealogical Data Model
  Copyright 2002 Hans Fugal
-->
<grammar xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" ns="http://gdmxml.fugal.net/1.0" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
  <start>
    <element name="gdmxml">
      <interleave>
        <zeroOrMore>
          <ref name="activity"/>
        </zeroOrMore>
        <zeroOrMore>
          <ref name="assertion"/>
        </zeroOrMore>
        <zeroOrMore>
          <ref name="characteristic"/>
        </zeroOrMore>
        <zeroOrMore>
          <ref name="characteristic-part-type"/>
        </zeroOrMore>
        <zeroOrMore>
          <ref name="citation-part-type"/>
        </zeroOrMore>
        <zeroOrMore>
          <ref name="event"/>
        </zeroOrMore>
        <zeroOrMore>
          <ref name="event-type"/>
        </zeroOrMore>
        <zeroOrMore>
          <ref name="group"/>
        </zeroOrMore>
        <zeroOrMore>
          <ref name="group-type"/>
        </zeroOrMore>
        <zeroOrMore>
          <ref name="persona"/>
        </zeroOrMore>
        <zeroOrMore>
          <ref name="place"/>
        </zeroOrMore>
        <zeroOrMore>
          <ref name="place-part-type"/>
        </zeroOrMore>
        <zeroOrMore>
          <ref name="project"/>
        </zeroOrMore>
        <ref name="repository"/>
        <zeroOrMore>
          <ref name="repository-source"/>
        </zeroOrMore>
        <zeroOrMore>
          <ref name="representation-type"/>
        </zeroOrMore>
        <zeroOrMore>
          <ref name="research-objective-activity"/>
        </zeroOrMore>
        <zeroOrMore>
          <ref name="researcher"/>
        </zeroOrMore>
        <zeroOrMore>
          <ref name="researcher-project"/>
        </zeroOrMore>
        <zeroOrMore>
          <ref name="source"/>
        </zeroOrMore>
        <zeroOrMore>
          <ref name="source-group"/>
        </zeroOrMore>
        <zeroOrMore>
          <ref name="surety-scheme"/>
        </zeroOrMore>
      </interleave>
    </element>
  </start>
  <define name="activity">
    <a:documentation>Administration Submodel</a:documentation>
    <a:documentation>ACTIVITY</a:documentation>
    <element name="activity">
      <attribute name="id">
        <data type="ID"/>
      </attribute>
      <attribute name="researcher-ref">
        <data type="IDREF"/>
      </attribute>
      <interleave>
        <choice>
          <a:documentation>TypeCode is implied by which element is included here.</a:documentation>
          <ref name="administrative-task"/>
          <ref name="search"/>
        </choice>
        <element name="status">
          <text/>
        </element>
        <optional>
          <element name="priority">
            <text/>
          </element>
        </optional>
        <optional>
          <element name="scheduled-date">
            <ref name="date"/>
          </element>
        </optional>
        <optional>
          <element name="completed-date">
            <ref name="date"/>
          </element>
        </optional>
        <element name="description">
          <text/>
        </element>
        <optional>
          <element name="comments">
            <text/>
          </element>
        </optional>
      </interleave>
    </element>
  </define>
  <define name="administrative-task">
    <a:documentation>ADMINISTRATIVE-TASK</a:documentation>
    <element name="administrative-task">
      <empty/>
    </element>
  </define>
  <define name="project">
    <a:documentation>PROJECT</a:documentation>
    <element name="project">
      <attribute name="id">
        <data type="ID"/>
      </attribute>
      <optional>
        <attribute name="surety-scheme-ref">
          <data type="IDREF"/>
        </attribute>
      </optional>
      <interleave>
        <element name="name">
          <text/>
        </element>
        <optional>
          <element name="description">
            <text/>
          </element>
        </optional>
        <optional>
          <element name="client-data">
            <text/>
          </element>
        </optional>
        <zeroOrMore>
          <ref name="research-objective"/>
        </zeroOrMore>
      </interleave>
    </element>
  </define>
  <define name="research-objective">
    <a:documentation>RESEARCH-OBJECTIVE</a:documentation>
    <element name="research-objective">
      <attribute name="id">
        <data type="ID"/>
      </attribute>
      <interleave>
        <a:documentation>project-ref is implied
SequenceNumber is implied</a:documentation>
        <element name="name">
          <text/>
        </element>
        <element name="description">
          <text/>
        </element>
        <element name="priority">
          <text/>
        </element>
        <element name="status">
          <text/>
        </element>
      </interleave>
    </element>
  </define>
  <define name="research-objective-activity">
    <a:documentation>RESEARCH-OBJECTIVE-ACTIVITY</a:documentation>
    <element name="research-objective-activity">
      <attribute name="research-objective-ref">
        <data type="IDREF"/>
      </attribute>
      <attribute name="activity-ref">
        <data type="IDREF"/>
      </attribute>
    </element>
  </define>
  <define name="researcher">
    <a:documentation>RESEARCHER</a:documentation>
    <element name="researcher">
      <attribute name="id">
        <data type="ID"/>
      </attribute>
      <interleave>
        <element name="name">
          <text/>
        </element>
        <element name="address">
          <a:documentation>"A RESEARCHER lives in one PLACE.", and "Part of the address is connected to Place-ID in PLACE." (GDM, pg 71) Therefore connection is part of address.</a:documentation>
          <interleave>
            <text/>
            <attribute name="place-ref">
              <data type="IDREF"/>
            </attribute>
          </interleave>
        </element>
        <optional>
          <element name="comments">
            <text/>
          </element>
        </optional>
      </interleave>
    </element>
  </define>
  <define name="researcher-project">
    <a:documentation>RESEARCHER-PROJECT</a:documentation>
    <element name="researcher-project">
      <attribute name="researcher-ref">
        <data type="IDREF"/>
      </attribute>
      <attribute name="project-ref">
        <data type="IDREF"/>
      </attribute>
      <optional>
        <element name="role">
          <text/>
        </element>
      </optional>
    </element>
  </define>
  <define name="search">
    <a:documentation>SEARCH
Changed from the GDM: refers to repository-source by repository-source-id instead of referring to repository and source directly. This cuts down on duplication. Likewise, activity is not referenced by repository-source</a:documentation>
    <element name="search">
      <attribute name="repository-source-ref">
        <data type="IDREF"/>
      </attribute>
      <element name="searched-for">
        <text/>
      </element>
    </element>
  </define>
  <define name="source-group">
    <a:documentation>SOURCE-GROUP</a:documentation>
    <element name="source-group">
      <attribute name="id">
        <data type="ID"/>
      </attribute>
      <interleave>
        <element name="name">
          <text/>
        </element>
        <zeroOrMore>
          <ref name="source-group-source"/>
        </zeroOrMore>
      </interleave>
    </element>
  </define>
  <define name="source-group-source">
    <a:documentation>SOURCE-GROUP-SOURCE</a:documentation>
    <element name="source-group-source">
      <attribute name="source-ref">
        <a:documentation>source-group-ref is implied</a:documentation>
        <data type="IDREF"/>
      </attribute>
    </element>
  </define>
  <define name="surety-scheme">
    <a:documentation>SURETY-SCHEME</a:documentation>
    <element name="surety-scheme">
      <attribute name="id">
        <data type="ID"/>
      </attribute>
      <interleave>
        <element name="name">
          <text/>
        </element>
        <element name="description">
          <text/>
        </element>
        <oneOrMore>
          <ref name="surety-scheme-part"/>
        </oneOrMore>
      </interleave>
    </element>
  </define>
  <define name="surety-scheme-part">
    <a:documentation>SURETY-SCHEME-PART</a:documentation>
    <element name="surety-scheme-part">
      <!-- The id is needed in spite of being embedded in surety-scheme because assertion references it -->
      <attribute name="id">
        <data type="ID"/>
      </attribute>
      <!-- surety-scheme-ref and SequenceNumber are implied -->
      <interleave>
        <element name="name">
          <text/>
        </element>
        <element name="description">
          <text/>
        </element>
      </interleave>
    </element>
  </define>
  <define name="citation-part">
    <a:documentation>Evidence Submodel</a:documentation>
    <a:documentation>CITATION-PART</a:documentation>
    <element name="citation-part">
      <attribute name="citation-part-type-ref">
        <data type="IDREF"/>
      </attribute>
      <text/>
    </element>
  </define>
  <define name="citation-part-type">
    <a:documentation>CITATION-PART-TYPE</a:documentation>
    <element name="citation-part-type">
      <attribute name="id">
        <data type="ID"/>
      </attribute>
      <element name="name">
        <text/>
      </element>
    </element>
  </define>
  <define name="repository">
    <a:documentation>REPOSITORY</a:documentation>
    <element name="repository">
      <attribute name="id">
        <data type="ID"/>
      </attribute>
      <attribute name="place-ref">
        <data type="IDREF"/>
      </attribute>
      <interleave>
        <element name="name">
          <text/>
        </element>
        <optional>
          <element name="address">
            <text/>
          </element>
        </optional>
        <optional>
          <element name="phone">
            <text/>
          </element>
        </optional>
        <optional>
          <element name="hours">
            <text/>
          </element>
        </optional>
        <optional>
          <element name="comments">
            <text/>
          </element>
        </optional>
      </interleave>
    </element>
  </define>
  <!--
    changed from gdm: Does not refer to activity and has an id attribute. SEARCH
    refers to repository-source by this id.
  -->
  <define name="repository-source">
    <a:documentation>REPOSITORY-SOURCE</a:documentation>
    <element name="repository-source">
      <attribute name="id">
        <data type="ID"/>
      </attribute>
      <choice>
        <!-- This means one, the other, or both -->
        <group>
          <attribute name="source-ref">
            <data type="IDREF"/>
          </attribute>
        </group>
        <attribute name="repository-ref">
          <data type="IDREF"/>
        </attribute>
        <group>
          <attribute name="source-ref">
            <data type="IDREF"/>
          </attribute>
          <attribute name="repository-ref">
            <data type="IDREF"/>
          </attribute>
        </group>
      </choice>
      <interleave>
        <optional>
          <element name="call-number">
            <text/>
          </element>
        </optional>
        <optional>
          <element name="description">
            <text/>
          </element>
        </optional>
      </interleave>
    </element>
  </define>
  <define name="representation">
    <a:documentation>REPRESENTATION </a:documentation>
    <element name="representation">
      <!-- source-ref is implied -->
      <attribute name="representation-type-ref">
        <data type="IDREF"/>
      </attribute>
      <interleave>
        <optional>
          <element name="medium">
            <text/>
          </element>
        </optional>
        <optional>
          <element name="content">
            <text/>
          </element>
        </optional>
        <optional>
          <element name="comments">
            <text/>
          </element>
        </optional>
        <optional>
          <element name="physical-file-code">
            <text/>
          </element>
        </optional>
      </interleave>
    </element>
  </define>
  <define name="representation-type">
    <a:documentation>REPRESENTATION-TYPE</a:documentation>
    <element name="representation-type">
      <attribute name="id">
        <a:documentation>"Contains a list of the types of representations of evidence, such as text,
a TIF bitmap, a GIF bitmap, a WAV file, or other forms."</a:documentation>
        <data type="ID"/>
      </attribute>
      <interleave>
        <element name="name">
          <text/>
        </element>
        <optional>
          <element name="description">
            <text/>
          </element>
        </optional>
      </interleave>
    </element>
  </define>
  <define name="source">
    <a:documentation>SOURCE</a:documentation>
    <element name="source">
      <attribute name="id">
        <data type="ID"/>
      </attribute>
      <optional>
        <attribute name="higher-source-ref">
          <data type="IDREF"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="subject-place-ref">
          <data type="IDREF"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="jurisdiction-place-ref">
          <data type="IDREF"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="researcher-ref">
          <data type="IDREF"/>
        </attribute>
      </optional>
      <interleave>
        <zeroOrMore>
          <ref name="citation-part"/>
        </zeroOrMore>
        <zeroOrMore>
          <ref name="representation"/>
        </zeroOrMore>
        <optional>
          <element name="subject-date">
            <ref name="gen-date"/>
          </element>
        </optional>
        <optional>
          <element name="comments">
            <text/>
          </element>
        </optional>
      </interleave>
    </element>
  </define>
  <define name="assertion">
    <a:documentation>Conclusional Submodel</a:documentation>
    <a:documentation>ASSERTION</a:documentation>
    <element name="assertion">
      <attribute name="id">
        <data type="ID"/>
      </attribute>
      <attribute name="surety-scheme-part-ref">
        <data type="IDREF"/>
      </attribute>
      <attribute name="researcher-ref">
        <data type="IDREF"/>
      </attribute>
      <interleave>
        <choice>
          <attribute name="source-ref">
            <a:documentation>An assertion is based either upon a source, or lower-level assertions. Note that ASSERTION-ASSERTION is implicit here.</a:documentation>
            <data type="IDREF"/>
          </attribute>
          <oneOrMore>
            <element name="assertion">
              <attribute name="ref">
                <data type="IDREF"/>
              </attribute>
            </element>
          </oneOrMore>
        </choice>
        <group>
          <ref name="assertion-subject">
            <a:documentation>Note that the order of assertion-subject elements matters.</a:documentation>
          </ref>
          <ref name="assertion-subject"/>
        </group>
        <optional>
          <element name="disproved">
            <empty/>
          </element>
        </optional>
        <element name="rationale">
          <text/>
        </element>
        <element name="value">
          <interleave>
            <optional>
              <element name="role">
                <a:documentation>In some contexts, the 'value' is a role. Roles are either event-type or group-type, and they refer to an event-type-role or group-type-role element respectively. I am allowing both a role and text to coexist because the GDM is very vague about what restrictions, if any, are placed on the value field.</a:documentation>
                <attribute name="type">
                  <choice>
                    <value>event-type</value>
                    <value>group-type</value>
                  </choice>
                </attribute>
                <attribute name="ref">
                  <data type="IDREF"/>
                </attribute>
              </element>
            </optional>
            <optional>
              <text/>
            </optional>
          </interleave>
        </element>
      </interleave>
    </element>
  </define>
  <define name="assertion-subject">
    <element name="assertion-subject">
      <attribute name="type">
        <choice>
          <value>persona</value>
          <value>event</value>
          <value>characteristic</value>
          <value>group</value>
        </choice>
      </attribute>
      <attribute name="ref">
        <data type="IDREF"/>
      </attribute>
    </element>
  </define>
  <define name="characteristic">
    <a:documentation>CHARACTERISTIC</a:documentation>
    <element name="characteristic">
      <attribute name="id">
        <data type="ID"/>
      </attribute>
      <optional>
        <attribute name="place-ref">
          <a:documentation>changed from GDM: place-ref is not required (what place would you put for hair color?)</a:documentation>
          <data type="IDREF"/>
        </attribute>
      </optional>
      <interleave>
        <element name="date">
          <ref name="gen-date"/>
        </element>
        <oneOrMore>
          <ref name="characteristic-part">
            <a:documentation>The order of the characteristic-part elements is important.</a:documentation>
          </ref>
        </oneOrMore>
      </interleave>
    </element>
  </define>
  <define name="characteristic-part">
    <a:documentation>CHARACTERISTIC-PART
SequenceNum is implied.</a:documentation>
    <element name="characteristic-part">
      <attribute name="characteristic-part-type-ref">
        <data type="IDREF"/>
      </attribute>
      <element name="name">
        <text/>
      </element>
    </element>
  </define>
  <define name="characteristic-part-type">
    <a:documentation>CHARACTERISTIC-PART-TYPE</a:documentation>
    <element name="characteristic-part-type">
      <attribute name="id">
        <data type="ID"/>
      </attribute>
      <element name="name">
        <text/>
      </element>
    </element>
  </define>
  <define name="event">
    <a:documentation>EVENT</a:documentation>
    <element name="event">
      <attribute name="id">
        <data type="ID"/>
      </attribute>
      <attribute name="event-type-ref">
        <data type="IDREF"/>
      </attribute>
      <attribute name="place-ref">
        <data type="IDREF"/>
      </attribute>
      <interleave>
        <element name="name">
          <text/>
        </element>
        <element name="date">
          <ref name="gen-date"/>
        </element>
      </interleave>
    </element>
  </define>
  <define name="event-type">
    <a:documentation>EVENT-TYPE</a:documentation>
    <element name="event-type">
      <attribute name="id">
        <data type="ID"/>
      </attribute>
      <interleave>
        <element name="name">
          <text/>
        </element>
        <zeroOrMore>
          <ref name="event-type-role"/>
        </zeroOrMore>
      </interleave>
    </element>
  </define>
  <define name="event-type-role">
    <a:documentation>EVENT-TYPE-ROLE</a:documentation>
    <element name="event-type-role">
      <attribute name="id">
        <a:documentation>event-type-role needs an id even though it is embedded in event-type because it is referenced by the role element in assertion.</a:documentation>
        <data type="ID"/>
      </attribute>
      <element name="name">
        <text/>
      </element>
    </element>
  </define>
  <define name="group">
    <a:documentation>GROUP</a:documentation>
    <element name="group">
      <attribute name="id">
        <data type="ID"/>
      </attribute>
      <attribute name="group-type-ref">
        <data type="IDREF"/>
      </attribute>
      <optional>
        <attribute name="place-ref">
          <a:documentation>Changed from the GDM: place-ref is optional. It makes no sense to have a place-ref for a persona group intended to link personas from several places.</a:documentation>
          <data type="IDREF"/>
        </attribute>
      </optional>
      <interleave>
        <element name="name">
          <text/>
        </element>
        <element name="date">
          <ref name="gen-date"/>
        </element>
        <element name="criteria">
          <text/>
        </element>
      </interleave>
    </element>
  </define>
  <define name="group-type">
    <a:documentation>GROUP-TYPE</a:documentation>
    <element name="group-type">
      <attribute name="id">
        <data type="ID"/>
      </attribute>
      <interleave>
        <element name="name">
          <text/>
        </element>
        <zeroOrMore>
          <ref name="group-type-role">
            <a:documentation>The order of group-type-role elements is important.</a:documentation>
          </ref>
        </zeroOrMore>
      </interleave>
    </element>
  </define>
  <define name="group-type-role">
    <a:documentation>GROUP-TYPE-ROLE</a:documentation>
    <element name="group-type-role">
      <attribute name="id">
        <a:documentation>group-type-role needs an id even though it is embedded in group-type because it is referenced by the role element in assertion.</a:documentation>
        <data type="ID"/>
      </attribute>
      <element name="name">
        <text/>
      </element>
    </element>
  </define>
  <define name="persona">
    <a:documentation>PERSONA</a:documentation>
    <element name="persona">
      <attribute name="id">
        <data type="ID"/>
      </attribute>
      <interleave>
        <element name="name">
          <text/>
        </element>
        <optional>
          <element name="description-comments">
            <text/>
          </element>
        </optional>
      </interleave>
    </element>
  </define>
  <define name="place">
    <a:documentation>PLACE</a:documentation>
    <element name="place">
      <attribute name="id">
        <data type="ID"/>
      </attribute>
      <element name="existence-date">
        <ref name="gen-date-range"/>
      </element>
      <oneOrMore>
        <ref name="place-part">
          <a:documentation>The order of place-part elements is important.</a:documentation>
        </ref>
      </oneOrMore>
    </element>
  </define>
  <define name="place-part">
    <a:documentation>PLACE-PART</a:documentation>
    <element name="place-part">
      <attribute name="place-part-type-ref">
        <data type="IDREF"/>
      </attribute>
      <element name="name">
        <text/>
      </element>
    </element>
  </define>
  <define name="place-part-type">
    <a:documentation>PLACE-PART-TYPE</a:documentation>
    <element name="place-part-type">
      <attribute name="id">
        <data type="ID"/>
      </attribute>
      <element name="name">
        <text/>
      </element>
    </element>
  </define>
  <define name="gen-date">
    <text/>
  </define>
  <define name="gen-date-range">
    <ref name="gen-date"/>
  </define>
  <define name="date">
    <ref name="gen-date"/>
  </define>
  <!--
    sequence-number seems to want alphanumeric rather than numeric in the GDM
    descriptions. I suppose as long as it is sortable...
  -->
  <define name="sequence-number">
    <text/>
  </define>
</grammar>
<!--
  $Id: gdmxml.rng,v 1.21 2004/10/19 16:24:32 fugalh Exp $
  vim:shiftwidth=2:expandtab:softtabstop=2:filetype=rnc
-->
