Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1418 connectés 

  FORUM HardWare.fr
  Programmation
  XML/XSL

  Contraintes sur schéma XML

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Contraintes sur schéma XML

n°582929
Sigmund
Posté le 04-12-2003 à 11:33:44  profilanswer
 

Salut à tous,
 
J'ai réalisé un schéma XML qui représente une topologie réseau avec toute sorte d'informations dedans. Je vérifie déjà certaines contraintes mais il y en a certaines que j'aimerais pouvoir vérifier mais, jusqu'à présent, c'est sans grand succès...
 
1/ J'ai un élément de cette forme :

Code :
  1. <wireless range="45" speed="2"/>


où les deux attributs ne sont pas obligatoires. Cependant, j'aimerais pouvoir vérifier qu'au moins un des deux attributs est présent... Est-ce que cela est possible ?
 
2/ J'ai un autre élément de cette forme :

Code :
  1. <link id="0" from="135.89.2.22" to="135.89.2.23">
  2.    <mpls>
  3.     <srlg id="1"/>
  4.     <srlg id="2"/>
  5.    </mpls>
  6. </link>


où l'attribut "id" de "link" est une clé et où l'attribut "id" de "srlg" se réfère à un identifiant de lien. J'aimerais pouvoir également vérifier que les couples de la forme (id link, id srlg) sont uniques... Est-ce que cela est possible ?
 
Merci d'avance pour vos réponses.

mood
Publicité
Posté le 04-12-2003 à 11:33:44  profilanswer
 

n°582955
gilou
Modérateur
Modzilla
Posté le 04-12-2003 à 11:48:41  profilanswer
 

Sigmund a écrit :

Salut à tous,
 
J'ai réalisé un schéma XML qui représente une topologie réseau avec toute sorte d'informations dedans. Je vérifie déjà certaines contraintes mais il y en a certaines que j'aimerais pouvoir vérifier mais, jusqu'à présent, c'est sans grand succès...
 
1/ J'ai un élément de cette forme :

Code :
  1. <wireless range="45" speed="2"/>


où les deux attributs ne sont pas obligatoires. Cependant, j'aimerais pouvoir vérifier qu'au moins un des deux attributs est présent... Est-ce que cela est possible ?
 
2/ J'ai un autre élément de cette forme :

Code :
  1. <link id="0" from="135.89.2.22" to="135.89.2.23">
  2.    <mpls>
  3.     <srlg id="1"/>
  4.     <srlg id="2"/>
  5.    </mpls>
  6. </link>


où l'attribut "id" de "link" est une clé et où l'attribut "id" de "srlg" se réfère à un identifiant de lien. J'aimerais pouvoir également vérifier que les couples de la forme (id link, id srlg) sont uniques... Est-ce que cela est possible ?
 
Merci d'avance pour vos réponses.

Pour le 1 ca doit pouvoir se faire avec un outil integrant des possibilités de contraintes. J'irais voir du coté de http://relaxng.org/
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°583359
Sigmund
Posté le 04-12-2003 à 21:40:30  profilanswer
 

gilou a écrit :

Pour le 1 ca doit pouvoir se faire avec un outil integrant des possibilités de contraintes. J'irais voir du coté de http://relaxng.org/
A+,


 
OK, merci j'irai jeter un coup d'oeil...
 
Sinon, pour le 2, personne n'a une idée ?

n°583600
Sigmund
Posté le 05-12-2003 à 10:10:11  profilanswer
 

gilou a écrit :

Pour le 1 ca doit pouvoir se faire avec un outil integrant des possibilités de contraintes. J'irais voir du coté de http://relaxng.org/
A+,


 
J'ai regardé le lien que tu m'as donné. En fait, ce que j'aimerais pouvoir faire, c'est utiliser le langage XML Schema du W3C pour vérifier ces contraintes, et, d'après ce que j'ai pu lire, Relax NG est un autre langage de schéma XML...

n°583693
avander
Posté le 05-12-2003 à 11:37:14  profilanswer
 

Ca m'a l'air faisable avec une DTD et par extension en XSD (XML Schemas) mais j'ai jamais utilisé ce dernier...
 

n°583784
Sigmund
Posté le 05-12-2003 à 14:01:23  profilanswer
 

Avander a écrit :

Ca m'a l'air faisable avec une DTD et par extension en XSD (XML Schemas) mais j'ai jamais utilisé ce dernier...


 
Je le pense aussi mais plus je cherche et moins je trouve. J'ai beau éplucher les documents du W3C, je trouve rien qui parle de cela. Ils avaient bien mis un exemple qui répondait à ma deuxième question dans un de leur document mais il a été supprimé dans l'errata :D.
 
Sinon, tu ferais comment avec une DTD (ça pourrait peut-être m'aider quand même, on sait jamais ;)) ?

n°583818
avander
Posté le 05-12-2003 à 15:11:42  profilanswer
 

1/ Pour contourner le problème tu pourrait peut-être définir une valeur par défaut dans la DTD pour un des attributs, comme ceci :  
 

<!ATTLIST chapter
  id ID #REQUIRED
  creationDate CDATA '19800101'
  revisionDate CDATA '19800101'
  type CDATA #FIXED "chapter"
  layout ( portrait|landscape) "portrait"
 >


 
Pour celui qui crée l'xml l'attribut creationDate n'est pas obligatoire, si tu parse l'xml avec la DTD en cas d'absence tu obtiendras toujours l'attribut avec la valeur par défaut dedans. L'attribut layout est analogue sauf que la tu spécifies la liste des valeurs authorisées et entre " la valeur par défaut.  

n°583826
avander
Posté le 05-12-2003 à 15:25:53  profilanswer
 

2/ Si tu veut que l'id de link soit unique et que l'id de srlg pointe toujours vers un id de link qui existe, il te faut qq. chose comme ceci dans la DTD :  
 


 
 <!ELEMENT link ( mpls)>
 <!ATTLIST link
  id ID #REQUIRED>
...
 <!ELEMENT srlg ( #PCDATA)>
 <!ATTLIST srlg
  id IDREF #REQUIRED>
...


n°584019
Sigmund
Posté le 05-12-2003 à 19:54:43  profilanswer
 

Avander a écrit :

1/ Pour contourner le problème tu pourrait peut-être définir une valeur par défaut dans la DTD pour un des attributs...


 
En fait, je ne veux pas mettre une valeur par défaut. Je veux juste qu'au niveau des contraintes du schéma je puisse spécifier le nombre d'attributs minimum qu'un élément doit avoir pour être valide. Autrement dit, je veux pouvoir vérifier lors de la validation du fichier à l'aide d'un validateur classique que l'attribut speed est présent ou que l'attribut range est présent ou que les deux sont présents. Mettre une valeur par défaut ne m'aidera pas puisque je ne saurai pas dire au niveau de la validation que le créateur de la topologie a donné au moins un des deux attributs.
 

Avander a écrit a écrit :

2/ Si tu veut que l'id de link soit unique et que l'id de srlg pointe toujours vers un id de link qui existe...




 
Ca, je l'ai déjà. L'id de link est une clé et l'id de srlg pointe vers un id de link. Ce que je voudrais, c'est dire que les couples (id link, id srlg) sont uniques donc que les couples (0,1) et (0,2) sont uniques. Cela pourrait me servir à vérifier le fait que l'utilisateur n'a pas entré deux fois le même srlg pour un même link.
 
J'espère que mon explication est plus claire maintenant (quoique :D)... Merci pour ta réponse en tout cas.

n°584252
gilou
Modérateur
Modzilla
Posté le 06-12-2003 à 03:06:36  profilanswer
 

Bon apres y avoir reflechi a tete reposée...
 
Pour le 1:  
Tu ne peux pas exprimer celà avec XML Schema seulement. Mais si tu etends XML Schema avec des regles Schematron, tu peux exprimer ce type de contraintes.  
Ca donnerait dans ton cas:
[sans regles schematron]

Code :
  1. <xs:element name="wireless">
  2.     <xs:complexType>
  3.         <xs:attribute name="range" type="xs:string" use="optional"/>
  4.         <xs:attribute name="speed" type="xs:string" use="optional"/>
  5.     </xs:complexType>
  6. </xs:element>


 
[avec regles schematron]

Code :
  1. <xs:element name="wireless">
  2.     <xs:annotation>
  3.         <xs:appinfo>
  4.             <sch:pattern name="Au moins un des deux attributs presents" xmlns:sch="http://www.ascc.net/xml/schematron">
  5.                 <sch:rule context="wireless">
  6.                     <sch:assert test="@range | @speed">L'un des deux attributs range ou speed doit etre present sur l'élement wireless</sch:assert>
  7.                 </sch:rule>
  8.             </sch:pattern>
  9.          </xs:appinfo>
  10.      </xs:annotation>
  11.      <xs:complexType>
  12.          <xs:attribute name="range" type="xs:string" use="optional"/>
  13.          <xs:attribute name="speed" type="xs:string" use="optional"/>
  14.      </xs:complexType>
  15. </xs:element>


 
Pour Schematron est ses liens avec XML Schema, lire ceci: http://www.topologi.com/resources/ [...] paper.html
 
Pour le 2:  
Normalement ca se realise avec l'element key de XML Schema, qui implique une contrainte d'unicité:
 

Code :
  1. <xs:element name="srlg">
  2. .............
  3.     <xs:key name="couple">
  4.         <xs:selector xpath="."/>
  5.         <xs:field xpath="../../@id"/>
  6.         <xs:field xpath="@id"/>
  7.     </xs:key>
  8. </xs:element>


 
A+,


Message édité par gilou le 06-12-2003 à 03:09:39

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
mood
Publicité
Posté le 06-12-2003 à 03:06:36  profilanswer
 

n°584330
Sigmund
Posté le 06-12-2003 à 11:16:53  profilanswer
 

gilou a écrit :

Bon apres y avoir reflechi a tete reposée...
 
Pour le 1:  
Tu ne peux pas exprimer celà avec XML Schema seulement. Mais si tu etends XML Schema avec des regles Schematron, tu peux exprimer ce type de contraintes.


 
Ok merci pour le lien. J'ai regardé et ça a l'air vraiment intéressant cet outil.
 

gilou a écrit a écrit :

 
Pour le 2:  
Normalement ca se realise avec l'element key de XML Schema, qui implique une contrainte d'unicité:
 

Code :
  1. <xs:element name="srlg">
  2. .............
  3.     <xs:key name="couple">
  4.         <xs:selector xpath="."/>
  5.         <xs:field xpath="../../@id"/>
  6.         <xs:field xpath="@id"/>
  7.     </xs:key>
  8. </xs:element>






 
L'expression XPath ../ n'est pas supporté par XML Schema. J'avais déjà essayé cette possibilité avec la contrainte <unique> mais ça ne marchait pas non plus. J'ai quand même réessayer ta proposition avec deux validateurs différents mais le résultat est le même...
 
Sans vouloir abuser, j'ai une question supplémentaire. Dans mon schéma, j'ai un élément de la forme suivante :

Code :
  1. <lsp id="2">
  2.    ...
  3.    <type>Backup</type>
  4.    <backup>
  5.     ...
  6.    </backup>
  7.   </lsp>


avec id et type qui doivent obligatoirement être présents. type ne peut être égal qu'à Backup ou Primary. L'élément <backup>, lui, est optionnel. Est-ce qu'il y a moyen de vérifier avec XSD que si et seulement si le type est égal à Backup, alors l'élément <backup> est présent ? Sinon, je suppose, pour avoir parcouru le document dont tu m'as donné l'adresse, qu'il y a moyen avec Schematron ?
 
Merci d'avance.

n°584349
gilou
Modérateur
Modzilla
Posté le 06-12-2003 à 12:05:28  profilanswer
 

Sigmund a écrit :


L'expression XPath ../ n'est pas supporté par XML Schema. J'avais déjà essayé cette possibilité avec la contrainte <unique> mais ça ne marchait pas non plus. J'ai quand même réessayer ta proposition avec deux validateurs différents mais le résultat est le même...
 

.. est l'abbreviation xpath de parent::node() et ca devrait marcher.
Essayes alors: ancestor::link/attribute::id au lieu de ../../@id
(on remonte au premier ancetre de type link et on selectionne l'attribut id dessus).
 
EDIT: je viens de voir le pb: ce qui est admis ici est du restricted XPATH et pas du full XPATH: http://www.w3.org/TR/xmlschema-1/# [...] constraint
On ne peut pas remonter dans la hierarchie avec .. ou ancestor :/
Donc on est coincé (je comprends bien les raisons d'implementation sous jacentes qui sont a l'origine de cette restriction).
A priori, alors, pas de solution.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°584355
gilou
Modérateur
Modzilla
Posté le 06-12-2003 à 12:25:38  profilanswer
 

Sigmund a écrit :


 
 
Sans vouloir abuser, j'ai une question supplémentaire. Dans mon schéma, j'ai un élément de la forme suivante :

Code :
  1. <lsp id="2">
  2.    ...
  3.    <type>Backup</type>
  4.    <backup>
  5.     ...
  6.    </backup>
  7.   </lsp>


avec id et type qui doivent obligatoirement être présents. type ne peut être égal qu'à Backup ou Primary. L'élément <backup>, lui, est optionnel. Est-ce qu'il y a moyen de vérifier avec XSD que si et seulement si le type est égal à Backup, alors l'élément <backup> est présent ? Sinon, je suppose, pour avoir parcouru le document dont tu m'as donné l'adresse, qu'il y a moyen avec Schematron ?
 
Merci d'avance.


Ce que tu veux verifier, c'est que si le contenu de l'element type est la chaine backup alors on a aussi l'element backup??
en XML Schema je pense pas qu'on puisse faire (on ne doit pas pouvoir poser de contraintes sur le contenu d'un noeud texte non typé en XML Schema je pense)
Par contre, ca doit pouvoir se faire en Schematron sans trop de pb avec 2 regles.
Notes que ton modele est bizarre: pourquoi ne pas avoir cree un element "type" vide, support d'attribut a 2 valeurs, Backup ou Primary?
Bon, je tape ca assez a la bourre; j'y rejeterai un oeil ce soir.
A+,


Message édité par gilou le 06-12-2003 à 12:26:46

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°584441
Sigmund
Posté le 06-12-2003 à 13:51:38  profilanswer
 

gilou a écrit :


Donc on est coincé (je comprends bien les raisons d'implementation sous jacentes qui sont a l'origine de cette restriction).
A priori, alors, pas de solution.


 
C'est ce que je craignais :/. Sinon, je vois pas trop pourquoi ils ont restreint le XPath à ce point... Est-ce que tu penses que Schematron pourrait résoudre le problème ?
 

gilou a écrit a écrit :

 
Ce que tu veux verifier, c'est que si le contenu de l'element type est la chaine backup alors on a aussi l'element backup??




 
Exact.
 

gilou a écrit a écrit :

 
en XML Schema je pense pas qu'on puisse faire (on ne doit pas pouvoir poser de contraintes sur le contenu d'un noeud texte non typé en XML Schema je pense)
Par contre, ca doit pouvoir se faire en Schematron sans trop de pb avec 2 regles.




 
Ok merci. J'essayerai de le faire alors.
 

gilou a écrit a écrit :

 
Notes que ton modele est bizarre: pourquoi ne pas avoir cree un element "type" vide, support d'attribut a 2 valeurs, Backup ou Primary?
Bon, je tape ca assez a la bourre; j'y rejeterai un oeil ce soir.
A+,




 
Euh en fait, c'est mon deuxième schéma :D ! Donc il est possible que ce ne soit pas du tout optimal. Cependant, je ne comprends pas trop ce que tu veux dire. Voici ce que j'ai fais pour l'élément type :


<element name="type">
 <simpleType>
  <restriction base="string">
   <enumeration value="Primary"/>
   <enumeration value="Backup"/>
  </restriction>
 </simpleType>
</element>


 
C'est pas bon ?
 
Merci d'avance pour ta réponse.

n°584906
Sigmund
Posté le 07-12-2003 à 18:53:19  profilanswer
 

Up :bounce: !


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  XML/XSL

  Contraintes sur schéma XML

 

Sujets relatifs
Transformation XML/XSL -> HTML dans un web-browser (pas forcement IE)Réaliser un forum en XML
(XML/XSL également) Manipulation DOM2 en DHTMLCherche Programme de Visualistation/Debeuging de code XML/XSL
[c#] There was an error generating the XML[XML/XSL] [WIP] Gestionnaire de liens (1er problème résolu !)
[XML] Générer un graphe à partir de données XML ?Extensible Markup Language (XML) 1.0 (Third Edition) mis a jour hier
XML: quels sont les caractères que l'on ne peut pas utiliser?Inclure un fichier XML dans un autre fichier XML Probleme !
Plus de sujets relatifs à : Contraintes sur schéma XML


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR