<?xml version = "1.0" encoding = "ISO-8859-1"?>
<xs:schema xmlns = "http://www.destatis.de/schema/datml-raw/2.0/de"
   targetNamespace = "http://www.destatis.de/schema/datml-raw/2.0/de"
   xmlns:xs = "http://www.w3.org/2001/XMLSchema"
   version = "1.0"
   elementFormDefault = "qualified">
  <xs:annotation>
    <xs:documentation xml:lang = "de" source = "http://www.statspez.de">
            <![CDATA[
              Schema    : DatML/RAW
              Version   : 2.0
              Variante  : D
              Edition   : 0
			  Revision  : 1
              Typ       : XML-Schema
              Namensraum: http://www.destatis.de/schema/datml-raw/2.0/de
              Stand     : 20050110
              Autor     : Michael Schaefer
                          Statistisches Bundesamt
                          Gustav-Stresemann-Ring 11
                          D-65189 Wiesbaden
                          Tel. +49(0)611/75-3652
                          Fax +49(0)611/72-4000
                          mailto:michael.schaefer@destatis.de
              
              Beschreibung:
              
              DatML/RAW ist ein Dokumenttyp für die Lieferung statistischer Daten
              durch Berichtspflichtige oder in deren Namen handelnde Dritte an die
              Statistischen Ämter oder für diese empfangende Stellen.
              
              Mit DatML/RAW können Daten für beliebige Erhebungen und Berichtszeit-
              raeume als Erst-, Nach- und Korrekturlieferung übertragen werden.
              
              Eine ausführliche Spezifikation ist unter der Internet-Adresse
              http://www.statspez.de erhältlich.
              
              Updates (U), Korrekturen (K), Revisionen (R):
              
              *** Version 1.0.0 ***
              
              001 K 20021020/K/1.0.0/D//Michael Schaefer
                    - Element <mmgr> in Inhaltsmodell von <satz> aufgenommen
              
              *** Version 1.0.2 ***
              
              002 U 20030516/U/1.0.2/D//Michael Schaefer
                    - Alle Versionsbezeichner der kompatiblen Vorgaengerversionen
                      sind im Attribut version zulaessig.
                    - Element <identifikation> als optional erklaert.
                    - Neues Element <url> als Kindknoten von <kontakt>
                    - Neue Elemente <postfachleitzahl> und <postfachort>
                    - <telefon>, <email> und <fax> sowie <url> duerfen nur noch
                      einmal und in dieser Reihenfolge angegeben werden, jedoch sind
                      alle Elemente weiterhin optional.
              
              *** Version 2.0.0 ***
              
                 Version 2.0.0 ist in folgenden Punkten inkompatibel zu 1.0.2:
                   - <eingang> ist ersetzt durch <dateneingang>
                   - <instanz> ist ersetzt durch <dokumentinstanz>
                   - feste Reihenfolge der Metadaten in <segment> und <nachricht>
                   - <lieferattribute> ist ersetzt durch <meldungsart>
                   - Kapselung der Meldungsdaten mit <datensegment>
                   - Geaenderte Attribute in <wert>
                   
              003 U 20041028/U/2.0.0/D//Michael Schaefer
                    - Nachricht/Segment:
                      - Kapselung der Datensaetze im Datensegment mit <datensegment>
                      - Neues Element <nachrichtenID>
                      - Feste Reihenfolge Metadaten in <segment> und <nachricht>
                        - Abender und Empfaenger
                        - Neues Element <externeIdentifikation>
               
                    - Identfikation und Kontaktangaben
                      - <telfon>, <email>, <fax>, <url> in <identifikation>
                      - <adrese> in <kontakt>
                      - Neues lement <hausnummer>
               
                    - Statistiscer Kontext
                      - <lieferatribute> ersetzt durch <meldungsart>
                      - Neues Elemnt <externeIdentifikation>
                      - Neues Elemet <semester>
               
                    - Protokollierung
                      - Neues Element dateneingang> ersetzt <eingang>
                      - Neues Element <okumentinstanz> ersetzt <instanz>
                      - Neue Elemente <awendung>, <anwendungsname>, <dateiname>,
                        <datenformat>, <dtentraeger>, <dokumentID>, <datei>,
                        <eingangsstempel>,<formularID>, <formularname>,
                        <hersteller>, <onlineformular>, <papierformular>,
                        <ressourceID>, <server>,<upload>, <zertifikat>
                      - Neue Kindelemente <daum> und <uhrzeit>
                      
                    - Daten:
                      - Gechachtelte Merkmalsgrppen zugelassen:
                        - Element <mmgr> darf sic selbst enthalten
                      - Kapselung der Datensaetze m Datensegment mit <datensegment>
                      - Neue Elemente <meldungsID>,<meldungsart> mit nachgeordnenten
                        Elementen <original>, <berictigung>, <nachmeldung>, <austausch>,
                        <loeschung>, <nil>
                      - Bisherige Attribute in <wert> etfallen, neue Attribute
                        einheit, klasse und faktor ohne orbelegung (ausser faktor).
               
                      - Sonstige Elemente:
                        - Neue Elemente <datum> und <uhrzeit>
           
                      - Sonstiges:
                        - Datumsklasse"format" um Semensterangaen erweitert (Details
                          in der Spezifikation).
						 
              003 R 20050110/R/2.0.0/D/1/Michael Schaefer
                    - Anpassung an Spezifikation:
				      - Element <korrektur> in <meldungsart> in <austausch> umbenannt.
                      - Typ IdentifikationKontaktTyp durch separate Typen IdentifikationTyp
					    und KontaktTyp ersetzt.

             ]]>
                
    </xs:documentation>
  </xs:annotation>
  
  <!-- Allgemeine Typen -->
  
  <xs:complexType name = "DatumTyp">
    <xs:simpleContent>
      <xs:extension base = "xs:string">
        <xs:attribute name = "format" fixed = "jjjjmmtt" type = "xs:normalizedString"/>
        <xs:attribute name = "klasse" fixed = "datum" type = "xs:normalizedString"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  
  <xs:complexType name = "TextKlasseTyp">
    <xs:simpleContent>
      <xs:extension base = "xs:string">
        <xs:attribute name = "klasse" default = "default" type = "xs:normalizedString"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  
  <xs:complexType name = "TextKlasseNoDefaultTyp">
    <xs:simpleContent>
      <xs:extension base = "xs:string">
        <xs:attribute name = "klasse" type = "xs:normalizedString"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  
  <xs:complexType name = "TextZeileHTMLTyp">
    <xs:simpleContent>
      <xs:extension base = "xs:string">
        <xs:attributeGroup ref = "ZeileHTMLAttrGruppe"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  
  <xs:complexType name = "UhrzeitTyp">
    <xs:simpleContent>
      <xs:extension base = "xs:string">
        <xs:attribute name = "format" fixed = "hhmmss" type = "xs:normalizedString"/>
        <xs:attribute name = "klasse" fixed = "datum" type = "xs:normalizedString"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  
  <xs:complexType name = "VersionTyp">
    <xs:simpleContent>
      <xs:extension base = "xs:string"/>
    </xs:simpleContent>
  </xs:complexType>
  
  <!-- Typen Optionen -->
  
  <xs:complexType name="OptionenTyp">
    <xs:sequence>
      <xs:element name = "test" type="TestTyp" minOccurs = "0"/>
      <xs:element name = "empfangsbestaetigung" type="EmpfangsbestaetigungTyp" minOccurs = "0"/>
    </xs:sequence>
  </xs:complexType>
  
  <xs:complexType name="EmpfangsbestaetigungTyp">
    <xs:attribute name = "versandart" default = "default">
      <xs:simpleType>
        <xs:restriction base = "xs:token">
          <xs:enumeration value = "default"/>
          <xs:enumeration value = "email"/>
          <xs:enumeration value = "post"/>
          <xs:enumeration value = "download"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name = "format" default = "default">
      <xs:simpleType>
        <xs:restriction base = "xs:token">
          <xs:enumeration value = "default"/>
          <xs:enumeration value = "xml"/>
          <xs:enumeration value = "text"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name = "betreff" type = "xs:normalizedString"/>
  </xs:complexType>

  <xs:complexType name="TestTyp">
    <xs:attribute name = "kennung" type = "xs:normalizedString"/>
  </xs:complexType>

  <!-- Typen Protokollierung -->
  
  <xs:complexType name = "AnwendungTyp">
    <xs:sequence>
      <xs:element name = "anwendungsname" type = "xs:string"/>
      <xs:element name = "version" type = "VersionTyp" minOccurs = "0"/>
      <xs:element name = "server" type = "xs:string" minOccurs = "0"/>
      <xs:element name = "hersteller" type = "xs:string" minOccurs = "0"/>
      <xs:element name = "zertifikat" type = "TextKlasseNoDefaultTyp" minOccurs = "0"/>
    </xs:sequence>
  </xs:complexType>
  
  <xs:complexType name = "DateneingangTyp">
    <xs:sequence>
      <xs:element name = "datum" type = "DatumTyp"/>
      <xs:element name = "uhrzeit" type = "UhrzeitTyp"/>
      <xs:element name = "eingangsstempel" type = "TextKlasseNoDefaultTyp"/>
      <xs:element ref = "anwendung"/>
      <xs:choice minOccurs = "0">
        <xs:element name = "papierformular" type = "FormularTyp"/>
        <xs:element name = "onlineformular" type = "FormularTyp"/>
        <xs:element name = "datei" type = "DateiTyp"/>
      </xs:choice>
    </xs:sequence>
  </xs:complexType>
  
  <xs:complexType name = "DokumentinstanzTyp">
    <xs:sequence>
      <xs:element name = "dateiname" type = "DateinameTyp" minOccurs = "0"/>
      <xs:element name = "datum" type = "DatumTyp"/>
      <xs:element name = "uhrzeit" type = "UhrzeitTyp"/>
      <xs:element ref = "anwendung" minOccurs = "0"/>
      <xs:element name = "dokumentID" type = "DokumentIDTyp" minOccurs = "0"/>
      <xs:element name = "ressourceID" type = "RessourceIDTyp" minOccurs = "0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  
  <xs:complexType name = "DateiTyp">
    <xs:sequence>
      <xs:element name = "dateiname" type = "DateinameTyp" minOccurs = "0"/>
      <xs:element name = "datum" type = "DatumTyp" minOccurs = "0"/>
      <xs:element name = "uhrzeit" type = "UhrzeitTyp" minOccurs = "0"/>
      <xs:element ref = "anwendung" minOccurs = "0"/>
      <xs:element name = "dokumentID" type = "DokumentIDTyp" minOccurs = "0"/>
      <xs:element name = "datenformat" type = "DatenformatTyp" minOccurs = "0"/>
      <xs:choice minOccurs = "0">
        <xs:element name = "datentraeger" type = "DatentraegerTyp"/>
        <xs:element name = "upload"/>
      </xs:choice>
    </xs:sequence>
  </xs:complexType>
  
  <xs:complexType name = "DateinameTyp">
    <xs:simpleContent>
      <xs:extension base = "xs:string"/>
    </xs:simpleContent>
  </xs:complexType>
  
  <xs:complexType name = "DatenformatTyp">
    <xs:simpleContent>
      <xs:extension base = "xs:string">
        <xs:attribute name = "typ">
          <xs:simpleType>
            <xs:restriction base = "xs:token">
              <xs:enumeration value = "undefiniert"/>
              <xs:enumeration value = "datml"/>
              <xs:enumeration value = "xml"/>
              <xs:enumeration value = "datensatz"/>
              <xs:enumeration value = "csv"/>
              <xs:enumeration value = "edifact"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:attribute>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  
  <xs:complexType name = "DatentraegerTyp">
    <xs:simpleContent>
      <xs:extension base = "xs:string">
        <xs:attribute name = "typ">
          <xs:simpleType>
            <xs:restriction base = "xs:token">
              <xs:enumeration value = "undefiniert"/>
              <xs:enumeration value = "diskette"/>
              <xs:enumeration value = "cdrom"/>
              <xs:enumeration value = "dvd"/>
              <xs:enumeration value = "kassette"/>
              <xs:enumeration value = "magnetband"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:attribute>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
    
  <xs:complexType name = "FormularTyp">
    <xs:sequence>
      <xs:element name = "formularID" type = "TextKlasseNoDefaultTyp" minOccurs = "0"/>
      <xs:element name = "formularname" type = "TextKlasseNoDefaultTyp" minOccurs = "0"/>
    </xs:sequence>
  </xs:complexType>
  
  <xs:complexType name = "DokumentIDTyp">
    <xs:simpleContent>
      <xs:extension base = "TextKlasseNoDefaultTyp"/>
    </xs:simpleContent>
  </xs:complexType>
  
  <xs:complexType name = "RessourceIDTyp">
    <xs:simpleContent>
      <xs:extension base = "TextKlasseNoDefaultTyp"/>
    </xs:simpleContent>
  </xs:complexType>
  
  <xs:complexType name = "ZusatzTyp">
    <xs:simpleContent>
      <xs:extension base = "TextZeileHTMLTyp"/>
    </xs:simpleContent>
  </xs:complexType>
  
  <xs:complexType name = "ProtokollTyp">
    <xs:sequence>
      <xs:element name = "dateneingang" type = "DateneingangTyp" minOccurs = "0"/>
      <xs:element name = "dokumentinstanz" type = "DokumentinstanzTyp" minOccurs = "0" maxOccurs = "unbounded"/>
    </xs:sequence>
  </xs:complexType>
  
  <!-- Typen der Identifikation (Beteiligte) -->
  
  <!-- Veraltet; ersetzt durch IdentifikationTyp ud KontaktTyp
  <xs:complexType name = "IdentifikationKontaktTyp">
    <xs:choice>
      <xs:element name = "zeile" type = "TextZeileHTMLTyp" maxOccurs = "unbounded"/>
      <xs:sequence>
        <xs:element name = "identitaet" type = "IdentitaetTyp" minOccurs = "0"/>
        <xs:element name = "adresse" type = "AdresseTyp" minOccurs = "0"/>
        <xs:element name = "telefon" type = "TextZeileHTMLTyp" minOccurs = "0"/>
        <xs:element name = "email" type = "TextZeileHTMLTyp" minOccurs = "0"/>
        <xs:element name = "fax" type = "TextZeileHTMLTyp" minOccurs = "0"/>
        <xs:element name = "url" type = "TextZeileHTMLTyp" minOccurs = "0"/>
      </xs:sequence>
    </xs:choice>
  </xs:complexType>
  -->
  
  <xs:complexType name = "IdentifikationTyp">
    <xs:choice>
      <xs:element name = "zeile" type = "TextZeileHTMLTyp" maxOccurs = "unbounded"/>
      <xs:sequence>
        <xs:element name = "identitaet" type = "IdentitaetTyp"/>
        <xs:element name = "adresse" type = "AdresseTyp" minOccurs = "0"/>
        <xs:element name = "telefon" type = "TextZeileHTMLTyp" minOccurs = "0"/>
        <xs:element name = "email" type = "TextZeileHTMLTyp" minOccurs = "0"/>
        <xs:element name = "fax" type = "TextZeileHTMLTyp" minOccurs = "0"/>
        <xs:element name = "url" type = "TextZeileHTMLTyp" minOccurs = "0"/>
      </xs:sequence>
    </xs:choice>
  </xs:complexType>
  
  <xs:complexType name = "KontaktTyp">
    <xs:choice>
      <xs:element name = "zeile" type = "TextZeileHTMLTyp" maxOccurs = "unbounded"/>
      <xs:sequence>
        <xs:element name = "identitaet" type = "IdentitaetTyp" minOccurs = "0"/>
        <xs:element name = "adresse" type = "AdresseTyp" minOccurs = "0"/>
        <xs:element name = "telefon" type = "TextZeileHTMLTyp" minOccurs = "0"/>
        <xs:element name = "email" type = "TextZeileHTMLTyp" minOccurs = "0"/>
        <xs:element name = "fax" type = "TextZeileHTMLTyp" minOccurs = "0"/>
        <xs:element name = "url" type = "TextZeileHTMLTyp" minOccurs = "0"/>
      </xs:sequence>
    </xs:choice>
  </xs:complexType>
  
  <xs:complexType name = "IdentitaetTyp">
    <xs:sequence>
      <xs:element name = "organisation" type = "OrganisationTyp" minOccurs = "0"/>
      <xs:element name = "person" type = "PersonTyp" minOccurs = "0"/>
    </xs:sequence>
  </xs:complexType>
  
  <xs:complexType name = "OrganisationTyp">
    <xs:sequence>
      <xs:element name = "name" type = "TextZeileHTMLTyp"/>
      <xs:element name = "niederlassung" type = "TextZeileHTMLTyp" minOccurs = "0"/>
      <xs:element name = "zusatz" type = "ZusatzTyp" minOccurs = "0"/>
    </xs:sequence>
  </xs:complexType>
  
  <xs:complexType name = "PersonTyp">
    <xs:sequence>
      <xs:element name = "anrede" type = "TextZeileHTMLTyp" minOccurs = "0"/>
      <xs:element name = "titel" type = "TextZeileHTMLTyp" minOccurs = "0"/>
      <xs:element name = "vorname" type = "TextZeileHTMLTyp" minOccurs = "0"/>
      <xs:element name = "nachname" type = "TextZeileHTMLTyp"/>
      <xs:element name = "zusatz" type = "ZusatzTyp" minOccurs = "0"/>
    </xs:sequence>
  </xs:complexType>
  
  <xs:complexType name = "AdresseTyp">
    <xs:sequence>
      <xs:element name = "strasse" type = "TextZeileHTMLTyp" minOccurs = "0"/>
      <xs:element name = "hausnummer" type = "TextZeileHTMLTyp" minOccurs = "0"/>
      <xs:element name = "postfach" type = "TextZeileHTMLTyp" minOccurs = "0"/>
      <xs:element name = "postfachleitzahl" type = "TextZeileHTMLTyp" minOccurs = "0"/>
      <xs:element name = "postfachort" type = "TextZeileHTMLTyp" minOccurs = "0"/>
      <xs:element name = "postleitzahl" type = "TextZeileHTMLTyp"/>
      <xs:element name = "ort" type = "TextZeileHTMLTyp"/>
      <xs:element name = "kreis" type = "TextZeileHTMLTyp" minOccurs = "0"/>
      <xs:element name = "bundesland" type = "TextZeileHTMLTyp" minOccurs = "0"/>
      <xs:element name = "land" type = "TextZeileHTMLTyp" minOccurs = "0"/>
      <xs:element name = "zusatz" type = "ZusatzTyp" minOccurs = "0"/>
    </xs:sequence>
  </xs:complexType>
  
  <xs:complexType name = "KorrekturTyp">
    <xs:sequence>
      <xs:element name = "identifikation" type = "IdentifikationTyp" minOccurs = "0"/>
      <xs:element name = "kontakt" type = "KontaktTyp" minOccurs = "0"/>
    </xs:sequence>
  </xs:complexType>
  
  <!-- Typen Erhebung und Berichtszeitrum -->
  
  <xs:complexType name = "ErhebungTyp">
    <xs:sequence>
      <xs:element name = "kennung" type = "TextKlasseTyp"/>
      <xs:element name = "text" type = "xs:string" minOccurs = "0"/>
      <xs:element name = "berechtigung" type = "TextKlasseTyp" minOccurs = "0"/>
    </xs:sequence>
  </xs:complexType>
  
  <xs:complexType name = "BerichtszeitraumTyp">
    <xs:choice>
      <xs:element name = "string" type = "StringTyp"/>
      <xs:group ref = "BerichtszeitraumGruppe"/>
      <xs:sequence>
        <xs:element name = "beginn" type = "BeginnEndeTyp"/>
        <xs:element name = "ende" type = "BeginnEndeTyp"/>
      </xs:sequence>
    </xs:choice>
  </xs:complexType>
  
  <xs:simpleType name="JahrTyp">
    <xs:restriction base="xs:positiveInteger">
      <xs:minInclusive value="0001"/>
      <xs:maxInclusive value="9999"/>
    </xs:restriction>
  </xs:simpleType>
  
  <xs:simpleType name = "HalbjahrTyp">
    <xs:restriction base = "xs:positiveInteger">
      <xs:minInclusive value = "1"/>
      <xs:maxInclusive value = "2"/>
    </xs:restriction>
  </xs:simpleType>
  
  <xs:simpleType name = "SemesterTyp">
    <xs:restriction base = "xs:positiveInteger">
      <xs:maxInclusive value = "2"/>
      <xs:minInclusive value = "1"/>
    </xs:restriction>
  </xs:simpleType>
  
  <xs:simpleType name = "QuartalTyp">
    <xs:restriction base = "xs:positiveInteger">
      <xs:maxInclusive value = "4"/>
      <xs:minInclusive value = "1"/>
    </xs:restriction>
  </xs:simpleType>
  
  <xs:simpleType name = "MonatTyp">
    <xs:restriction base = "xs:positiveInteger">
      <xs:maxInclusive value = "12"/>
      <xs:minInclusive value = "1"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name = "WocheTyp">
    <xs:restriction base = "xs:positiveInteger">
      <xs:maxInclusive value = "53"/>
      <xs:minInclusive value = "1"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name = "TagTyp">
    <xs:restriction base = "xs:positiveInteger">
      <xs:maxInclusive value = "31"/>
      <xs:minInclusive value = "1"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:complexType name = "StringTyp">
    <xs:simpleContent>
      <xs:extension base = "xs:string">
        <xs:attribute name = "format" use = "required" type = "xs:normalizedString"/>
        <xs:attribute name = "klasse" use = "required">
          <xs:simpleType>
            <xs:restriction base = "xs:token">
              <xs:enumeration value = "undefiniert"/>
              <xs:enumeration value = "datum"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:attribute>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:complexType name = "BeginnEndeTyp">
    <xs:sequence>
      <xs:group ref = "BerichtszeitraumGruppe"/>
    </xs:sequence>
  </xs:complexType>
  
  <!-- Typen Datenattribute und Material -->
  
  <xs:complexType name = "DatenattributeTyp">
    <xs:attribute name = "dezimalzeichen" default = "," type = "xs:normalizedString"/>
    <xs:attribute name = "tausender-trennzeichen" default = "." type = "xs:normalizedString"/>
  </xs:complexType>
  
  <xs:complexType name = "MaterialTyp">
    <xs:sequence>
      <xs:element name = "name" type = "TextZeileHTMLTyp" minOccurs = "0"/>
      <xs:element name = "kennung" type = "TextKlasseTyp" minOccurs = "0"/>
      <xs:element name = "version" type = "xs:string" minOccurs = "0"/>
    </xs:sequence>
  </xs:complexType>
  
  <!-- Typen Merkmale und Datensätze -->
  
  <xs:complexType name = "HMMTyp">
    <xs:sequence>
      <xs:element name = "memo" type = "xs:string" minOccurs = "0"/>
      <xs:element name = "wert" type = "WertTyp"/>
    </xs:sequence>
    <xs:attributeGroup ref = "NameTextKlasseHTMLAttrGruppe"/>
  </xs:complexType>
  
  <xs:complexType name = "WertTyp">
    <xs:simpleContent>
      <xs:extension base = "xs:string">
        <xs:attribute name = "einheit" type = "xs:normalizedString"/>
        <xs:attribute name = "faktor" default = "1" type = "xs:positiveInteger"/>
        <xs:attribute name = "klasse" type = "xs:normalizedString"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  
  <xs:complexType name = "OMMTyp">
    <xs:sequence>
      <xs:element name = "memo" type = "xs:string" minOccurs = "0"/>
      <xs:sequence maxOccurs = "unbounded">
        <xs:element name = "wert" type = "WertTyp"/>
        <xs:choice>
          <xs:element name = "omm" type = "OMMTyp"/>
          <xs:element name = "satz" type = "SatzTyp" maxOccurs = "unbounded"/>
        </xs:choice>
      </xs:sequence>
    </xs:sequence>
    <xs:attributeGroup ref = "NameTextKlasseHTMLAttrGruppe"/>
  </xs:complexType>
  
  <xs:complexType name = "MMTyp">
    <xs:sequence>
      <xs:element name = "memo" type = "xs:string" minOccurs = "0"/>
      <xs:choice>
        <xs:element name = "wert" type = "WertTyp"/>
        <xs:element name = "na" type = "xs:normalizedString"/>
      </xs:choice>
    </xs:sequence>
    <xs:attributeGroup ref = "NameTextKlasseHTMLAttrGruppe"/>
  </xs:complexType>
  
  <xs:complexType name = "MMGRTyp">
    <xs:choice maxOccurs = "unbounded">
      <xs:element name = "mm" type = "MMTyp"/>
      <xs:element name = "mmgr" type = "MMGRTyp"/>
    </xs:choice>
    <xs:attributeGroup ref = "NameTextKlasseHTMLAttrGruppe"/>
    <xs:attribute name = "index" type = "xs:normalizedString"/>
  </xs:complexType>
  
  <xs:complexType name = "SatzTyp">
    <xs:sequence>
      <xs:choice maxOccurs = "unbounded">
        <xs:element name = "mm" type = "MMTyp"/>
        <xs:element name = "mmgr" type = "MMGRTyp"/>
      </xs:choice>
      <xs:element name = "anzahl" type = "xs:positiveInteger" minOccurs = "0"/>
    </xs:sequence>
    <xs:attribute name = "kennung" type = "xs:normalizedString"/>
  </xs:complexType>
  
  <xs:complexType name = "MeldungsIDTyp">
    <xs:simpleContent>
      <xs:extension base = "TextKlasseNoDefaultTyp"/>
    </xs:simpleContent>
  </xs:complexType>
  
  <xs:complexType name = "MeldungsartTyp">
    <xs:choice>
      <xs:element name = "original"/>
      <xs:element name = "berichtigung" type = "FunktionselementTyp"/>
      <xs:element name = "nachmeldung" type = "FunktionselementTyp"/>
      <xs:element name = "austausch" type = "FunktionselementTyp"/>
      <xs:element name = "loeschung" type = "FunktionselementTyp"/>
      <xs:element name = "nil"/>
    </xs:choice>
  </xs:complexType>
  
  <xs:complexType name = "FunktionselementTyp">
    <xs:sequence>
      <xs:element name = "meldungsID" type = "MeldungsIDTyp"/>
    </xs:sequence>
  </xs:complexType>
  
  <!-- Typen Nachricht, Segment, Datensegment -->
  
  <xs:complexType name = "NachrichtTyp">
    <xs:sequence>
      <xs:element name = "memo" type = "xs:string" minOccurs = "0"/>
      <xs:element name = "nachrichtenID" type = "NachrichtenIDTyp" minOccurs = "0"/>
      <xs:group ref = "NachrichtSegmentGruppe"/>
    </xs:sequence>
  </xs:complexType>
  
  <xs:complexType name = "NachrichtenIDTyp">
    <xs:simpleContent>
      <xs:extension base = "TextKlasseNoDefaultTyp"/>
    </xs:simpleContent>
  </xs:complexType>
  
  <xs:complexType name = "DatensegmentTyp">
    <xs:sequence>
      <xs:element name = "meldungsID" type = "MeldungsIDTyp" minOccurs = "0"/>
      <xs:element name = "meldungsart" type = "MeldungsartTyp" minOccurs = "0"/>
      <xs:choice>
        <xs:element name = "omm" type = "OMMTyp"/>
        <xs:element name = "satz" type = "SatzTyp" maxOccurs = "unbounded"/>
      </xs:choice>
    </xs:sequence>
  </xs:complexType>
  
  <xs:complexType name = "SegmentTyp">
    <xs:sequence>
      <xs:element name = "memo" type = "xs:string" minOccurs = "0"/>
      <xs:group ref = "NachrichtSegmentGruppe"/>
    </xs:sequence>
  </xs:complexType>
  
  <xs:complexType name = "AbsenderBerichtspflichtigerTyp">
    <xs:sequence>
      <xs:element name = "kennung" type = "TextKlasseTyp"/>
      <xs:element name = "berechtigung" type = "TextKlasseTyp" minOccurs = "0"/>
      <xs:element name = "identifikation" type = "IdentifikationTyp" minOccurs = "0"/>
      <xs:element name = "externeIdentifikation" type = "TextKlasseTyp" minOccurs = "0"/>
      <xs:element name = "kontakt" type = "KontaktTyp" minOccurs = "0"/>
      <xs:element name = "korrektur" type = "KorrekturTyp" minOccurs = "0"/>
      <xs:element name = "memo" type = "xs:string" minOccurs = "0"/>
    </xs:sequence>
  </xs:complexType>
  
  <xs:complexType name = "EmpfaengerBerichtsempfaengerTyp">
    <xs:sequence>
      <xs:element name = "kennung" type = "TextKlasseTyp" minOccurs = "0"/>
      <xs:element name = "identifikation" type = "IdentifikationTyp" minOccurs = "0"/>
      <xs:element name = "externeIdentifikation" type = "TextKlasseTyp" minOccurs = "0"/>
      <xs:element name = "kontakt" type = "KontaktTyp" minOccurs = "0"/>
      <xs:element name = "memo" type = "xs:string" minOccurs = "0"/>
    </xs:sequence>
  </xs:complexType>
  
  <!-- Convenience Type -->
  
  <xs:complexType name = "KontextType">
    <xs:sequence>
      <xs:group ref="KontextGruppe"/>
    </xs:sequence>
  </xs:complexType>
  
  <!-- Gruppen -->
  
  <xs:group name = "BerichtszeitraumGruppe">
    <xs:sequence>
      <xs:element name = "jahr" type="JahrTyp"/>
      <xs:choice minOccurs = "0">
        <xs:element name = "halbjahr" type = "HalbjahrTyp"/>
        <xs:element name = "semester" type = "SemesterTyp"/>
        <xs:element name = "quartal" type = "QuartalTyp"/>
        <xs:element name = "woche" type = "WocheTyp"/>
        <xs:sequence>
          <xs:element name = "monat" type = "MonatTyp"/>
          <xs:element name = "tag" type = "TagTyp" minOccurs = "0"/>
        </xs:sequence>
      </xs:choice>
    </xs:sequence>
  </xs:group>
  
  <xs:group name = "KontextGruppe">
    <xs:sequence>
      <xs:element ref = "erhebung" minOccurs = "0"/>
      <xs:element ref = "berichtszeitraum" minOccurs = "0"/>
      <xs:element ref = "berichtspflichtiger" minOccurs = "0"/>
      <xs:element ref = "berichtsempfaenger" minOccurs = "0"/>
      <xs:element name = "hmm" type = "HMMTyp" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:group>
  
  <xs:group name = "NachrichtSegmentGruppe">
    <xs:sequence>
      <xs:element ref = "erhebung" minOccurs = "0"/>
      <xs:element ref = "berichtszeitraum" minOccurs = "0"/>
      <xs:element ref = "berichtspflichtiger" minOccurs = "0"/>
      <xs:element ref = "berichtsempfaenger" minOccurs = "0"/>
      <xs:element name = "material" type = "MaterialTyp" minOccurs = "0"/>
      <xs:element name = "datenattribute" type = "DatenattributeTyp" minOccurs = "0"/>
      <xs:element name = "hmm" type = "HMMTyp" minOccurs="0" maxOccurs="unbounded"/>
      <xs:choice>
        <xs:element ref = "datensegment"/>
        <xs:element ref = "segment" maxOccurs = "unbounded"/>
      </xs:choice>
    </xs:sequence>
  </xs:group>
  
  <xs:attributeGroup name = "ZeileHTMLAttrGruppe">
    <xs:attribute name = "zeilennummer" type = "xs:normalizedString"/>
    <xs:attribute name = "html-name" type = "xs:normalizedString"/>
  </xs:attributeGroup>
  
  <xs:attributeGroup name = "NameTextKlasseHTMLAttrGruppe">
    <xs:attribute name = "name" use = "required" type = "xs:normalizedString"/>
    <xs:attribute name = "text" type = "xs:normalizedString"/>
    <xs:attribute name = "klasse" type = "xs:normalizedString"/>
    <xs:attribute name = "html-name" type = "xs:normalizedString"/>
  </xs:attributeGroup>
  
  <!-- Top Level Elementypdefinitionen
     Jedes dieser Elemente ist als Pseudo-Root validierbar
     -->
  
  <xs:element name = "anwendung" type = "AnwendungTyp"/>
  <xs:element name = "optionen" type="OptionenTyp"/>
  <xs:element name = "protokoll" type = "ProtokollTyp"/>
  <xs:element name = "absender" type = "AbsenderBerichtspflichtigerTyp"/>
  <xs:element name = "empfaenger" type = "EmpfaengerBerichtsempfaengerTyp"/>
  <xs:element name = "nachricht" type = "NachrichtTyp"/>
  <xs:element name = "erhebung" type = "ErhebungTyp"/>
  <xs:element name = "berichtszeitraum" type = "BerichtszeitraumTyp"/>
  <xs:element name = "berichtspflichtiger" type = "AbsenderBerichtspflichtigerTyp"/>
  <xs:element name = "berichtsempfaenger" type = "EmpfaengerBerichtsempfaengerTyp"/>
  <xs:element name = "datensegment" type = "DatensegmentTyp"/>
  <xs:element name = "segment" type = "SegmentTyp"/>
  
  <!-- Root Element
     -->
  
  <xs:element name = "DatML-RAW-D">
    <xs:complexType>
      <xs:sequence>
        <xs:element name = "memo" type = "xs:string" minOccurs = "0"/>
        <xs:element ref = "optionen" minOccurs = "0"/>
        <xs:element ref = "protokoll" minOccurs = "0"/>
        <xs:element ref = "absender"/>
        <xs:element ref = "empfaenger"/>
        <xs:element ref = "nachricht" maxOccurs = "unbounded"/>
        <xs:element name = "anzahl" type = "xs:positiveInteger" minOccurs = "0"/>
      </xs:sequence>
      <xs:attribute name = "version" use = "required">
        <xs:simpleType>
          <xs:restriction base = "xs:token">
            <xs:enumeration value = "2.0"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>
</xs:schema>
