XML Schema Definition des ls3-Dateiformats

Aus ZusiWiki
Version vom 10. Juli 2016, 19:32 Uhr von AMeschede (Diskussion | Beiträge) (Anpassungen nach Test-Validierungen)
Zur Navigation springen Zur Suche springen

Hier entsteht eine XSD-Datei des ls3-Dateiformats - work in progress!

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <xs:element name="Zusi">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="Info"/>
        <xs:element ref="Landschaft"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="Info">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="AutorEintrag"/>
      </xs:sequence>
      <xs:attribute name="Beschreibung" type="xs:string"/>
      <xs:attribute name="DateiKategorie" type="xs:NCName"/>
      <xs:attribute name="DateiTyp" type="xs:NCName"/>
      <xs:attribute name="EinsatzAb"/> <!-- Datentyp TDateTime -->
      <xs:attribute name="EinsatzBis"/> <!-- Datentyp TDateTime -->
      <xs:attribute name="MinVersion" type="xs:NCName"/>
      <xs:attribute name="ObjektID" type="xs:int"/>
      <xs:attribute name="Version" type="xs:NCName"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="AutorEintrag">
    <xs:complexType>
      <xs:attribute name="AutorAufwand" type="xs:float"/>
      <xs:attribute name="AutorBeschreibung" type="xs:NCName"/>
      <xs:attribute name="AutorEmail" type="xs:string"/>
      <xs:attribute name="AutorID" type="xs:int"/>
      <xs:attribute name="AutorLizenz"/> <!--Datentyp integer enum -->
      <xs:attribute name="AutorName" type="xs:string"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="Landschaft">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="Verknuepfte" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="lsb" minOccurs="0" maxOccurs="1"/>
        <xs:element ref="SubSet" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="Ankerpunkt" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="Animation" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="Sound" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="MeshAnimation" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="VerknAnimation" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="Verknuepfte">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="Datei"/>
        <xs:element ref="p"/>
        <xs:element ref="phi"/>
        <xs:element ref="sk"/>
      </xs:sequence>
      <xs:attribute name="BoundingR" type="xs:float"/>
      <xs:attribute name="Flags" type="xs:long"/>
      <xs:attribute name="GruppenName" type="xs:NCName"/>
      <xs:attribute name="Helligkeit" type="xs:float"/>
      <xs:attribute name="LODbit" type="xs:int"/>
      <xs:attribute name="SichtbarAb" type="xs:float"/>
      <xs:attribute name="SichtbarBis" type="xs:float"/>
      <xs:attribute name="Vorlade" type="xs:float"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="sk">
    <xs:complexType>
      <xs:attribute name="X" type="xs:float"/>
      <xs:attribute name="Y" type="xs:float"/>
      <xs:attribute name="Z" type="xs:float"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="lsb">
    <xs:complexType>
      <xs:attribute name="Dateiname" type="xs:string"/>
      <xs:attribute name="NurInfo" type="xs:boolean"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="SubSet">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="RenderFlags" minOccurs="0" maxOccurs="1"/>
        <xs:element ref="Textur" minOccurs="0" maxOccurs="2"/>
        <xs:element ref="Vertex" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="Face" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="BeleuchtungTyp" type="xs:int"/>
      <xs:attribute name="Blink" type="xs:float"/>
      <xs:attribute name="Ca" type="xs:hexBinary"/> <!-- Datentyp D3DColor -->
      <xs:attribute name="Cd" type="xs:hexBinary"/> <!-- Datentyp D3DColor -->
      <xs:attribute name="Ce" type="xs:hexBinary"/> <!-- Datentyp D3DColor -->
      <xs:attribute name="DoppeltRendern" type="xs:boolean"/>
      <xs:attribute name="GruppenName" type="xs:NCName"/>
      <xs:attribute name="MeshI" type="xs:int"/>
      <xs:attribute name="MeshV" type="xs:int"/>
      <xs:attribute name="MeterProTex" type="xs:float"/>
      <xs:attribute name="MeterProTex2" type="xs:float"/>
      <xs:attribute name="NachtEinstellung" type="xs:int"/>
      <xs:attribute name="Nachtumschaltung" type="xs:float"/>
      <xs:attribute name="TypGF"/> <!-- Datentyp integer enum -->
      <xs:attribute name="TypLs3"/> <!-- Datentyp integer enum -->
      <xs:attribute name="Zwangshelligkeit" type="xs:float"/>
      <xs:attribute name="zBias" type="xs:int"/>
      <xs:attribute name="zZoom" type="xs:float"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="RenderFlags">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="SubSetTexFlags" minOccurs="0" maxOccurs="1"/>
        <xs:element ref="SubSetTexFlags2" minOccurs="0" maxOccurs="1"/>
        <xs:element ref="SubSetTexFlags3" minOccurs="0" maxOccurs="1"/>
      </xs:sequence>
      <xs:attribute name="ALPHABLENDENABLE" type="xs:boolean"/>
      <xs:attribute name="ALPHAREF" type="xs:int"/>
      <xs:attribute name="ALPHATESTENABLE" type="xs:boolean"/>
      <xs:attribute name="DESTBLEND"/> <!-- Datentyp integer enum -->
      <xs:attribute name="SHADEMODE"/> <!-- Datentyp integer enum -->
      <xs:attribute name="SRCBLEND"/> <!-- Datentyp integer enum -->
      <xs:attribute name="TexVoreinstellung" type="xs:int"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="SubSetTexFlags">
    <xs:complexType>
      <xs:attribute name="ALPHAARG0"/> <!-- Datentyp integer enum -->
      <xs:attribute name="ALPHAARG1"/> <!-- Datentyp integer enum -->
      <xs:attribute name="ALPHAARG2"/> <!-- Datentyp integer enum -->
      <xs:attribute name="ALPHAOP"/> <!-- Datentyp integer enum -->
      <xs:attribute name="COLORARG0"/> <!-- Datentyp integer enum -->
      <xs:attribute name="COLORARG1"/> <!-- Datentyp integer enum -->
      <xs:attribute name="COLORARG2"/> <!-- Datentyp integer enum -->
      <xs:attribute name="COLOROP"/> <!-- Datentyp integer enum -->
      <xs:attribute name="MAGFILTER"/> <!-- Datentyp integer enum -->
      <xs:attribute name="MINFILTER"/> <!-- Datentyp integer enum -->
      <xs:attribute name="RESULTARG"/> <!-- Datentyp integer enum -->
    </xs:complexType>
  </xs:element>
  <xs:element name="SubSetTexFlags2">
    <xs:complexType>
      <xs:attribute name="ALPHAARG0"/> <!-- Datentyp integer enum -->
      <xs:attribute name="ALPHAARG1"/> <!-- Datentyp integer enum -->
      <xs:attribute name="ALPHAARG2"/> <!-- Datentyp integer enum -->
      <xs:attribute name="ALPHAOP"/> <!-- Datentyp integer enum -->
      <xs:attribute name="COLORARG0"/> <!-- Datentyp integer enum -->
      <xs:attribute name="COLORARG1"/> <!-- Datentyp integer enum -->
      <xs:attribute name="COLORARG2"/> <!-- Datentyp integer enum -->
      <xs:attribute name="COLOROP"/> <!-- Datentyp integer enum -->
      <xs:attribute name="MAGFILTER"/> <!-- Datentyp integer enum -->
      <xs:attribute name="MINFILTER"/> <!-- Datentyp integer enum -->
      <xs:attribute name="RESULTARG"/> <!-- Datentyp integer enum -->
    </xs:complexType>
  </xs:element>
  <xs:element name="SubSetTexFlags3">
    <xs:complexType>
      <xs:attribute name="ALPHAARG0"/> <!-- Datentyp integer enum -->
      <xs:attribute name="ALPHAARG1"/> <!-- Datentyp integer enum -->
      <xs:attribute name="ALPHAARG2"/> <!-- Datentyp integer enum -->
      <xs:attribute name="ALPHAOP"/> <!-- Datentyp integer enum -->
      <xs:attribute name="COLORARG0"/> <!-- Datentyp integer enum -->
      <xs:attribute name="COLORARG1"/> <!-- Datentyp integer enum -->
      <xs:attribute name="COLORARG2"/> <!-- Datentyp integer enum -->
      <xs:attribute name="COLOROP"/> <!-- Datentyp integer enum -->
      <xs:attribute name="MAGFILTER"/> <!-- Datentyp integer enum -->
      <xs:attribute name="MINFILTER"/> <!-- Datentyp integer enum -->
      <xs:attribute name="RESULTARG"/> <!-- Datentyp integer enum -->
    </xs:complexType>
  </xs:element>
  <xs:element name="Textur">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="Datei"/>
      </xs:sequence>
      <xs:attribute name="AnzahlMipMapLevel" type="xs:int"/>
      <xs:attribute name="TransparentFarbe" type="xs:hexBinary"/> <!-- Datentyp D3DColor -->
      <xs:attribute name="TransparentModus"/> <!-- Datentyp integer enum -->
    </xs:complexType>
  </xs:element>
  <xs:element name="Vertex">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="p"/>
        <xs:element ref="n"/>
      </xs:sequence>
      <xs:attribute name="U" type="xs:float"/>
      <xs:attribute name="U2" type="xs:float"/>
      <xs:attribute name="V" type="xs:float"/>
      <xs:attribute name="V2" type="xs:float"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="n">
    <xs:complexType>
      <xs:attribute name="X" type="xs:float"/>
      <xs:attribute name="Y" type="xs:float"/>
      <xs:attribute name="Z" type="xs:float"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="Face">
    <xs:complexType>
      <xs:attribute name="i" type="xs:string"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="Ankerpunkt">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="p"/>
        <xs:element ref="phi"/>
        <xs:element ref="Datei"/>
      </xs:sequence>
      <xs:attribute name="AnkerKat"/>
      <xs:attribute name="AnkerTyp"/>
      <xs:attribute name="Beschreibung" type="xs:NCName"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="Animation">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="AniNrs"/>
      </xs:sequence>
      <xs:attribute name="AniBeschreibung" type="xs:NCName"/>
      <xs:attribute name="AniID"/> <!-- Datentyp integer enum -->
      <xs:attribute name="AniLoopen" type="xs:boolean"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="AniNrs">
    <xs:complexType>
      <xs:attribute name="AniNr" type="xs:int"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="MeshAnimation">
    <xs:complexType>
      <xs:complexContent>
        <xs:extension base="AniPunkt">
          <xs:attribute name="AniGeschw" type="xs:float"/>
          <xs:attribute name="AniIndex" type="xs:int"/>
          <xs:attribute name="AniNr" type="xs:int"/>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="VerknAnimation">
    <xs:complexType>
      <xs:complexContent>
        <xs:extension base="AniPunkt">
          <xs:attribute name="AniGeschw" type="xs:float"/>
          <xs:attribute name="AniIndex" type="xs:int"/>
          <xs:attribute name="AniNr" type="xs:int"/>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="Datei">
    <xs:complexType>
      <xs:attribute name="Dateiname" type="xs:string"/>
      <xs:attribute name="NurInfo" type="xs:boolean"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="p">
    <xs:complexType>
      <xs:attribute name="X" type="xs:float"/>
      <xs:attribute name="Y" type="xs:float"/>
      <xs:attribute name="Z" type="xs:float"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="phi">
    <xs:complexType>
      <xs:attribute name="X"/>
      <xs:attribute name="Y"/>
      <xs:attribute name="Z"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="Sound">
    <xs:complexType>
      <xs:choice>
        <xs:element ref="Abhaengigkeit" minOccurs="0" maxOccurs="unbounded"/>
        <xs:sequence>
          <xs:element ref="Sound" minOccurs="1" maxOccurs="1"/>
          <xs:element ref="Datei" minOccurs="1" maxOccurs="1"/>
        </xs:sequence>
      </xs:choice>
      <xs:attribute name="Autostart" type="xs:boolean"/>
      <xs:attribute name="GeschwAendern" type="xs:boolean"/>
      <xs:attribute name="Lautstaerke" type="xs:float"/>
      <xs:attribute name="Loop" type="xs:boolean"/>
      <xs:attribute name="MaxRadius" type="xs:float"/>
      <xs:attribute name="MinRadius" type="xs:float"/>
      <xs:attribute name="PosAnlauf" type="xs:int"/>
      <xs:attribute name="PosAuslauf" type="xs:int"/>
      <xs:attribute name="dreiD" type="xs:boolean"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="Abhaengigkeit">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="Kennfeld"/>
      </xs:sequence>
      <xs:attribute name="LautstaerkeAbh" type="xs:boolean"/>
      <xs:attribute name="PhysikGroesse"/>
      <xs:attribute name="SoundGeschwAbh" type="xs:boolean"/>
      <xs:attribute name="SoundOperator"/>
      <xs:attribute name="Trigger"/>
      <xs:attribute name="TriggerGrenze" type="xs:float"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="Kennfeld">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="Pkt"/>
        <xs:element ref="Stufe"/>
      </xs:sequence>
      <xs:attribute name="Beschreibung" type="xs:NCName"/>
      <xs:attribute name="xText" type="xs:NCName"/>
      <xs:attribute name="yText" type="xs:NCName"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="Pkt">
    <xs:complexType>
      <xs:attribute name="PktX" type="xs:float"/>
      <xs:attribute name="PktY" type="xs:float"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="Stufe">
    <xs:complexType>
      <xs:attribute name="StufenWert" type="xs:float"/>
    </xs:complexType>
  </xs:element>
  <xs:complexType name="AniPunkt">
    <xs:sequence>
      <xs:element ref="AniPunkt"/>
    </xs:sequence>
  </xs:complexType>
  <xs:element name="AniPunkt">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="p"/>
        <xs:element ref="q"/>
      </xs:sequence>
      <xs:attribute name="AniDimmung" type="xs:float"/>
      <xs:attribute name="AniZeit" type="xs:float"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="q">
    <xs:complexType>
      <xs:attribute name="W"/>
      <xs:attribute name="X"/>
      <xs:attribute name="Y"/>
      <xs:attribute name="Z"/>
    </xs:complexType>
  </xs:element>
</xs:schema>