XML

XML est un langage de marquage textuel courant. ArcGIS Velocity peut ingérer des données d’observation IoT exprimées au format XML à partir de nombreuses sources.

Le format de données XML est pris en charge pour les types de flux et de source de données suivants :

Options de configuration XML

Lors de la configuration d’un flux ou d’une source de données, un échantillonnage des données est effectué pour déterminer le type des données ingérées. Si, au cours de l’échantillonnage, le format de données XML est identifié, d’autres propriétés relatives à la configuration XML peuvent être spécifiées.

Élément racine

Le paramètre Root element (Élément racine) spécifie, si applicable, l’élément racine de la structure XML dans laquelle se trouve les messages. L’élément racine doit identifier un objet dont les sous-éléments sont des attributs. Laissez ce paramètre vide si la structure XML contient tous les messages sous la racine du document XML.

Prenons les données d’échantillon XML suivantes, comportant plusieurs éléments :

<?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>

Si un élément racine de aircraftData est spécifié, seules les données suivantes sont ingérées par Velocity :

<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>

La dérivation de structure dans Velocity est illustrée ci-après.

Page Resulting confirm schema (Confirmer la structure résultante) avec l’élément racine aircraftData spécifié.

Aplatir

Le paramètre Flatten (Aplatir) détermine si les objets XML imbriqués doivent être répartis sur plusieurs champs. Le nom de ces nouveaux champs est créé en ajoutant des sous-éléments avec un trait de soulignement à l’élément de niveau supérieur ou parent. Dans l’exemple suivant, l’élément location contient deux sous-éléments : latitude et longitude. Si l’élément location est aplati, il est divisé en deux champs, location_latitude et location_longitude.

Lors de l’aplatissement, les objets XML peuvent être imbriqués avec plusieurs niveaux de profondeur. Les noms des nouveaux champs sont créés en ajoutant un trait de soulignement aux noms des objets, jusqu’à ce que le sous-élément le plus profond soit atteint.

Soit l’échantillon de XML suivant, à savoir, les éléments codes et 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>

Si airport est spécifié comme élément racine et que la case Flatten (Aplatir) est cochée, l’échantillon XML ci-avant est traité comme suit, avec les sous-éléments codes et location divisés en champs correspondants :

<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>

La structure est ingérée dans Velocity comme suit :

Page Resulting confirm schema (Confirmer la structure résultante) du XML aplati

Flattening exemptions (Exceptions d’aplatissement)

Le paramètre Flattening exemptions (Exceptions d’aplatissement) permet de spécifier un ou plusieurs noms d’élément XML à conserver en tant qu’élément de chaîne unique, sans les diviser en champs distincts.

Examinons l’échantillon XML suivant :

<?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>

Si airport est spécifié dans le paramètre Root element (Élément racine), que le paramètre Flatten (Aplatir) est coché et que le paramètre Flattening exemptions (Exceptions d’aplatissement) a pour valeur codes, l’échantillon de XML ci-avant est traité comme suit : Notez que l’élément codes n’est pas été divisé par l’aplatissement et que IATA et ICAO sont conservés en tant que sous-éléments.

<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>

La structure est ingérée dans Velocity comme suit :

La page Resulting confirm schema (Confirmer la structure résultante) du fichier XML aplati montre que le champ des codes est exclu de l’aplatissement.

Aplatir les matrices

Le paramètre Flatten arrays (Aplatir les matrices) indique si les matrices sont aplaties en champs distincts. Les noms des nouveaux champs sont créés en ajoutant au nom de l’élément de matrice un trait de soulignement et le nom des éléments dans l’élément de matrice. Lors de l’aplatissement de matrices d’éléments, le XML peut être imbriqué avec plusieurs niveaux de profondeur. Les noms des nouveaux champs aplatis ajoutent un trait de soulignement aux noms des éléments de matrice, jusqu’à ce que l’élément le plus profond soit atteint.

Par exemple, l’échantillon de code XML suivant montre l’élément de matrice tags :

<?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>

Si aircraftData est spécifié dans le paramètre Root element (Élément racine) et que le paramètre Flatten arrays (Aplatir les matrices) est coché, l’échantillon de XML ci-avant est traité comme suit : Notez que les éléments de l’élément tags sont divisés en champs respectifs :

<?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>

La structure est ingérée dans Velocity comme suit :

La page Resulting confirm schema (Confirmer la structure résultante) montre les champs de balises divisés en champs distincts.

Exceptions d’aplatissement de matrice

Le paramètre Array flattening exemptions (Exceptions d’aplatissement de matrice) permet de spécifier un ou plusieurs autres noms de matrice XML renvoyant le dernier élément de la matrice, plutôt que de la diviser en champs distincts. Examinons l’échantillon XML suivant :

<?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>

Si la case du paramètre Flatten arrays (Aplatir les matrices) est cochée et que le paramètre Array flattening exemptions (Exceptions d’aplatissement de matrice) a pour valeur setting_value, l’exemple de code XML ci-avant est traité comme illustré ci-après. Dans la matrice setting, seul le dernier élément de la matrice est renvoyé. Pour indiquer plusieurs matrices à dispenser d’aplatissement, séparez les valeurs par une virgule dans le paramètre Array flattening exemptions (Exceptions d’aplatissement de matrice).

<?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>

La structure est représentée dans Velocity comme suit :

La page Resulting confirm schema (Confirmer la structure résultante) montre que le champ setting_value renvoie le dernier élément de la matrice.

Considérations et limitations

Lorsque vous utilisez des données au format XML dans Velocity, vous devez prendre en compte certaines considérations et limitations importantes.

Données XML avec sous-éléments imbriqués

XML nécessite une hiérarchie d’éléments qui commence et s’achève avec un élément racine. Un élément racine peut contenir un nombre indéfini d’éléments et de sous-éléments supplémentaires. Actuellement, Velocity dérive sa structure des éléments principaux qui se trouvent sous la racine spécifiée. Les sous-éléments supplémentaires situés sous les éléments principaux sont traités comme des chaînes concaténées. Il est possible de traiter davantage ces chaînes à l’aide d’outils d’analyse de Velocity. Par exemple, vous pouvez utiliser le paramètre Root element (Élément racine) pour définir une nouvelle racine dans le document XML.

Échantillons XML comparés à l’ensemble de la structure

Dans un document XML, les éléments qui partagent un nom identique ne possèdent pas toujours les mêmes sous-éléments. Cela a des impacts lors de la configuration, de la mise à jour ou de l’utilisation initiale d’un flux ou d’une source de données XML. Velocity échantillonne le flux de données ou les fichiers de données pour déterminer le format et la structure des données. Si, dans tous les échantillons renvoyés par le processus d’échantillonnage, il manque des éléments XML car ces échantillons possèdent une structure différente, ces champs ne sont pas intégrés dans la structure du flux ou des données source.

Taille des fichiers XML

Il est recommandé que la taille des fichiers XML importés dans Velocity ne dépasse pas 100 Mo par fichier. Au-delà, il est recommandé de créer des fichiers distincts de moins de 100 Mo par fichier.