XML

Extensible Markup Language (XML) ist eine häufig verwendete textbasierte Auszeichnungssprache. ArcGIS Velocity kann IoT-Beobachtungsdaten im XML-Format aus vielfältigen Quellen erfassen.

Das Datenformat XML wird für die folgenden Feed- und Datenquellentypen unterstützt:

  • Feeds: Azure Event Hub, Azure Service Bus, Website (Abfrage), RabbitMQ, WebSocket, Kafka, MQTT, AWS IoT, Endpunkt (empfangen)
  • Datenquellen: Amazon S3, Azure Blob Storage, Website (Abfrage)

Festlegen der XML-Konfiguration

Beim Konfigurieren eines Feeds oder einer Datenquelle wird anhand von Stichproben der Typ der erfassten Daten ermittelt. Wenn anhand der Stichproben bestimmt wird, dass die Daten im XML-Format vorliegen müssen, können zusätzliche Eigenschaften für die XML-Konfiguration festgelegt werden.

Stammelement

Geben Sie ggf. das Stammelement der XML-Struktur an, in der sich die Nachrichten befinden. Als Stammelement muss ein Objekt angegeben sein, dessen Unterelemente Attribute sind. Machen Sie hier keine Angabe, wenn die XML-Struktur alle Nachrichten unter dem Stammelement des XML-Dokuments enthält.

In den folgenden XML-Beispieldaten weist der Code mehrere Elemente auf:

<?xml version="1.0" encoding="UTF-8"?>
<flight>
  <aircraftData>
    <aircraftID>N-X-211</aircraftID>
    <pilot>Charles L.</pilot>
    <speed>212.28</speed>
    <altitude>20200</altitude>
    <heading>44.02</heading>
    <latitude>52.653726</latitude>
    <longitude>-21.885421</longitude>
    <status>In flight</status>
    <datetime>1589962024</datetime>
  </aircraftData>
  <aircraftData>
    <aircraftID>N02061</aircraftID>
    <pilot>Jane D.</pilot>
    <speed>132.00</speed>
    <altitude>13008</altitude>
    <heading>264.54</heading>
    <latitude>19.510083</latitude>
    <longitude>-153.950114</longitude>
    <status>In flight</status>
    <datetime>1589962042</datetime>
  </aircraftData>
  <airportData>
    <name>John F. Kennedy Int. Airport</name>
    <IATA>JFK</IATA>
    <ICAO>KJFK</ICAO>
    <date>1589932800</date>
    <location>
      <latitude>40.643585</latitude>
      <longitude>-73.781927</longitude>
    </location>
  </airportData>
</flight>

Wenn das Stammelement aircraftData festgelegt wird, werden in Velocity nur die folgenden Daten erfasst:

<aircraftData>
    <aircraftID>N-X-211</aircraftID>
    <pilot>Charles L.</pilot>
    <speed>212.28</speed>
    <altitude>20200</altitude>
    <heading>44.02</heading>
    <latitude>52.653726</latitude>
    <longitude>-21.885421</longitude>
    <status>In flight</status>
    <datetime>1589962024</datetime>
  </aircraftData>
  <aircraftData>
    <aircraftID>N02061</aircraftID>
    <pilot>Jane D.</pilot>
    <speed>132.00</speed>
    <altitude>13008</altitude>
    <heading>264.54</heading>
    <latitude>19.510083</latitude>
    <longitude>-153.950114</longitude>
    <status>In flight</status>
    <datetime>1589962042</datetime>
  </aircraftData>

Das abgeleitete Schema ist nachfolgend abgebildet:

Resultierende Seite "Schema bestätigen" mit festgelegtem Stammelement

Reduzieren

Mit dem Parameter Reduzieren wird festgelegt, ob geschachtelter XML-Code auf mehrere Felder aufgeteilt werden soll. Die Benennung dieser neuen Felder erfolgt, indem an den Namen des übergeordneten Elements auf höherer Ebene der Name des Unterelements mit einem Unterstrich angehängt wird. Im folgenden Beispiel enthält ein location-Element zwei Unterelemente: latitude und longitude. Durch Reduzieren wird das location-Element in die zwei Felder location_latitude und location_longitude unterteilt.

Beim Anwenden von "Reduzieren" kann der XML-Code mit mehreren Ebenen geschachtelt werden. In den neuen Feldnamen nach der Reduzierung werden einfach die Objektnamen mit einem Unterstrich angehängt, bis das Unterelement auf unterster Ebene erreicht wird.

Achten Sie im folgenden XML-Beispielcode auf die Elemente codes und location:

<?xml version="1.0" encoding="UTF-8"?>
<airportData>
  <airport>
    <name>John F. Kennedy Int. Airport</name>
    <codes>
      <IATA>JFK</IATA>
      <ICAO>KJFK</ICAO>
    </codes>
    <status>Operational</status>
    <date>1589932800</date>
    <location>
      <latitude>40.643585</latitude>
      <longitude>-73.781927</longitude>
    </location>
  </airport>
  <airport>
    <name>Los Angeles Int. Airport</name>
    <codes>
      <IATA>LAX</IATA>
      <ICAO>KLAX</ICAO>
    </codes>
    <status>Delayed</status>
    <date>1589932800</date>
    <location>
      <latitude>33.942619</latitude>
      <longitude>-118.420942</longitude>
    </location>
  </airport>
</airportData>

Wenn airport als Stammelement angegeben wurde und das Kontrollkästchen Reduzieren aktiviert ist, wird der obige XML-Beispielcode wie folgt verarbeitet, wobei die Unterelemente codes und location in die jeweiligen Felder unterteilt werden:

<airport>
    <name>John F. Kennedy Int. Airport</name>
    <codes_IATA>JFK</codes_IATA>
    <codes_ICAO>KJFK</codes_ICAO>
    <status>Operational</status>
    <date>1589932800</date>
    <location_latitude>40.643585</location_latitude>
    <location_longitude>-73.781927</location_longitude>
  </airport>
  <airport>
    <name>Los Angeles Int. Airport</name>
    <codes_IATA>LAX</codes_IATA>
    <codes_ICAO>KLAX</codes_ICAO>
    <status>Delayed</status>
    <date>1589932800</date>
    <location_latitude>33.942619</location_latitude>
    <location_longitude>-118.420942</location_longitude>
  </airport>

Das Schema wird dann wie im Folgenden abgebildet erfasst:

Seite "Schema bestätigen" nach dem Reduzieren des XML-Codes

Reduzierungsausnahmen

Mit dem Parameter Reduzierungsausnahmen können Sie XML-Elementnamen angeben, die als jeweils einzelnes Zeichenfolgenelement erhalten bleiben und nicht in einzelne Felder unterteilt werden sollen.

Betrachten Sie den folgenden XML-Beispielcode:

<?xml version="1.0" encoding="UTF-8"?>
<airportData>
  <airport>
    <name>John F. Kennedy Int. Airport</name>
    <codes>
      <IATA>JFK</IATA>
      <ICAO>KJFK</ICAO>
    </codes>
    <status>Operational</status>
    <date>1589932800</date>
    <location>
      <latitude>40.643585</latitude>
      <longitude>-73.781927</longitude>
    </location>
  </airport>
  <airport>
    <name>Los Angeles Int. Airport</name>
    <codes>
      <IATA>LAX</IATA>
      <ICAO>KLAX</ICAO>
    </codes>
    <status>Delayed</status>
    <date>1589932800</date>
    <location>
      <latitude>33.942619</latitude>
      <longitude>-118.420942</longitude>
    </location>
  </airport>
</airportData>

Wenn airport als Stammelement angegeben wurde, das Kontrollkästchen Reduzieren aktiviert ist und für Reduzierungsausnahme codes festgelegt ist, wird der obige XML-Beispielcode wie unten gezeigt verarbeitet. Sie können sehen, dass für das Element codes keine Unterteilung durch Reduzierung erfolgt ist. IATA und ICAO werden als Unterelemente beibehalten.

<airport>
    <name>John F. Kennedy Int. Airport</name>
    <codes>
      <IATA>JFK</IATA>
      <ICAO>KJFK</ICAO>
    </codes>
    <status>Operational</status>
    <date>1589932800</date>
    <location_latitude>40.643585</location_latitude>
    <location_longitude>-73.781927</location_longitude>
  </airport>
  <airport>
    <name>Los Angeles Int. Airport</name>
    <codes>
      <IATA>LAX</IATA>
      <ICAO>KLAX</ICAO>
    </codes>
    <status>Delayed</status>
    <date>1589932800</date>
    <location_latitude>33.942619</location_latitude>
    <location_longitude>-118.420942</location_longitude>
  </airport>

Das Schema wird dann wie im Folgenden abgebildet erfasst:

Resultierende Seite "Schema bestätigen", wenn der XML-Code reduziert ist und das Feld "codes" von der Reduzierung ausgenommen wurde

Überlegungen und Beschränkungen

Beim Arbeiten mit Daten im XML-Format in Velocity sind einige wichtige Überlegungen und Beschränkungen zu berücksichtigen.

Enthalten Ihre XML-Daten geschachtelte Unterelemente?

Für XML ist eine Elementhierarchie, die mit einem Stammelement beginnt und endet, erforderlich. Unter einem Stammelement kann sich eine beliebige Anzahl von Elementen und Unterelementen befinden. Derzeit leitet Velocity das Schema von den primären Elementen ab, die sich unter dem angegebenen Stammelement befinden. Zusätzliche Unterelemente, die sich unter den primären Elemente befinden, werden als verkettete Zeichenfolgen verarbeitet. Die weitere Verarbeitung dieser Zeichenfolgen kann mit Analysewerkzeugen erfolgen. Den Parameter Stammelement sollten Sie verwenden, um ein neues Stammelement in Ihrem XML-Dokument zu definieren.

Sind die XML-Stichproben für das gesamte Schema repräsentativ?

In einem XML-Dokument weisen Elemente mit demselben Namen nicht unbedingt dieselben Unterelemente auf. Dies muss beachtet werden, wenn Sie einen Feed oder eine Datenquelle auf XML-Basis konfigurieren, bearbeiten oder verwenden. Velocity entnimmt aus dem Daten-Stream oder den Datendateien Stichproben, um daraus das Datenformat und Schema abzuleiten. Wenn keine der zurückgegebenen Stichproben XML-Elemente enthält, da die Stichproben ein anderes Schema aufweisen, werden diese Felder aus dem Feed- oder Datenquellenschema ausgelassen.

Größe der XML-Datei

Bei der Erfassung von XML-Dateien empfiehlt sich eine Dateigröße von unter 100 MB. Wenn Sie eine größere Datenmenge erfassen müssen, wird empfohlen, die Dateien in Dateien mit einer Größe von jeweils unter 100 MB aufzuteilen.