Bonjour, j'ai un petit problème sur la validation d'un XML schéma.
J'ai un schéma avec un élément de ce type, comportant un attribut de type xs:ID :
Et un élément "Fournisseur" fera référence à un élément du type ci-dessus, à l'aide d'un IDREF :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <xs:complexType name="typeClasse"> <xs:attribute name="id" type="xs:ID" use="required" /> </xs:complexType>
J'ai des contraintes sur la référence, notamment de la position de l'élément référencé dans le document. J'introduis donc un mécanisme key/keyref pour garantir le bon référencement :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <xs:complexType name="typeFournisseur"> <xs:attribute name="idref" type="xs:IDREF" use="required" /> </xs:complexType>
En validant le schéma avec Schéma Quality Checker d'IBM, il me trouve des warnings :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <xs:key name="idClasse" > <xs:selector xpath=".//Classe" /> <xs:field xpath="@id" /> </xs:key> <xs:keyref name="idClasseRefGeneralisation" refer="idClasse" > <xs:selector xpath=".//Classe/Relations/Generalisation/Fournisseur" /> <xs:field xpath="@idref" /> </xs:keyref>
Pour résumer (et pour les anglophobes ), il m'avertit que les 2 types, la clé et sa référence ne sont pas comptabiles, qu'ils devraient l'être ou être tous 2 dérivés d'un même type.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 There is no attribute matching the selector Xpath for which <xs:field xpath="@idref"/> defined in the keyRef evaluates to an element or an attribute declaration whose type is compatible with the type of an attribute evaluated by the corresponding field in the referenced Key, <xs:field xpath="@id"/> . Here type compatibility means that either both types should be equal or one should be a valid restriction of the other.
Par contre, en travaillant sur un exemple instanciant le schéma, mes références se font bien comme je le veux.
Est-ce ce que c'est Schema Quality Checker qui a des petits problèmes et que cette construction est valide comme je le pense, ou bien le problème se trouve dans mon code ?
Merci
Partager