<?xml version="1.0" encoding="ISO-8859-1"?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes" ns="http://www.openhealth.org/ASTM/clinical.header" xmlns:ch="http://www.openhealth.org/ASTM/clinical.header">
  <define name="ch.attrib">
    <optional>
      <attribute name="ID">
        <data type="ID"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="confidentiality">
        <data type="IDREF"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="note">
        <text/>
      </attribute>
    </optional>
    <optional>
      <attribute name="xml:lang">
        <data type="NMTOKEN"/>
      </attribute>
    </optional>
  </define>
  <define name="ch.person.type">
    <ref name="person.name"/>
    <zeroOrMore>
      <ref name="id"/>
    </zeroOrMore>
    <zeroOrMore>
      <ref name="addr"/>
    </zeroOrMore>
  </define>
  <define name="ch.organization.type">
    <optional>
      <ref name="organization.name"/>
    </optional>
    <zeroOrMore>
      <ref name="id"/>
    </zeroOrMore>
    <zeroOrMore>
      <ref name="addr"/>
    </zeroOrMore>
  </define>
  <define name="ch.actor.type">
    <ref name="ch.person.type"/>
    <optional>
      <ref name="type.code"/>
    </optional>
    <optional>
      <ref name="date.time"/>
    </optional>
  </define>
  <define name="ch.authenticator.type">
    <ref name="ch.actor.type"/>
    <optional>
      <ref name="signature"/>
    </optional>
  </define>
  <define name="ch.datetime.model">
    <text/>
  </define>
  <define name="coded.value.model">
    <text/>
  </define>
  <define name="coded.value.attrib.list">
    <optional>
      <attribute name="code.system">
        <data type="NMTOKEN"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="code.system.name">
        <text/>
      </attribute>
    </optional>
    <optional>
      <attribute name="version">
        <data type="NMTOKEN"/>
      </attribute>
    </optional>
  </define>
  <define name="clinical.header">
    <element name="clinical.header">
      <ref name="ch.attrib"/>
      <zeroOrMore>
        <ref name="id"/>
      </zeroOrMore>
      <optional>
        <ref name="version.number"/>
      </optional>
      <zeroOrMore>
        <ref name="confidentiality.code"/>
      </zeroOrMore>
      <optional>
        <ref name="patient.encounter"/>
      </optional>
      <zeroOrMore>
        <ref name="authenticator"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="legal.authenticator"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="intended.recipient"/>
      </zeroOrMore>
      <optional>
        <ref name="originator"/>
      </optional>
      <optional>
        <ref name="originating.organization"/>
      </optional>
      <optional>
        <ref name="transcriptionist"/>
      </optional>
      <oneOrMore>
        <ref name="provider"/>
      </oneOrMore>
      <zeroOrMore>
        <ref name="service.actor"/>
      </zeroOrMore>
      <ref name="patient"/>
      <optional>
        <ref name="events"/>
      </optional>
      <optional>
        <ref name="codes"/>
      </optional>
      <zeroOrMore>
        <ref name="related.document"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="service.actor">
    <element name="service.actor">
      <ref name="ch.attrib"/>
      <optional>
        <ref name="xlink.attrib"/>
      </optional>
      <choice>
        <ref name="person.name"/>
        <ref name="organization.name"/>
      </choice>
      <zeroOrMore>
        <ref name="id"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="addr"/>
      </zeroOrMore>
      <optional>
        <ref name="type.code"/>
      </optional>
      <optional>
        <ref name="function"/>
      </optional>
      <optional>
        <ref name="date.time"/>
      </optional>
    </element>
  </define>
  <define name="provider">
    <element name="provider">
      <ref name="ch.attrib"/>
      <ref name="ch.actor.type"/>
      <optional>
        <ref name="function"/>
      </optional>
    </element>
  </define>
  <define name="service.target.model">
    <interleave>
      <ref name="ch.actor.type"/>
      <optional>
        <ref name="birth.date"/>
      </optional>
      <optional>
        <ref name="gender"/>
      </optional>
    </interleave>
  </define>
  <define name="events">
    <element name="events">
      <ref name="ch.attrib"/>
      <zeroOrMore>
        <ref name="event"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="event">
    <element name="event">
      <ref name="ch.attrib"/>
      <interleave>
        <ref name="event.name"/>
        <ref name="date.time"/>
        <optional>
          <ref name="staff"/>
        </optional>
        <optional>
          <ref name="comments"/>
        </optional>
      </interleave>
    </element>
  </define>
  <define name="id">
    <element name="id">
      <ref name="ch.attrib"/>
      <optional>
        <attribute name="root">
          <text/>
        </attribute>
      </optional>
      <optional>
        <attribute name="authority">
          <text/>
        </attribute>
      </optional>
      <optional>
        <attribute name="type">
          <text/>
        </attribute>
      </optional>
      <optional>
        <attribute name="valid.time">
          <text/>
        </attribute>
      </optional>
      <optional>
        <ref name="xlink.attrib"/>
      </optional>
      <text/>
    </element>
  </define>
  <define name="version.number">
    <element name="version.number">
      <ref name="ch.attrib"/>
      <text/>
    </element>
  </define>
  <define name="confidentiality.code">
    <element name="confidentiality.code">
      <ref name="ch.attrib"/>
      <ref name="coded.value.attrib.list"/>
      <ref name="coded.value.model"/>
    </element>
  </define>
  <define name="patient.encounter">
    <element name="patient.encounter">
      <ref name="ch.attrib"/>
      <interleave>
        <optional>
          <ref name="id"/>
        </optional>
        <optional>
          <ref name="practice.setting"/>
        </optional>
        <optional>
          <ref name="date.time"/>
        </optional>
        <ref name="location"/>
      </interleave>
    </element>
  </define>
  <define name="authenticator">
    <element name="authenticator">
      <ref name="ch.attrib"/>
      <ref name="ch.authenticator.type"/>
    </element>
  </define>
  <define name="legal.authenticator">
    <element name="legal.authenticator">
      <ref name="ch.attrib"/>
      <ref name="ch.authenticator.type"/>
    </element>
  </define>
  <define name="originator">
    <element name="originator">
      <ref name="ch.attrib"/>
      <ref name="ch.actor.type"/>
    </element>
  </define>
  <define name="intended.recipient">
    <element name="intended.recipient">
      <ref name="ch.attrib"/>
      <ref name="ch.actor.type"/>
    </element>
  </define>
  <define name="transcriptionist">
    <element name="transcriptionist">
      <ref name="ch.attrib"/>
      <ref name="ch.actor.type"/>
    </element>
  </define>
  <define name="patient">
    <element name="patient">
      <ref name="ch.attrib"/>
      <optional>
        <ref name="xlink.attrib"/>
      </optional>
      <ref name="service.target.model"/>
    </element>
  </define>
  <define name="codes">
    <element name="codes">
      <ref name="ch.attrib"/>
      <zeroOrMore>
        <ref name="coded.value"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="related.document">
    <element name="related.document">
      <choice>
        <ref name="xlink.attrib"/>
        <ref name="any"/>
      </choice>
    </element>
  </define>
  <define name="practice.setting">
    <element name="practice.setting">
      <ref name="ch.attrib"/>
      <text/>
    </element>
  </define>
  <define name="date.time">
    <element name="date.time">
      <ref name="ch.attrib"/>
      <ref name="ch.datetime.model"/>
    </element>
  </define>
  <define name="location">
    <element name="location">
      <ref name="ch.attrib"/>
      <text/>
    </element>
  </define>
  <define name="event.name">
    <element name="event.name">
      <ref name="ch.attrib"/>
      <text/>
    </element>
  </define>
  <define name="staff">
    <element name="staff">
      <ref name="ch.attrib"/>
      <ref name="ch.person.type"/>
    </element>
  </define>
  <define name="comments">
    <element name="comments">
      <ref name="ch.attrib"/>
      <text/>
    </element>
  </define>
  <define name="person.name">
    <element name="person.name">
      <ref name="ch.attrib"/>
      <optional>
        <attribute name="type">
          <text/>
        </attribute>
      </optional>
      <zeroOrMore>
        <choice>
          <ref name="family"/>
          <ref name="given"/>
          <ref name="middle"/>
          <ref name="prefix"/>
          <ref name="suffix"/>
          <ref name="delimiter"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>
  <define name="family">
    <element name="family">
      <ref name="ch.attrib"/>
      <optional>
        <attribute name="type">
          <text/>
        </attribute>
      </optional>
      <text/>
    </element>
  </define>
  <define name="given">
    <element name="given">
      <ref name="ch.attrib"/>
      <optional>
        <attribute name="type">
          <text/>
        </attribute>
      </optional>
      <text/>
    </element>
  </define>
  <define name="middle">
    <element name="middle">
      <ref name="ch.attrib"/>
      <optional>
        <attribute name="type">
          <text/>
        </attribute>
      </optional>
      <text/>
    </element>
  </define>
  <define name="prefix">
    <element name="prefix">
      <ref name="ch.attrib"/>
      <optional>
        <attribute name="type">
          <text/>
        </attribute>
      </optional>
      <text/>
    </element>
  </define>
  <define name="suffix">
    <element name="suffix">
      <ref name="ch.attrib"/>
      <optional>
        <attribute name="type">
          <text/>
        </attribute>
      </optional>
      <text/>
    </element>
  </define>
  <define name="delimiter">
    <element name="delimiter">
      <ref name="ch.attrib"/>
      <optional>
        <attribute name="type">
          <text/>
        </attribute>
      </optional>
      <text/>
    </element>
  </define>
  <define name="organization.name">
    <element name="organization.name">
      <ref name="ch.attrib"/>
      <text/>
    </element>
  </define>
  <define name="addr">
    <element name="addr">
      <ref name="ch.attrib"/>
      <optional>
        <attribute name="type">
          <text/>
        </attribute>
      </optional>
      <zeroOrMore>
        <choice>
          <ref name="country"/>
          <ref name="city"/>
          <ref name="state"/>
          <ref name="street"/>
          <ref name="zip"/>
          <ref name="house.number"/>
          <ref name="direction"/>
          <ref name="post.office.box"/>
          <ref name="telephone"/>
          <ref name="uri"/>
          <ref name="delimiter"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>
  <define name="country">
    <element name="country">
      <ref name="ch.attrib"/>
      <optional>
        <attribute name="type">
          <text/>
        </attribute>
      </optional>
      <text/>
    </element>
  </define>
  <define name="city">
    <element name="city">
      <ref name="ch.attrib"/>
      <optional>
        <attribute name="type">
          <text/>
        </attribute>
      </optional>
      <text/>
    </element>
  </define>
  <define name="state">
    <element name="state">
      <ref name="ch.attrib"/>
      <optional>
        <attribute name="type">
          <text/>
        </attribute>
      </optional>
      <text/>
    </element>
  </define>
  <define name="zip">
    <element name="zip">
      <ref name="ch.attrib"/>
      <optional>
        <attribute name="type">
          <text/>
        </attribute>
      </optional>
      <text/>
    </element>
  </define>
  <define name="street">
    <element name="street">
      <ref name="ch.attrib"/>
      <optional>
        <attribute name="type">
          <text/>
        </attribute>
      </optional>
      <text/>
    </element>
  </define>
  <define name="house.number">
    <element name="house.number">
      <ref name="ch.attrib"/>
      <optional>
        <attribute name="type">
          <text/>
        </attribute>
      </optional>
      <text/>
    </element>
  </define>
  <define name="direction">
    <element name="direction">
      <ref name="ch.attrib"/>
      <optional>
        <attribute name="type">
          <text/>
        </attribute>
      </optional>
      <text/>
    </element>
  </define>
  <define name="address.locator">
    <element name="address.locator">
      <ref name="ch.attrib"/>
      <optional>
        <attribute name="type">
          <text/>
        </attribute>
      </optional>
      <text/>
    </element>
  </define>
  <define name="post.office.box">
    <element name="post.office.box">
      <ref name="ch.attrib"/>
      <optional>
        <attribute name="type">
          <text/>
        </attribute>
      </optional>
      <text/>
    </element>
  </define>
  <define name="uri">
    <element name="uri">
      <ref name="ch.attrib"/>
      <optional>
        <attribute name="type">
          <text/>
        </attribute>
      </optional>
      <text/>
    </element>
  </define>
  <define name="telephone">
    <element name="telephone">
      <ref name="ch.attrib"/>
      <optional>
        <attribute name="type">
          <text/>
        </attribute>
      </optional>
      <text/>
    </element>
  </define>
  <define name="coded.value">
    <element name="coded.value">
      <ref name="ch.attrib"/>
      <optional>
        <ref name="xlink.attrib"/>
      </optional>
      <ref name="coded.value.attrib.list"/>
      <ref name="coded.value.model"/>
    </element>
  </define>
  <define name="signature">
    <element name="signature">
      <ref name="ch.attrib"/>
      <ref name="coded.value.attrib.list"/>
      <ref name="coded.value.model"/>
    </element>
  </define>
  <define name="type.code">
    <element name="type.code">
      <ref name="ch.attrib"/>
      <optional>
        <ref name="xlink.attrib"/>
      </optional>
      <ref name="coded.value.attrib.list"/>
      <ref name="coded.value.model"/>
    </element>
  </define>
  <define name="function">
    <element name="function">
      <ref name="ch.attrib"/>
      <optional>
        <ref name="xlink.attrib"/>
      </optional>
      <ref name="coded.value.attrib.list"/>
      <ref name="coded.value.model"/>
    </element>
  </define>
  <define name="birth.date">
    <element name="birth.date">
      <ref name="ch.attrib"/>
      <ref name="ch.datetime.model"/>
    </element>
  </define>
  <define name="gender">
    <element name="gender">
      <ref name="ch.attrib"/>
      <text/>
    </element>
  </define>
  <define name="originating.organization">
    <element name="originating.organization">
      <ref name="ch.attrib"/>
      <ref name="ch.organization.type"/>
    </element>
  </define>
  <define name="any">
    <mixed>
      <zeroOrMore>
        <element>
          <anyName/>
          <zeroOrMore>
            <attribute>
              <anyName/>
              <text/>
            </attribute>
          </zeroOrMore>
          <ref name="any"/>
        </element>
      </zeroOrMore>
    </mixed>
  </define>
</grammar>
