[From: http://www.openhealth.org/ASTM/clinical.header.html]

Clinical Header namespace description (RDDL)

Clinical documents are constructed of a header and a body. The header is a structure that is consistent from one type of document to another. The clinical body varies depending on the document type. For example, one might have an operative report or a discharge summary. Both have a clinical header of the same structure, but the body varies in structure, containing information specific to the type of document.

ch.attrib

Clinical Header attributes

ch.attrib = 
 attribute ID{xsd:ID}?,
 attribute confidentiality{xsd:IDREF}?,
 attribute note{xsd:string}?,
 attribute xml:lang{xsd:NMTOKEN}?

ch.person.type

A clinical header person type consists of a person.name, zero or more ids and zero or more addresses.

ch.person.type =
 person.name,
 id*,
 addr*

ch.organization.type

ch.organization.type =
 organization.name?,
 id*,
 addr*

ch.actor.type

ch.actor.type = ch.person.type,type.code?,date.time?

ch.authenticator.type

ch.authenticator.type = ch.actor.type,signature?

ch.datetime.model = text

coded.value.model = text

coded.value.attrib.list =
    attribute code.system {xsd:NMTOKEN}?,
    attribute code.system.name {xsd:string}?,
    attribute version {xsd:NMTOKEN}?
clinical.header =
   element clinical.header{
   ch.attrib,
   id*,
   version.number?,
   confidentiality.code*,
   patient.encounter?,
   authenticator*,
   legal.authenticator*,
   intended.recipient*,
   originator?,
   originating.organization?,
 transcriptionist?,
 provider+,
 service.actor*,
 patient,
 events?,
 codes?,
 related.document*}
service.actor = 
 element service.actor {
  ch.attrib,
  xlink,
  (person.name|organization.name),
  id*,
  addr*,
  type.code?,
  function?,
  date.time?
  }
provider = element 
 provider{
  ch.attrib,
  ch.actor.type,
  function?}

service.target.model = ch.actor & birth.date? & gender? events = element events{ch.attrib,event*} event = element event{ch.attrib, (event.name & date.time & staff? & comments?) } #

id = element id {ch.attrib,
 attribute root{xsd:string}?,
 attribute authority{xsd:string}?,
 attribute type{xsd:string}?,
 attribute valid.time{xsd:string}?,
 xlink, text}

version.number = element version.number {ch.attrib,text} confidentiality.code = element confidentiality.code{ ch.attrib, coded.value.attrib.list, coded.value.model}

patient.encounter = 
 element patient.encounter{
  ch.attrib,
  (id? &
  practice.setting? &
  date.time? &
  location)
  }

Service Actors

authenticator = element authenticator{
         ch.attrib, 
   ch.authenticator.type } 
legal.authenticator = element legal.authenticator{ 
  ch.attrib, ch.authenticator.type }
originator = element originator {
   ch.attrib,ch.actor.type} 
intended.recipient = element intended.recipient {
   ch.attrib,ch.actor.type} 
transcriptionist = element transcriptionist {ch.attrib,ch.actor.type}

Service Targets

patient = element patient {
 ch.attrib,xlink,
 service.target.model
 }

codes = element codes { ch.attrib, coded.value* } related.document = element related.document { xlink.simple, any } practice.setting = element practice.setting {ch.attrib,text} date.time = element date.time { ch.attrib, ch.datetime.model } location = element location {ch.attrib,text} event.name = element event.name {ch.attrib,text} staff = element staff{ ch.attrib, ch.person.type } comments = element comments {ch.attrib,text} #

person.name

A person name may have any number of the following elements in any order. A particular order and set of delimiters may determine the text string representation of a name.

person.name = element person.name{
 ch.attrib, attribute type{text}?,
 (family|
 given|
 middle|
 prefix|
 suffix|
 delimiter
 )*}

name.component.type = ch.attrib,attribute type{text}?,text family = element family {name.component.type} given = element given {name.component.type} middle = element middle {name.component.type} prefix = element prefix {name.component.type} suffix = element suffix {name.component.type} delimiter = element delimiter {name.component.type} # organization.name = element organization.name {ch.attrib,text} #

addr = element addr {
 ch.attrib,attribute type{text}?,
 (
 country|
 city|
 state|
 street|
 zip|
 house.number|
 direction|
 post.office.box|
 telephone|
 uri|
 delimiter
 )*}

addr.component.type = ch.attrib,attribute type{text}?,text

 

country = element country {addr.component.type} city = element city {addr.component.type} state = element state {addr.component.type} zip = element zip {addr.component.type} street = element street {addr.component.type} house.number = element house.number {addr.component.type} direction = element direction {addr.component.type} address.locator = element address.locator {addr.component.type} post.office.box = element post.office.box {addr.component.type}

#

uri = element uri {addr.component.type}
telephone = element telephone {addr.component.type}

coded.value = element coded.value {ch.attrib,xlink,coded.value.attrib.list,coded.value.model}
signature = element signature {ch.attrib,coded.value.attrib.list,coded.value.model}

type.code = element type.code {ch.attrib,xlink,coded.value.attrib.list,coded.value.model}
function = element function {ch.attrib,xlink,coded.value.attrib.list,coded.value.model}
birth.date = element birth.date {
 ch.attrib,
 ch.datetime.model
 }

gender = element gender {ch.attrib,text}

originating.organization = element originating.organization{
 ch.attrib,
 ch.organization.type
 }

DTD

The ASTM E2182 Clinical Header DTD http://www.openhealth.org/ASTM/clinical.header.dtd

RELAXNG Grammar