Contraintes sur schéma XML - XML/XSL - Programmation
Marsh Posté le 04-12-2003 à 11:48:41
Sigmund a écrit : Salut à tous,
|
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+,
Marsh Posté le 04-12-2003 à 21:40:30
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/ |
OK, merci j'irai jeter un coup d'oeil...
Sinon, pour le 2, personne n'a une idée ?
Marsh Posté le 05-12-2003 à 10:10:11
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/ |
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...
Marsh Posté le 05-12-2003 à 11:37:14
Ca m'a l'air faisable avec une DTD et par extension en XSD (XML Schemas) mais j'ai jamais utilisé ce dernier...
Marsh Posté le 05-12-2003 à 14:01:23
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 .
Sinon, tu ferais comment avec une DTD (ça pourrait peut-être m'aider quand même, on sait jamais ) ?
Marsh Posté le 05-12-2003 à 15:11:42
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 |
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.
Marsh Posté le 05-12-2003 à 15:25:53
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 :
|
Marsh Posté le 05-12-2003 à 19:54:43
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 )... Merci pour ta réponse en tout cas.
Marsh Posté le 06-12-2003 à 03:06:36
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 :
|
[avec regles schematron]
Code :
|
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 :
|
A+,
Marsh Posté le 06-12-2003 à 11:16:53
gilou a écrit : Bon apres y avoir reflechi a tete reposée... |
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é:
|
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 :
|
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.
Marsh Posté le 06-12-2003 à 12:05:28
Sigmund a écrit : |
.. 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+,
Marsh Posté le 06-12-2003 à 12:25:38
Sigmund 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??
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+,
Marsh Posté le 06-12-2003 à 13:51:38
gilou a écrit : |
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 ! 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 :
|
C'est pas bon ?
Merci d'avance pour ta réponse.
Marsh Posté le 04-12-2003 à 11:33:44
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 :
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 :
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.