Shooting Data Feed – SDF

Konzept

Das SDF-Projekt hat sich zum Ziel gesetzt eine Datenschnittstelle für das Schützen­wesen zu entwickeln.

Diese Schnittstelle hat folgende Aufgaben:

Da die Schnittstelle sowohl für das sportliche und als auch das traditionelle Schießen genutzt werden soll und außerdem offen für zukünftige Erweiterungen sein muss, bietet sich als Datenaustauschformat die Auszeichnungssprache XML (Extensible Markup Language) an. Mit Hilfe von XML-Schemata lassen sich variable Datenbe­schreibungen erstellen, mit denen man die unterschiedlichen Erfordernisse des Schüt­zenwesens abbilden kann.

Gehen wir zunächst einmal von der einfachsten Kommunikation zwischen Meister­schaftsprogramm und dem elektronischen Zielscheiben-System aus. In diesem Fall werden Starterdaten (Starterlisten) vom Meisterschaftsprogramm zum elektronischen Zielscheiben-System über­tragen und Trefferdaten / Ergebnisse vom elektronischen Zielscheiben-System zum Meisterschaftsprogramm zurückgesendet. Es werden zwei XML-Schemata definiert, die das Datenformat für Starter- und Ergebnisdaten spezifi­zieren.

Starterlisten

Die minimale Informationsmenge, die innerhalb einer Starterliste für jeden Schützen benötigt wird, ist die eindeutige Identifikationsnummer des Schützen (Startnummer) und der Name des Schützen. Eine solche minimale Starterliste sieht im SDF-XML-Format folgendermaßen aus:

<?xml version="1.0" encoding="UTF-8"?>
<sl:Startlist xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:sl="http://meyton.org/2011/Schema/Starterlist"
      xsi:schemaLocation="http://meyton.org/2011/Schema/Starterlist
                          file:/XML_SCHEMATA/Starterlist.xsd">
      <StarterRecord>
            <StartID>
                  <StartNo>1</StartNo>
            </StartID>
            <Shooter>
                  <FamilyName>MEYER</FamilyName>
            </Shooter>
            <RankingListName>Übungsschießen</RankingListName>
      </StarterRecord>
      <StarterRecord>
            <StartID>
                  <StartNo>2</StartNo>
            </StartID>
            <Shooter>
                  <FamilyName>ETGETON</FamilyName>
            </Shooter>
            <RankingListName>Übungsschießen</RankingListName>
      </StarterRecord>
      <StarterRecord>
            <StartID>
                  <StartNo>3</StartNo>
            </StartID>
            <Shooter>
                  <FamilyName>WITTE</FamilyName>
            </Shooter>
            <RankingListName>Übungsschießen</RankingListName>
      </StarterRecord>
</sl:Startlist>

Das XML-Dokument enthält drei Starterdatensätze. Jeder dieser Datensätze beinhaltet den Schützenna­men (Nachnamen), die eindeutige Identifikationsnummer des Schützen (Startnummer) und den Namen einer Ergebnisliste (Ordner) in der die Ergebnisse des jeweiligen Schützen abgelegt werden sollen (s. weiter unten).

Im Kopf des XML-Dokuments werden zwei Namensräume (Name Spaces) "xsi", und "sl" definiert. Für die Definitionen des Namensraums "sl" (Abkürzung für Starterliste) wird auf das XML-Schema "http://meyton.org/2011/Schema/Starterlist" verwiesen, welches in der Datei "file://XML_SCHEMATA/Starterlist.xsd" zu finden ist. Durch die Nutzung eines XML-Schemas können bei der Verarbeitung eines XML-Dokuments formale Fehler festgestellt werden. Dabei wird anhand des XML-Schemas geprüft, ob der Aufbau eines erhaltenen XML-Dokuments dem vorgegebenen Schema genügt. Dieser Vorgang wird auch als "Validierung" bezeichnet. Unkorrekte Datensätze werden vom Zielscheiben-System protokolliert. Dieses Protokoll kann dann beispielsweise zur Korrektur festgestellte Datensatzfehler genutzt werden.

Bereits im Zielscheiben-Sys­tem vorhandene Daten­sätze werden beim Import eines weiteren Datensatzes derselben Identifikationsnummer ohne Warnung überschrieben! Der Primärschlüssel (eindeutige Kennung) jedes Starterdatensatzes im Zielscheiben-System ist der Name der Starterliste - vorgegeben durch den XML-Datein­amen – zusammen mit der "StartID" des jeweiligen Datensatzes.

Die Starterlisten werden automatisch vom Zielscheiben-System übernommen, wenn sie im dafür vorgesehenen Ordner abgelegt werden (s. weiter unten). Es dürfen auch Teilmengen einer Starterliste an das Zielscheiben-Sys­tem übergeben werden. Die eingelesenen Starterlisten werden im Zielscheiben-System genutzt, um die Schieß­stände mit den Schützendaten zu belegen.

Zusammenfassung:

Trefferdaten / Ergebnisse

Sobald ein Treffer von einer Zielscheibe vermessen wurde, werden die zugehörigen Schei­bendaten in einer XML-Datei abgelegt. Die Trefferdaten werden in einem Verzeichnis mit dem Ergebnis­listennamen, welcher im Feld "RankingListName" der Starterliste übertragen wurde, abgespeichert. Der Name der XML-Datei setzt sich dabei aus der Startnummer "StartID“ des Schützen und der Erweiterung ".xml" zusammen. Bei jedem weiteren Treffer wird die vorherige XML-Datei durch eine neue Datei ersetzt. Durch den Zeitstem­pel der Datei kann der Da­tenverarbeiter (Meisterschaftsprogramm, Präsentationspro­gramm) ermitteln, welche Daten sich seit der letzten Verarbeitung verändert haben.

Im Folgenden finden Sie ein Minimalbeispiel einer XML-Ergebnisdatei:

	<?xml version="1.0" encoding="UTF-8"?>
<rl:ResultList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:rl="http://meyton.org/2011/Schema/ResultList"
    xsi:schemaLocation="http://meyton.org/2011/Schema/ResultList
                        file:/XML_SCHEMATA/Ergebnisliste.xsd">

    <ResultRecord StartID="1">
        <Total>
            <Result>178</Result>
            <Unit>Ring</Unit>
        </Total>
        <ShotNoTotal>20</ShotNoTotal>
        <Aimings> </Aimings>
    </ResultRecord>
</rl:ResultList>

Die Datei enthält lediglich die "StartID", das erzielte Ergebnis "Re­sult", die Einheit des Ergebnisses ("Ring") und die Zahl der bisher gemessenen Tref­fer "ShotNoTotal". Der Datentyp "Aimings" (Stellungen) muss aus formalen Grün­den vorhan­den sein, wird allerdings in diesem Fall nicht genutzt. Der Kopf der XML hat den gleichen Aufbau, wie der in der Starterlisten-XML. Jedoch sind nun die Namensräu­me "xsi" und "rl" (Abkürzung für Rangliste) definiert. Für den Namensraum "rl" ist das Schema "Ergebnisliste.xsd" eingebunden worden. Aufgrund des Schemas kann wie bei der Starterliste die XML-Datei validiert werden, sodass formal unkorrekte Ergebnisse auffallen und protokolliert werden können.

Zusammenfassung:

Datentransfer

Für den Datentransfer zwischen Meisterschaftsprogramm und dem elektronischen Zielscheiben-System gäbe es die Möglichkeit den Webdienst "ASP.NET" zu nutzen. Je­doch wird der Datentransfer in der ersten SDF-Version mit im Netz (LAN) freigegebe­nen Verzeichnissen - sogenannten "Shares" - realisiert. Als Protokoll zur Datenübertragung wurde CIFS (Common Internet File System) gewählt. CIFS ist auch bekannt unter den Namen SMB, Samba bzw. „Freigabe“ unter MS-Windows.

Sowohl Windows- als auch Linux-Rechner können auf diese Freigabe per Netzwerk zugreifen. Die freigegebenen Ordner XML_RE­SULT und XML_SCHEMATA sind nur lesbar. Das Share XML_STARTER ist auch schreibbar, damit Meisterschaftsprogramme dort XML-Starterlistendateien ablegen können. Bei der Ablage von Starterlistendateien ist zu beachten, dass der Name der Starterlisten-Datei - ohne der Erweiterung ".xml" - als Name der Starterliste im Zielscheiben-System genutzt wird. Datensätze einer Datei überschreiben Datensätze der zugehörigen Starterliste des Zielscheiben-Sys­tems, falls ein Datensatz mit derselben "StartID" bereits vorhanden ist.

Das Share XML_SCHEMATA enthält drei XML-Schema-Dateien mit der Erweiterung ".xsd". Dies sind die Dateien:

  1. Starterlist.xsd

  2. Ergebnisliste.xsd

  3. MEXsdTypes.xsd

Die Schemadatei "Starterlist.xsd" enthält Informationen über das Format und den Aufbau einer XML-Starterlistendatei. Dort wird der komplexen Datentyp "StarterRecord" definiert, welcher einen Datensatz innerhalb einer Starterliste beschreibt. Die Schema­datei "Ergebnisliste.xsd" enthält Informationen über das Format und den Aufbau einer XML-Ergebnislistendatei. Dort wird der komplexe Datentyp "ResultList" definiert, welcher einen Datensatz innerhalb einer Ergebnisliste beschreibt. Die Schemadatei "MEXsdTypes.xsd" enthält die Beschreibungen weiterer Datentypen, die zum Teil von "StarterRecord" bzw. "ResultList" genutzt werden. Die Schemata "Starterlist.xsd" und "Ergebnisliste.xsd" können zudem genutzt werden, um XML-Starterliste-Datien und XML-Ergebnis-Dateien auf Korrektheit zu überprüfen.

Das Share XML_RESULT ist unterteilt in Verzeichnisse mit den Namen der im Zielscheiben-System genutzten Starterlis­ten. Diese Starterlisten-Verzeichnisse sind weiter unterteilt in Verzeichnisse mit den Namen der Ergebnislisten. In diesen Verzeichnissen befinden sich die XML-Dateien der bereits beschossenen Scheiben. Die Dateinamen bestehen aus dem Wert der jeweiligen "StartID" und der Er­weiterung ".xml". Nach jedem gemessenen Treffer wird die zuge­hörige Datei überschrie­ben, sodass eine "live" Darstellung der Scheiben möglich ist.

Jedes Starterlisten-Verzeichnis enthält zusätzlich die zugehörige Starterlis­te im XML-For­mat. Hierdurch können auch Präsentation-Programme auf die Daten der Starter­listen zugreifen und diese für ihre Darstellung nutzen.

Die Dateien und Verzeichnisse der Shares XML_STARTER und XML_RESULT werden auto­matisch nach einer einstellbaren Zeit gelöscht. Hierdurch wird ein "Überlaufen" der Verzeichnisse verhindert. Die Starterlisten sind häufig nach der Meisterschaft nicht mehr notwendig und die Scheibendateien verlieren ihre Wichtigkeit in der Regel bereits nach der Übergabe an das Meisterschaftsprogramm.

Zusammenfassung:

  1. Es gibt insgesamt drei Shares (freigegebene Netzwerkordner). Dies sind:

    1. XML_SCHEMATA mit den drei XML-Schema-Dateien:

      1. Starterlist.xsd

      2. Ergebnisliste.xsd

      3. MEXsdTypes.xsd

    2. XML_STARTER zur Ablage von XML-Starterlisten-Dateien durch Meisterschaftsprogramme.

    3. XML_RESULT mit XML-Ergebnis-Dateien. Es beinhaltet:

      1. Jeweils ein Verzeichnis pro Starterliste, welches nach dem Namen der Starterliste benannt ist. Dieses Verzeichnis enthält:

        1. Die XML-Starterlistendatei der jeweiligen Starterliste.

        2. Jeweils ein Verzeichnis für jede in der Starterliste vorkommende Ergebnislist. Dies enthält:

          1. Die XML-Ergebnisdateien der Schützen der jeweiligen Ergebnisliste.

  2. Die Starterlisten und Scheibendateien werden nach einer einstellbaren Zeit auto­matisch gelöscht.

Start-Datensatz

Bei größeren Meisterschaften ist zusätzliche Planung notwendig. Es muss beispielsweise bestimmt werden zu welchem Zeitpunkt ein Schütze startet und auf welchen Stand (Zielscheibe) der Schütze seinen Wettkampf absolviert. Das nächste Beispiel zeigt uns eine XML-Starterlistendatei im SDF-Format, welche im Gegensatz zum vorherigen Minimalbeispiel einige zusätzliche Datenfelder beinhaltet:

<?xml version="1.0" encoding="UTF-8"?>
<sl:Startlist xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sl="http://meyton.org/2011/Schema/Starterlist"
    xsi:schemaLocation="http://meyton.org/2011/Schema/Starterlist
                        file:/XML_SCHEMATA/Starterlist.xsd">
    <StarterRecord>
        <StartID>
            <StartNo>1</StartNo>
            <ShirtNo>1001</ShirtNo>
        </StartID>
        <Shooter>
            <FamilyName>WITTE</FamilyName>
            <GivenName>Udo</GivenName>
            <Gender>M</Gender>
            <YearOfBirth>1953</YearOfBirth>
        </Shooter>
        <Club>
            <Name>SG Spenge</Name>
        </Club>
        <Team>
            <Name>Meyton_I</Name>
        </Team>
        <LaneNo>103</LaneNo>
        <MatchClass>
            <ClassNameID>
                <Name/>
                <ID>50</ID>
            </ClassNameID>
        </MatchClass>
        <Federation>
            <FederationNameID>
                <Name>WSB</Name>
            </FederationNameID>
        </Federation>
        <Discipline>
            <MajorGermanRule>2</MajorGermanRule>
            <MinorGermanRule>10</MinorGermanRule>
            <TotalCompetitionShotNo>40</TotalCompetitionShotNo>
        </Discipline>
        <RankingListName>TestLP_K50</RankingListName>
        <StartTime>2012-02-12T14:15:00+01:00</StartTime>
    </StarterRecord>
</sl:Startlist>

Der Kopf der XML-Datei unterscheidet sich prinzipiell nicht vom vorherigen Beispiel. Im Starterdatensatz "StarterRecord" werden nun jedoch einige folgende weitere optionale Parameter verwendet:

Ergebnis-Datensatz

Das nächste Beispiel zeigt uns eine XML-Ergebnisdatei mit 14 Treffern auf einer Luftpistolen-Scheibe im SDF-Format. Im Gegensatz zum vorherigen Minimalbeispiel sind hier einige zusätzliche Datenfelder enthalten:

<?xml version="1.0" encoding="UTF-8"?>
<rl:ResultList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:rl="http://meyton.org/2011/Schema/ResultList"
    xsi:schemaLocation="http://meyton.org/2011/Schema/ResultList
    file:/XML_SCHEMATA/Ergebnisliste.xsd">
    <ResultRecord StartID="1" LaneNo="103" ResultKind="Qualification"     ResultStatus="LIVE">
        <Total>
            <Result>119</Result>
            <Unit>Ring</Unit>
        </Total>
        <ShotNoTotal>14</ShotNoTotal>
        <Aimings>
            <AimingData AimingID="1">
                <AimingShotNo>13</AimingShotNo>
                <Series SeriesID="1">
                    <ValueSerie>
                        <Result>84</Result>
                        <Unit>Ring</Unit>
                    </ValueSerie>
                </Series>
                <Series SeriesID="2">
                    <ValueSerie>
                        <Result>35</Result>
                        <Unit>Ring</Unit>
                    </ValueSerie>
                </Series>
                <RingFrequency Ring="0">
                    <NoOfOccurs>1</NoOfOccurs>
                </RingFrequency>
                <RingFrequency Ring="10">
                    <NoOfOccurs>1</NoOfOccurs>
                </RingFrequency>
                <RingFrequency Ring="9">
                    <NoOfOccurs>6</NoOfOccurs>
                </RingFrequency>
                <RingFrequency Ring="8">
                    <NoOfOccurs>6</NoOfOccurs>
                </RingFrequency>
                <RingFrequency Ring="7">
                    <NoOfOccurs>1</NoOfOccurs>
                </RingFrequency>
                <AimingTotal>
                    <Result>109</Result>
                    <Unit>Ring</Unit>
                </AimingTotal>
                <Shot ShotID="1">
                    <Coordinate>
                        <CCoordinate Resolution="100">
                            <X>-318</X>
                            <Y>-1633</Y>
                        </CCoordinate>
                    </Coordinate>
                </Shot>
                <Shot ShotID="2">
                    <Coordinate>
                        <CCoordinate Resolution="100">
                            <X>1834</X>
                            <Y>1043</Y>
                        </CCoordinate>
                    </Coordinate>
                </Shot>
                <Shot ShotID="3">
                    <Coordinate>
                        <CCoordinate Resolution="100">
                            <X>-749</X>
                            <Y>-1399</Y>
                        </CCoordinate>
                    </Coordinate>
                </Shot>
                <Shot ShotID="4">
                    <Coordinate>
                        <CCoordinate Resolution="100">
                            <X>-316</X>
                            <Y>-1566</Y>
                        </CCoordinate>
                    </Coordinate>
                </Shot>
                <Shot ShotID="5">
                    <Coordinate>
                        <CCoordinate Resolution="100">
                            <X>-38</X>
                            <Y>1186</Y>
                        </CCoordinate>
                    </Coordinate>
                </Shot>
                <Shot ShotID="6">
                    <Coordinate>
                        <CCoordinate Resolution="100">
                            <X>-1109</X>
                            <Y>1884</Y>
                        </CCoordinate>
                    </Coordinate>
                </Shot>
                <Shot ShotID="7">
                    <Coordinate>
                        <CCoordinate Resolution="100">
                            <X>982</X>
                            <Y>1773</Y>
                        </CCoordinate>
                    </Coordinate>
                </Shot>
                <Shot ShotID="8">
                    <Coordinate>
                        <CCoordinate Resolution="100">
                            <X>-466</X>
                            <Y>1224</Y>
                        </CCoordinate>
                    </Coordinate>
                </Shot>
                <Shot ShotID="9">
                    <Coordinate>
                        <CCoordinate Resolution="100">
                            <X>1543</X>
                            <Y>1949</Y>
                        </CCoordinate>
                    </Coordinate>
                </Shot>
                <Shot ShotID="10">
                    <Coordinate>
                        <CCoordinate Resolution="100">
                            <X>-1270</X>
                            <Y>277</Y>
                        </CCoordinate>
                    </Coordinate>
                </Shot>
                <Shot ShotID="11">
                    <Coordinate>
                        <CCoordinate Resolution="100">
                            <X>1643</X>
                            <Y>737</Y>
                        </CCoordinate>
                    </Coordinate>
                </Shot>
                <Shot ShotID="12">
                    <Coordinate>
                        <CCoordinate Resolution="100">
                            <X>1288</X>
                            <Y>-540</Y>
                        </CCoordinate>
                    </Coordinate>
                </Shot>
                <Shot ShotID="13">
                    <Coordinate>
                        <CCoordinate Resolution="100">
                            <X>1871</X>
                            <Y>-816</Y>
                        </CCoordinate>
                    </Coordinate>
                </Shot>
                <Shot ShotID="14" IsInnerTen="true">
                    <Coordinate>
                        <CCoordinate Resolution="100">
                            <X>-152</X>
                            <Y>98</Y>
                        </CCoordinate>
                    </Coordinate>
                </Shot>
            </AimingData>
        </Aimings>
    </ResultRecord>
</rl:ResultList>

Der Kopf der XML-Datei entspricht prinzipiell dem Kopf der vorherigen Beispiele. Im Ergebnis-Datensatz "StarterRecord" sind einige Wer­te hinzugekommen:

  1. <ResultRecord StartID="1" LaneNo="103" ResultKind="Qualification" ResultStatus="LIVE">
    Der komplexe Datentyp "ResultRecord" besitzt folgende Attribute:

    1. "StartID"

      Hier muss als Wert die eindeutige "StartNo" des Starter-Datensatzes ange­geben werden. Das Meisterschaftsprogramm / Präsentationsprogramm kann hierdurch die im Ergebnis-Datensatz fehlenden Daten wie Schützenname, Verein, Mannschaft, ... für die Auswertung er­gänzen.

    2. "LaneNo"
      Scheibennummer (Standnummer) auf dem der Schütze das Ergebnis erzielt hat.

    3. "ResultKind"
      Art des Wettkampfes, zur Zeit sind die Werte "Qualification" und "Final" defi­niert.

    4. "ResultStatus"
      Phase des Wettkampfes mit folgenden Werten:

      1. "OFFICIAL"

      2. "UNOFFICIAL"

      3. "PARTIAL"

      4. "INTERIM"

      5. "INTERMEDIATE"

      6. "LIVE"

      7. "LIVE_FULL"

      8. "LIVE_UPDATE"

      9. "LIVE_MANDATORY"

      10. "LIVE_LAST"

  2. <AimingData AimingID="1">
    Dieser komplexe Datentyp enthält die Daten einer Stellung. Das Attribut "Ai­mingID" ist die Kennung der Stellung mit dem Wertebereich von 1 bis 8. Zum Beispiel beim Dreistellungskampf hat "Liegend" den Wert 1, "Stehend" den Wert 2 und "Kniend" den Wert 3. Die Datentypen innerhalb von "AimingData" sind:

    1. "Series"
      Die Serienergebnisse der Stellung.

    2. "RingFrequency"
      D
      as Attribut "Ring" gibt den Ringwert an und der Datentyp "NoOfOccurs" die Häufigkeit innerhalb der Stellung. Das Innenzehner Attribut besitzt als "Ring" den Wert 0!

    3. "AimingTotal"
      Ergebnis der Stellung.

    4. "Shot"
      Besitzt als Attribut "ShotID", dieses ist die Treffernummer innerhalb der Stel­lung und besitzt einen Wertebereich 1 bis 400.

    5. "<Coordinate>"
      Ist die Mitte-Treffer-Position auf der Zielscheibe. Als Koordinaten kann zwischen kartesischen oder Polarkoordinaten gewählt werden. Optional wird auch der Zeitstempel des Treffers angegeben mit der Auflösung von 1/100 Sekunde.

      1. "<CCoordinate Resolution="100">"
        Gibt die Koordinaten der Trefferposition als "XY"-Wert an. Das Attribut "Resolution" gibt die Teile pro Millimeter an. Der Wert "100" bedeutet , dass die Koordinate die Auflö­sung 1/100 Millimeter besitzt.


      Der Ergebnis-Datensatz besitzt noch einige weitere optionale Datenfelder. Nähere Infor­mationen können aus der Dokumentation des Schemas "Ergebnisliste.xsd" entnommen werden.

Organisation

Nähere Informationen zur „Shooting Data Feed“ (SDF) Schnittstelle finden Sie auf der Internet-Plattform http://www.meyton.org/sdf/. Auf der Hauptseite finden Sie eine Übersicht aller bisher veröffentlichten Version der SDF-Schnittstelle. Bei Auswahl einer Versionsnummer gelangt man in das „README“ (Inhalt dieser Datei) und zur HTML-Dokumentationen der XML-Schemata. Per "FTP-Server" können die XML-Schemata, die Dokumentationen in PDF-Format und XML-Beispieldateien heruntergeladen werden.

Wenn Sie an der Weiterentwicklung aktiv mitarbeiten wollen – was vom Verfasser dieser Zei­len ausdrücklich gewünscht wird – nutzen Sie das Forum http://www.meyton.org/forum/sdf oder schicken Sie eine E-Mail an sdf@meyton.org.



Version 0.1.1a 13 von 13 2012-01-31