  <!-- The outer tag of any metadata set. Contains some number of elements.             -->
  <!-- @param creator     The name of the entity resposibly for this set.               -->
  <!-- @param contact     A contact address for the creator.                            -->
  <!-- @param family      The namespace of this metadata set.                           -->
  <!-- @param lastchanged The full date, user name and machine name of the last editor. --> 
  <!--   uses the form:                                                                 -->
  <!--   Day Mon(th) dd hh:mm:ss yyyy '-' <username> on <machine>                       -->
  <!-- @param namespace   The abbreviated namespace of this metadata set.               -->
  <!ELEMENT MetadataSet ((Name|Description|SetLanguage|Element)+)>
  <!ATTLIST MetadataSet
            contact     CDATA #REQUIRED
	    creator     CDATA #REQUIRED
            family      CDATA #REQUIRED
	    lastchanged CDATA #REQUIRED
	    namespace   CDATA #REQUIRED>

  <!-- The name of a metadata set. Is language specific. -->
  <!ELEMENT Name (#PCDATA)>
  <!ATTLIST Name
            language CDATA "en">

  <!-- The description of a metadata set. Is language specific. -->
  <!ELEMENT Description (#PCDATA)>
  <!ATTLIST Description
            language CDATA "en">

  <!-- When used in conjuction with defer-node-expansion, allows for better memory use when dealing with several or more languages. -->
  <!ELEMENT SetLanguage (Name, Description?)>
  <!ATTLIST SetLanguage
	    code CDATA #REQUIRED>

  <!-- An element in the metadata set. -->
  <!-- If predefined is true, we look for an OptionList -->
  <!-- If restricted is true, GLI will not allow any other values apart
       from the predefined ones to be used -->
  <!ELEMENT Element (Attribute*, Language*,OptionList?,Element*)>
  <!ATTLIST Element
            name       CDATA #REQUIRED 
            predefined (true|false) "false"
            restricted (true|false) "false" >
				
  <!-- Each element has several attribute children. -->
  <!-- An attribute only needs a language attribute if it's not part of a 
       Language element -->
  <!ELEMENT Attribute (#PCDATA)>
  <!ATTLIST Attribute
            name CDATA #REQUIRED
            language CDATA "en" >

  <!-- When used in conjuction with defer-node-expansion, allows for better memory use when dealing with several or more languages. -->
  <!ELEMENT Language (Attribute*)>
  <!ATTLIST Language
	    code CDATA #REQUIRED>

  <!-- For listing predefined values for this element. -->
  <!ELEMENT OptionList (Value+)>

  <!-- A value. -->
  <!ELEMENT Value (#PCDATA)>

