Skip to content

Comment utiliser DATEX II

Florimond Manca edited this page Jan 9, 2023 · 10 revisions

Le standard DATEX II peut être un peu intimidant à première vue. Cette documentation a pour objectif de vous l'approprier.

Généralités

DATEX II est un standard de format d'échange de données au format XML pour le trafic routier.

La version 3.2 du standard a ajouté un schéma de réglementation routière : TrafficRegulation.

DiaLog utilise ce schéma comme format d'échange de données avec les services numériques d'aide au déplacement.

Démarrer avec le XML

On l'a dit, DATEX II est un format XML.

Si, comme nous, vous aviez plutôt l'habitude d'échanger des données JSON, cela pourrait vous intimider : allez-vous devoir vous plonger dans le monde de SOAP, J2E, et autre bus MOM ? Restons calmes. En effet, DATEX II baigne dans cet environnement-là (la documentation Developers' corner ne mentionne que JAXB, l'outil Java pour lier son code à du XML), pour nos besoins, vous n'aurez pas besoin de vous reconvertir au Java.

Il va en revanche vous falloir quelques bases sur le XML.

Les bases de XML

Commencez par ici : Learn XML in Y Minutes.

  • Cette petite page vous montrera les bases de la syntaxe XML.
  • Vous devriez en sortir à l'aise sur ces notions :
    • Elément
    • Attribut
    • Noeuds enfants, nesting
    • Document bien formé (wellformed document).

C'est bon ? Alors voici un exemple de document XML. Que décrit-il ?

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
  <book category="COOKING">
    <title lang="en">Everyday Italian</title>
    <author>Giada De Laurentiis</author>
    <year>2005</year>
    <price>30.00</price>
  </book>
  <book category="CHILDREN">
    <title lang="en">Harry Potter</title>
    <author>J K. Rowling</author>
    <year>2005</year>
    <price>29.99</price>
  </book>
  <book category="WEB">
    <title lang="en">Learning XML</title>
    <author>Erik T. Ray</author>
    <year>2003</year>
    <price>39.95</price>
  </book>
</bookstore>

On pourrait dire qu'il décrit une bibliothèque contenant 3 livres. Chaque livre a une catégorie, ainsi qu'un titre, un auteur, une année de publication, et un prix.

Vu de loin, XML ressemble à HTML. Mais XML est différent de HTML. Contrairement à HTML, XML ne décrit pas comment afficher des données ; il décrit les données elles-mêmes.

XML fournit en fait un cadre complet pour le transport de données sur le Web.

Utiliser XML dans son éditeur de texte

Passons à la pratique :

  • Démarrez votre éditeur de texte favori. Assurez-vous qu'il dispose d'outils ou d'extensions adéquates pour travailler avec XML.
  • Collez le XML ci-dessus dans un fichier bookstore.xml.

Voici alors quelques petits exercices :

  • Essayez d'ajouter un 4ème livre de votre choix.
  • Comment pourrait-on ajouter une information sur la maison d'édition des livres ?

Pour aller plus loin, parcourez le tutoriel XML du W3C.

Schémas XSD

Un schéma XSD (pour Schema Definition Language) permettent de définir le schéma auquel doit se conformer un message XML. En quelque sorte, XSD est à XML ce que JSONSchema est à JSON.

Là aussi, le meilleur apprentissage est probablement la pratique.

Alors suivez le tutoriel XSD du W3C.

Vous devriez en sortir à l'aise sur les notions suivantes :

  • Définir un namespace dans le fichier XSD : xmlns et targetNamespace ;
  • Utiliser un schéma XSD dans un fichier XML : xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance", xmlns="{namespace}" et xsi:schemaLocation="{namespace} {fichier.xsd}" ;
  • Utiliser un schéma XSD par alias : xmlns:monalias="{namespace}" puis référencer les éléments par <monalias:un-element-exemple> ;
  • Définir un élément avec <xs:element> ;
  • Définir un objet avec <xs:element>, <xs:complexType> et <xs:sequence> ;
  • Définir une liste avec <xs:element>, <xs:complexType>, <xs:sequence> et <xs:element minOccurs="..." maxOccurs="..."> ;
  • Définir un attribut avec <xs:attribute> ; Où faut-il le placer dans un <xs:complexType> ?
    Réponse Directement en enfant du xs:complexType, et xs:sequence.
  • Définir un enum avec <xs:simpleType>, <xs:restriction> et <xs:enumeration> ;

Faites alors l'exercice :

  • Quel schéma XSD pourrait-on proposer pour le bookstore.xml ?
  • Comment faut-il modifier bookstore.xml pour que l'élément racine <bookstore> soit validé avec ce schéma ?
  • Modifier bookstore.xml pour qu'il utilise les éléments de bookstore.xsd avec un alias b, par exemple <b:bookstore>.
Cliquer pour voir une solution

books.xsd :

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<xs:schema
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns="https://example.org"
  targetNamespace="https://example.org"
  elementFormDefault="qualified"
>
  <xs:simpleType name="CategoryEnum">
    <xs:restriction base="xs:string">
      <xs:enumeration value="WEB"></xs:enumeration>
      <xs:enumeration value="COOKING"></xs:enumeration>
      <xs:enumeration value="CHILDREN"></xs:enumeration>
      <xs:enumeration value="GEOGRAPHY"></xs:enumeration>
    </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="Book">
    <xs:sequence>
      <xs:element name="title">
        <xs:complexType>
          <xs:simpleContent>
            <xs:extension base="xs:string">
              <xs:attribute name="lang" type="xs:string"></xs:attribute>
            </xs:extension>
          </xs:simpleContent>
        </xs:complexType>
      </xs:element>
      <xs:element name="author" type="xs:string"></xs:element>
      <xs:element name="year" type="xs:gYear"></xs:element>
      <xs:element name="price" type="xs:float"></xs:element>
    </xs:sequence>
    <xs:attribute name="category" type="xs:string"></xs:attribute>
  </xs:complexType>

  <xs:complexType name="Bookstore">
    <xs:sequence>
      <xs:element name="book" type="Book" minOccurs="0" maxOccurs="unbounded"></xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="bookstore" type="Bookstore"></xs:element>
</xs:schema>

bookstore.xml :

<?xml version="1.0" encoding="UTF-8"?>
<bookstore
  xmlns="https://example.org"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="https://example.org bookstore.xsd"
>
    <!-- ... -->
</bookstore>

DATEX II

DATEX II et XML

Une fois les bases du XML assimilées, vous devriez mieux pouvoir naviguer dans le standard DATEX II.

En effet, tout compte fait, DATEX II fournit essentiellement un ensemble de schémas XSD. Ces schémas permettent de valider qu'un contenu XML est conforme au standard.

Nous avons ajouté les schémas XSD que DiaLog utilise dans spec/datex2.

Voici à nouveau quelques exercices :

  • Inspectez example.xml. De quel type de publication DATEX II s'agit-il ?
  • Modifiez le fichier pour que les éléments issus de http://datex2.eu/schema/3/common soient utilisés non plus avec com:{élément} mais c:{élément}.
  • À quoi ressemblerait un fichier XML qui décrit une SituationPublication ?

Obtenir les schémas XSD

Malheureusement, la page téléchargements de DATEX II ne fournit pas des schémas XSD valides. Arrivez-vous à savoir pourquoi ? Indice : les schémas utilisent des alias non-définis...

Par ailleurs, cette page ne fournit que les fichiers XSD individuels, mais certains schémas dépendent eux-mêmes d'autres schémas.

La solution est de recourir au Webtool fourni par DATEX II pour générer la sous-partie de DATEX II qui nous intéresse.

Si d'aventure vous deviez récupérer à nouveau ces schémas, voici comment procéder.

  • Ouvrir le Webtool.
  • Dans "1. Source", choisir V3.3 DATEX II.
  • Cliquer sur "Next" jusqu'à arriver à l'écran "5. Sélection".
  • Dans "5. Selection", vérifier que seul TrafficRegulationPublication est coché, puis cliquer sur "Next".
  • Dans "6. Options", s'assurer que XML est coché, puis cliquer sur "Next" pour télécharger le .zip avec les schémas XSD.

Avec DATEX II, comment représenter...

Une circulation interdite

Une circulation alternée

Une circulation réduite

Une localisation

Des informations complémentaires sur la ou les voies concernées

Dans DATEX II, les informations liées au réseau routier peuvent être spécifiées dans PointLocation ou LinearLocation

DATEII_3_LocationReferencing.xsd
> PointLocation | LinearLocation (extends NetworkLocation)
  > supplementaryPositionalDescription: SupplementaryPositionalDescription
    > carriageway: Carriageway
      > carriageway*: enum
      > originalNumberOfLanes?: int
      > lane: Lane[]
        > laneNumber?: int
        > laneUsage?: enum (allLanesCompleteCarriageway, leftLane, middleLane, rightLane, emergencyLane, ...)
    > roadInformation: RoadInformation[]
      > roadDestination?: str (ex: "Lille")
      > roadName?: str (ex: "Autoroute du Nord")
      > roadNumber?: str (ex: "A1")

Références

Ces différentes ressources vous permettront d'en savoir plus sur DATEX II et les composants utilisés dans le cadre de DiaLog.

XML

Tutoriels

  • XML Tutorial, w3chools.com. (Notamment les sections "XML Tutorial", "XSD Schema" et "XSD Data Type" dans la barre latérale.)

DATEX II

Introductions

Documentation officielle

Clone this wiki locally