Je suis en train de trouver la meilleure façon de mettre en œuvre la structure suivante pour le fichier XML en utilisant le Schéma XSD:séquence XSD avec condition particulière à la fin
<Vertice></Vertice>
<Edge></Edge>
...any number of Vertices and Edges between...
<Vertice></Vertice>
<Edge></Edge>
Il doit toujours contenir Start-Vertice, fin Vertice et un bord entre eux, mais éventuellement il peut contenir autant de sommets au milieu que nécessaire, chacun d'entre eux entouré par des bords (XML sera créé plus tard par JAXB sur la base de ce schéma). J'essayais d'utiliser quelque chose comme ça, mais ça ne compile pas. Y a-t-il un moyen approprié de l'implémenter?
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- declaration -->
<xs:complexType name="graphType">
<xs:sequence minOccurs="1" maxOccurs="unbounded">
<xs:element name="vertice" type="xs:string"/>
<xs:element name="edge" type="xs:string"/>
</xs:sequence>
<xs:element name="vertice" type="xs:string"/> <!-- this line is not working -->
</xs:complexType>
<!-- printing -->
<xs:element name="Graph" type="graphType"/>
</xs:schema>
J'ai aussi compris quelque chose comme ça, mais il n'a pas le droit d'utiliser une nouvelle fois le même nom, donc je aurais besoin de changer le nom de la dernière Vertice. Mais peut-être existe-t-il un moyen de contourner ce problème?
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- declaration -->
<xs:complexType name="graphType">
<xs:sequence>
<xs:sequence minOccurs="2" maxOccurs="unbounded">
<xs:element name="vertice" type="xs:string"/>
<xs:element name="edge" type="xs:string"/>
</xs:sequence>
<xs:element name="vertice-end" type="xs:string"/>
<!-- is there a workaround to repeat the name "vertice" for this element? -->
</xs:sequence>
</xs:complexType>
<!-- printing -->
<xs:element name="Graph" type="graphType"/>
</xs:schema>
Super, merci beaucoup - bien sûr, cela correspond au résultat dont j'avais besoin. Cependant, je ne vois pas pourquoi il n'a pas compilé quand l'élément vertice a été ajouté après la séquence et il l'a fait quand il était avant la séquence - une magie de XSD je suppose que je dois me souvenir :) Ou est-il simple explication de cela? – Piotr
En fait, un autre problème vient d'apparaître - La prochaine étape consistait à générer des classes Java en utilisant XJC, mais cela me donne une erreur. [ERROR] L'élément "vertice" apparaît dans plus d'une propriété. Si c'est pertinent, ma version XJC est 'xjc 2.2.8-b130911.1802'. Est-il possible d'appliquer une solution de contournement pour cela? – Piotr
Salut - en ce qui concerne votre premier commentaire, s'il vous plaît jeter un oeil sur le lien que j'ai fourni à la fin de la réponse, c'est l'explication pourquoi vous n'êtes pas autorisé à définir votre contenu comme vous l'avez fait. En ce qui concerne votre deuxième commentaire, je crois que vous devriez poser une nouvelle question. – potame