2010-09-01 5 views
1

Je suis en train de mettre en œuvre un service Web RESTful qui gère actuellement JSON et qui doit gérer XML. J'utilise Jackson pour marshaller automatiquement les objets Java vers et depuis JSON. Pour XML, j'ai besoin de définir un schéma, principalement parce qu'un client le veut. Avec de la chance, je peux remettre le schéma à JAXB et ne pas avoir à coder moi-même le XML.Schéma de XML ouvert

Une caractéristique est que le client peut définir des "propriétés personnalisées" sur une entité. Ceux-ci sont stockés mais non interprétés par le serveur; ils sont pour la commodité du programme client. Exemple JSON:

{"id":"abcde", 
"customProperties":{ 
    "foo":"bar", "rating":5, 
    "ridiculousExample":{"food":["green eggs","ham"], 
      "innerObject":{"name":"Bill","age":47}} 
    } 
} 

Vraisemblablement en XML cela ressemblerait à ceci:

<whatever> 
    <id>abcde</id> 
    <customProperties> 
    <customProperty> 
     <foo>bar</foo> 
    </customProperty> 
    <customProperty> 
     <rating>5</rating> 
    </customProperty> 
    <customProperty> 
     <ridiculousExample> 
     <food> 
      <foodItem>green eggs</foodItem> 
      <foodItem>ham</foodItem> 
     <food> 
     <innerObject> 
      <name>Bill</name> 
      <age>47</age> 
     </innerObject> 
     </ridiculousExample> 
    </customProperty> 
    </customProperties> 
</whatever> 

interne (en Java) un tableau JSON est juste un tableau, et un objet JSON est un HashMap. Nous pouvons générer du XML à partir de tableaux de hashmaps de tableaux en suivant les règles, ce qui nous permet de traduire ces propriétés personnalisées entre XML et JSON.

Y a-t-il un moyen dans XML Schema de spécifier des choses jusqu'à un certain point et de dire "à partir de maintenant c'est ouvert aussi longtemps que c'est du XML valide"?

Répondre

2

Oui, il suffit d'utiliser any:

<xs:element name="customProperty"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:any namespace="##any"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element>