# JMRI: XML IO Servlet

Le servlet JMRI XML fournit un accès Web bi-directionnel aux services JMRI.

Le servlet vit dans le paquet jmri.web.servlet.xmlio , et fournit un accès Web au JMRI XML IO paquet. Par défaut, le serveur web JMRI enverra tout URL qui commence par/xmlio à ce servlet. Il liste tous les éléments connus d'un type spécifié, accepte des changements de la valeur/état des éléments, et répond avec valeur actuelle/état des éléments. Si envoyé une liste d'éléments avec des valeurs actuelles, il "surveillera" les changements de tous ces éléments, retournant les valeurs nouvelles.

Elément types complèments supportés :

- alimentation
- aiguillage
- capteurr
- tête signal
- mât signal
- mémoire
- itinéraire

Les types d'éléments de liste seule:

- Liste
- trame
- panneau
- métadata
- Chemin de fer

Le Régulateur est un cas unique, la syntaxe légèrement différente, soutient la lecture et les modifications, mais pas la liste ou la surveillance:

- Régulateur

Il y a plusieurs exemples de pages qui montrent comment cela peut être utilisé:

web/request.html
  Rend une seule requête XML pour tous les capteurs disponibles, et montre leur statut dans un tableau.
web/monitor.html
  utilise les requêtes temporisées pour surveiller l'état de tous les capteurs, la mise à jour d'une table lors de tout changement.
web/throttle.html
  Envoie une commande de vitesse pour une locomotive DCC sur le réseau quand une touche est enfoncée.
web/turnoutPanel.html
  Exemple d'un panneau de commande sur une page web.
web/turnoutMonitor.html
  Table Aiguillage plus complexes, avec des boutons pour mettre un aiguillage dévié ou droit.
web/JMRI_XMLIO_test.html
  Utile pour envoyer plusieurs commandes au serveur xmlio et voir les réponses.
web / JMRIMobile.html
  Utile le serveur xmlio pour récupérer des données à partir de JMRI, l'envoi et le suivi des changements des modificationsdes éléments.

S'il vous plaît noter que ce servlet a seulement été utilisé avec le Serveur Web JMRI, et peut ne pas fonctionner avec d'autres conteneurs de servlets. Nous nous sommes engagés à le faire fonctionner, cependant, entrer en contact avec les développeurs JMRI si vous rencontrez des problèmes.

## Format Demande

Le schéma XML est défini dans le document schéma xmlio.xsd .

Il ya aussi une syntaxe basée sur les attributs disponibles. (voir les exemples de l'état ci-dessous) Le serveur xmlio répond avec la même syntaxe que celle qu'utilise la demande.

Voici quelques exemple des demandes et réponses.

### Obtenir le statut des objets individuels

Demande:

    <xmlio>
      <item>
        <type>turnout</type>
        <name>IT12</name>
      </item>
      <item>
        <type>sensor</type>
        <name>West sensor</name>
      </item>
      <item>
        <type>power</type>
        <name>power</name>
      </item>
    </xmlio>

    <xmlio>
      <item>
        <type>turnout</type>
        <name>IT12</name>
        <value>2</value>
      </item>
      <item>
        <type>sensor</type>
        <name>West sensor</name>
        <value>4</value>
      </item>
      <item>
        <type>power</type>
        <name>power</name>
        <value>2</value>
      </item>
    </xmlio>

La "valeur" élément est insérée dans la demande, et puis est retournée comme réponse. Vous pouvez simplement tourner autour de la réponse et l'utiliser comme une autre demande. Si la "valeur" éléments est présente pour tous les articles, la réponse ne sera restituée que lorsque l'un ou plusieurs des état de l'élément inclus a changé pour quelque chose de différent.

### Obtenez tous les objets d'un type

Demande:

    <xmlio>
      <list>
        <type>sensor</type>
      </list>
    </xmlio>

Réponse:

    <xmlio>
      <item>
        <type>sensor</type>
        <name>IS1</name>
        <value>2</value>
      </item>
      <item>
        <type>sensor</type>
        <name>IS2</name>
        <value>4</value>
      </item>
      <item>
        <type>sensor</type>
        <name>West sensor</name>
        <value>2</value>
      </item>
    </xmlio>

La réponse peut être retournée et utilisée comme la prochaine requête.

### Régler le statut d'un objet

Demande:

    <xmlio>
      <item>
        <type>turnout</type>
        <name>IT12</name>
        <set>2</set>
      </item>
    </xmlio>

Réponse:

    <xmlio>
      <item>
        <type>turnout</type>
        <name>IT12</name>
        <value>2</value>
      </item>
    </xmlio>

L'élément "set" de la demande résulte de l'état fixé à la valeur donnée, et puis est retournée dans la réponse comme un élément de valeur avec la valeur correcte à ce point.

Toutes les écritures sont faites avant que les valeurs soient recueillies pour toute lecture, mais il n'y a aucune garantie que les conséquences de l'écrit soient propagées complètement.

### Définir le statut d'un objet (syntaxe basée sur les attributs)

### Contrôle un régulateur

Demande:

    <turnout name="IT12" set="2" />

Réponse:

    <turnout name="IT12" value="2" />

Un élément peut être utilisé pour contrôler un régulateur via le ThrottleManager DCC par défaut. La première utilisation alloue le régulateur, et tous les postérieurs utilisent les attributs présents: `<xmlio> <throttle> <adresse> 1234</address> <vitesse> 0,75</vitesse> <forward> true</forward> <F3> False</F3> </throttle> </Xmlio>` Un élément régulateur est retourné inchangé.

## Documents associés

C.F. K H Wolf, K Froitzheim, M Weber, Department of Distributed Systems, Université d'Ulm, "Interactive Video and Remote Control via the World Wide Web", dans "Lecture Notes in Computer Science", Springer, Berlin, 1996.
Auparavant dans le volume 7, numéro 5 de "Märklin Digital Newsletter", Dr T. Catherall Ed, Septembre/Octobre 1995, Page référencée réhébergée.