XML

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:

Optionen für XML-Konfiguration

Beim Konfigurieren eines Feeds oder einer Datenquelle wird anhand von Datenstichproben 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

Der Parameter Stammelement gibt das Stammelement der XML-Struktur an, in der sich die Nachrichten befinden. Als Stammelement muss ein Objekt angegeben sein, dessen Unterelemente Attribute sind. Lassen Sie diesen Parameter leer, 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>

Die Ableitung des Schemas in Velocity wird unten dargestellt:

Resultierende Seite "Schema bestätigen" mit festgelegtem Stammelement "aircraftData".

Reduzieren

Mit dem Parameter Reduzieren wird festgelegt, ob geschachtelter XML-Code auf mehrere Felder aufgeteilt wird. 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 das Element location 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 die Objektnamen mit einem Unterstrich angehängt, bis das Unterelement auf unterster Ebene erreicht wird.

Betrachten Sie den folgenden XML-Beispielcode, insbesondere 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 in Velocity 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.

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 im Parameter Stammelement angegeben wurde, der Parameter Reduzieren aktiviert wurde und für den Parameter Reduzierungsausnahmen der Wert codes angegeben wurde, wird der obige XML-Beispielcode wie unten gezeigt behandelt. Sie können sehen, dass für das Element codes keine Unterteilung durch Reduzierung erfolgt. 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 in Velocity erfasst:

Die Seite "Schema bestätigen", die aus dem reduzierten XML-Code resultiert, zeigt, dass das Feld "codes" von der Reduzierung ausgenommen wurde.

Arrays reduzieren

Der Parameter Arrays reduzieren gibt an, ob Arrays auf mehrere Felder reduziert werden sollen. Die Benennung neuer Felder erfolgt, indem der Name des Array-Elements mit einem Unterstrich und die Namen der Elemente im Array-Element angehängt werden. Beim Anwenden von "Reduzieren" auf Arrays von Elementen kann der XML-Code mit mehreren Ebenen geschachtelt werden. In den neuen Feldnamen nach der Reduzierung wird die Zahl der Array-Elemente mit einem Unterstrich angehängt, bis das unterste Element erreicht wird.

Zum Beispiel weist der folgende XML-Beispielcode das tags-Array-Element 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>
		<tags>
			<tag n="0">boeing</tag>
			<tag n="1">vtol</tag>
			<tag n="2">glider</tag>
		</tags>
	</aircraftData>
</flight>

Wenn aircraftData im Parameter Stammelement angegeben und der Parameter Arrays reduzieren aktiviert wurde, wird der obige XML-Beispielcode wie folgt behandelt. Beachten Sie, dass die Elemente im tags-Element in die jeweiligen Felder unterteilt werden:

<?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>
		<tags_tag_0_n>0</tags_tag_0_n>
		<tags_tag_0>boeing</tags_tag_0>
		<tags_tag_1_n>1</tags_tag_1_n>
		<tags_tag_1>vtol</tags_tag_1>
		<tags_tag_2_n>2</tags_tag_2_n>
		<tags_tag_2>glider</tags_tag_2>
	</aircraftData>
</flight>

Das Schema wird dann wie im Folgenden abgebildet in Velocity erfasst:

Die resultierende Seite "Schema bestätigen" zeigt, dass die tags-Felder in mehrere Felder unterteilt wurden.

Array-Reduzierungsausnahmen

Mit dem Parameter Array-Reduzierungsausnahmen können Sie einen oder mehrere XML-Array-Namen angeben, die das letzte Element im Array zurückgeben und nicht in mehrere Felder unterteilt werden. Betrachten Sie den folgenden XML-Beispielcode:

<?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>
		<tags>
			<tag n="0">boeing</tag>
			<tag n="1">vtol</tag>
			<tag n="2">glider</tag>
		</tags>
		<setting>
			<value>3</value>
			<value>2</value>
			<value>1</value>
		</setting>
	</aircraftData>
</flight>

Wenn der Parameter Arrays reduzieren aktiviert und der Wert setting_value für den Parameter Array-Reduzierungsausnahmen angegeben ist, wird der obige XML-Beispielcode wie unten gezeigt behandelt. Im setting-Array wird nur das letzte Element im Array zurückgegeben. Um festzulegen, dass mehrere Arrays von der Reduzierung ausgenommen werden sollen, trennen Sie die Werte im Parameter Array-Reduzierungsausnahmen durch Kommas.

<?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>
		<tags_tag_0_n>0</tags_tag_0_n>
		<tags_tag_0>boeing</tags_tag_0>
		<tags_tag_1_n>1</tags_tag_1_n>
		<tags_tag_1>vtol</tags_tag_1>
		<tags_tag_2_n>2</tags_tag_2_n>
		<tags_tag_2>glider</tags_tag_2>
		<setting>
			<value>1</value>
		</setting>
	</aircraftData>
</flight>

Das Schema wird dann wie im Folgenden abgebildet in Velocity erfasst:

Die resultierende Seite "Schema bestätigen" zeigt, dass das Feld "setting_value" das letzte Element im Array zurückgibt.

Überlegungen und Beschränkungen

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

XML-Daten mit geschachtelten Unterelementen

Für XML ist eine Elementhierarchie, die mit einem Stammelement beginnt und endet, erforderlich. Unter einem Stammelement kann sich eine beliebige Anzahl von zusätzlichen 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 von Velocity erfolgen. Beispielsweise können Sie mit dem Parameter Stammelement ein neues Stammelement im XML-Dokument definieren.

XML-Stichproben im Vergleich zum gesamten Schema

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 zu ermitteln. 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 von XML-Dateien

Beim Import von XML-Dateien in Velocity empfiehlt sich eine Dateigröße von unter 100 MB. Sind die Dateien größer als 100 MB pro Datei, sollten Sie separate Dateien erstellen, die jeweils kleiner als 100 MB sind.