XML es un lenguaje de marcado basado en texto común. ArcGIS Velocity puede incorporar datos de observación de IoT expresados como XML desde diversas fuentes.
XML se admite como un formato de datos para los siguientes tipos de feed y fuentes de datos:
- Feeds: AWS IoT, Azure Event Hub, Azure Service Bus, HTTP Poller, HTTP Receiver, Kafka , MQTT, RabbitMQ, WebSocket.
- Fuentes de datos: Amazon S3, Azure Blob Storage y HTTP Poller.
Opciones de configuración de XML
Al configurar un feed o una fuente de datos, se produce un muestreo de datos para determinar el tipo de datos que se está procesando. Si el muestreo determina que los datos son XML, pueden especificarse propiedades adicionales relacionadas con la configuración de XML.
Elemento raíz
Si procede, el parámetro Elemento raíz especifica el elemento raíz de la estructura XML en la que se encuentran los mensajes. El elemento raíz debe identificar un objeto cuyos subelementos sean atributos. Deje este parámetro en blanco si la estructura XML contiene todos sus mensajes debajo de la raíz del documento XML.
Por ejemplo, considere los siguientes datos XML de muestra con varios elementos:
<?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 se especificó un elemento raíz de aircraftData, Velocity solo integrará los siguientes datos:
<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>
A continuación se ilustra la derivación del esquema en Velocity:
Aplanar
El parámetro Aplanar determina si algún XML anidado se dividirá en campos separados. Estos nuevos campos se nombran al incorporar subelementos con un guion bajo en el nivel más alto o principal o elemento. En el ejemplo siguiente, el elemento location contiene dos subelementos: latitude y longitude. Si se aplana, el elemento location se divide en dos campos: location_latitude y location_longitude.
Si se aplana, el XML puede anidarse con varios niveles de profundidad. Los nuevos nombres de campo aplanados incorporan nombres de objeto con un guion bajo hasta alcanzar el subelemento de nivel más profundo.
Por ejemplo, considere los siguientes datos XML de muestra, en concreto, los elementos codes y 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 se especificó airport como el elemento raíz y se marcó la casilla de verificación Aplanar, el XML de muestra anterior se procesa de la siguiente manera, donde los subelementos codes y location se dividen en los respectivos campos:
<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>
El esquema se incorpora en Velocity como se ilustra abajo:
Exenciones de aplanamiento
El parámetro Exenciones de aplanamiento permite especificar uno o varios nombres de elemento XML que se dejarán como un único elemento de cadena de caracteres y no se dividirá en campos separados.
Considere el siguiente XML de muestra:
<?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 se especifica airport en el parámetro Elemento raíz, el parámetro Aplanar se marca y se especifica el valor del parámetro Exenciones de aplanamiento de codes; el XML de ejemplo anterior se tratará como se ilustra a continuación. Tenga en cuenta que el elemento codes no se ha dividido con el aplanamiento y que IATA y ICAO se mantienen como subelementos.
<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>
El esquema se incorpora en Velocity como se ilustra abajo:
Aplanar matrices
El parámetro Aplanar matrices especifica si las matrices se aplanan en campos separados. Los campos nuevos se nombran agregando al nombre del elemento de matriz un guion bajo y el nombre de los elementos del elemento de matriz. Al aplanar matrices de elementos, el XML se puede anidar con varios niveles de profundidad. Los nuevos nombres de campo aplanados agregan el número de elementos de matriz con un guion bajo hasta llegar al elemento más profundo.
Por ejemplo, el siguiente XML de muestra presenta el elemento de matriz 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 se especifica aircraftData en el parámetro Elemento raíz y el parámetro Aplanar raíces se marca, el XML de ejemplo anterior se procesará como sigue. Observe que los elementos del elemento tags están divididos en los campos correspondientes:<?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>
El esquema se incorpora en Velocity como se ilustra abajo:
Exenciones de aplanamiento de matrices
El parámetro Exenciones de aplanamiento de matrices permite especificar uno o más nombres de matrices XML que devuelven el último elemento de la matriz en lugar de dividirse en campos separados. Considere el siguiente XML de muestra:<?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 el parámetro Aplanar matrices está marcado y se especifica el valor del parámetro Exenciones de aplanamiento de matrices de setting_value, el XML de muestra anterior se procesa como se ilustra a continuación. En la matriz setting, solo se devuelve el último elemento de la matriz. Para indicar que varias matrices deben estar exentas de aplanamiento, utilice comas en el parámetro Exenciones de aplanamiento de matrices para separar los valores.<?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>
El esquema se representa en Velocity como se ilustra abajo:
Consideraciones y limitaciones
Al trabajar con datos formateados XML en Velocity, existen varias consideraciones y limitaciones importantes.
Datos XML con subelementos anidados
XML requiere una jerarquía de elementos que comienza y finaliza con un elemento raíz. Bajo un elemento de raíz puede haber un número no especificado de elementos y subelementos adicionales. Actualmente, Velocity deriva el esquema de los elementos principales encontrados debajo de la raíz especificada. Cualquier subelemento adicional debajo de los elementos principales se maneja como cadenas concatenadas. El procesamiento adicional de las cadenas de caracteres se puede realizar utilizando herramientas de análisis de Velocity. Por ejemplo, puede utilizar el parámetro Elemento raíz para definir una nueva raíz en el documento XML.
Muestras de XML comparadas con todo el esquema
En un documento XML, los elementos que comparten un nombre idéntico no siempre tienen los mismos subelementos. Esto tiene implicaciones al configurar primero, editar o consumir finalmente un feed o fuente de datos basados en XML. Velocity muestrea el flujo de datos o los archivos para determinar el formato y el esquema de los datos. Si todas las muestras devueltas en el proceso de muestreo carecen de elementos XML porque las muestras tienen un esquema diferente, los campos se omiten del esquema del feed o de los datos de origen.
Tamaño de archivo XML
Una buena práctica consiste en mantener el tamaño de los archivos XML que se importan en Velocity por debajo de 100 MB por archivo. Si los archivos tienen más de 100 MB, se recomienda crear archivos separados que tengan menos de 100 MB cada uno.