|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||||||||||||||||
|
Invité de passage
![]() Inscription : octobre 2010 Messages : 10 ![]() |
Bonjour à tous.
Voila, je suis un utilisateur intensif d'Emacs et je dois me mettre au langage XML. Pour cette dernière raison, j'ai acheté, sur conseil de ce site, le livre "Petit manuel de prise en main de XML". Il est parfait pour débuter. Pour en revenir à Emacs, le mode majeur, maintenant par défaut, du langage XML est nXML. Il fonctionne à merveille. Mais il a l'inconvénient (ou peut être l'avantage?) d'utiliser les schémas Relax NG compact. J'ai donc du me mettre également à ce langage qui me semble extrêmement puissant. En effet, par rapport aux schémas du W3 on réduit par trois ou quatre le volume du fichier. Outre le fait qu'il faut que j'apprenne un langage supplémentaire, et je ne parle pas de la version non compact de Relax NG, j'ai pas mal de difficultés pour convertir les schémas type W3 (.xsd) en Relax NG compact. Il y a bien trang, qui permet des conversions automatiques, mais il lui manque le passage de XML Schema en relax NG dans ses deux formes. Néanmoins, il existe un fichier XSLT, qui comble cette lacune. Il s'agit de XSDtoRNG.xsl. Il semble fonctionner correctement hormis le fait qu'il ne gère pas les éléments avec un attribut mixed="true". Une petite rectification, à la main et à posteriori directement dans le ficher ".rng", règle le problème. Je vais prendre un exemple concret à partir du livre déjà cité. Le point de départ est le schéma W3 : Code :
Code :
Code :
Code :
Je corrige à la main le fichier rng comme suit : Code :
Code :
Je suis donc maintenant l'heureux possesseur d'un schéma NG compact fonctionnel. En fait, pas vraiment, car lorsque je charge le fichier XML exemple du livre, Emacs me stipule qu'il n'est pas valide. En réalité, il l'est effectivement puisque c'est l'exemple du livre et donc, il doit y avoir un problème dans le schéma. Tout d'abord, je règle les erreurs les plus faciles à résoudre : Beaucoup de données ne sont pas au bon format d'après le schéma. Pas exemple, la donnée "nom". J'ajoute donc dans mon schéma, xsd:string au typeNom. Même principe pour typeHauteur et typeAnnée avec un entier positif. Le code définitif est donc : Code :
Maintenant, il me reste deux erreurs irréductibles. A) Code :
Citation:
Code :
Citation:
J'ai cherché sur internet une solution à mon problème, mais il semblerait que relax NG ne soit pas beaucoup utilisé. Il y a donc peut d'écrits sur ce sujet. Quelqu'un peut-il m'éclairer sur les correspondances entre les XML Schemas et les schémas Relax NG? Tout particulièrement au sujet des espaces de noms et de leurs attributs, c'est là que je bute comme le montre l'exemple. Merci d'avance pour votre aide. |
||||||||||||||||||||
|
|
00
|
|
|
#2 | ||
|
Membre chevronné
![]() Inscription : octobre 2011 Messages : 412 ![]() |
Puique image_principale ne vit pas dans cette espace, c'est evidemment de l'impliquer de cela avec l'espace de nom default.
Il faut prendre ces mesures. [1] Ajouter une espace null dans la partie de déclarations. [2] Et puis, la ligne d'image_principale doit être ecrite comme ça. Code :
|
||
|
|
00
|
|
|
#3 | ||
|
Invité de passage
![]() Inscription : octobre 2010 Messages : 10 ![]() |
Impeccable! tsuji. :-)
J'ai compris mon erreur et maintenant je n'ai plus d'erreur sur cette ligne. Reste l'erreur sur xsi:schemaLocation="http://www.kehogo.com/ns/mdm/1.0 13-07.xsd" avec xsi:schemaLocation qui passe au rouge. Il y a bien une solution un peu barbare... Code :
J'aimerais avoir à ne pas modifier le fichier xml en fonction du type de schéma. |
||
|
|
00
|
|
|
#4 | |||||
|
Membre chevronné
![]() Inscription : octobre 2011 Messages : 412 ![]() |
Citation:
[3] Déclarer un préfix comme xsi dans la section propre. Code :
Code :
|
|||||
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : octobre 2010 Messages : 10 ![]() |
Et bien, ma foi, tout cela me paraît raisonnablement parfait. Ça fonctionne super! Plus aucune erreur.
En fait, si je comprends bien, il faut traiter l'élément racine comme un élément ordinaire qui posséderait des attributs dont les valeurs sont des espaces de noms. Un grand merci pour ton aide précieuse. ;-) |
|
|
00
|
|
|
#6 | ||||
|
Invité de passage
![]() Inscription : octobre 2010 Messages : 10 ![]() |
Oups! Je viens de m'apercevoir que j'avais fait un erreur.
En effet, j'avais oublié de coller namespace xsi="http://www.w3.org/2001/XMLSchema-instance" après la kyrielle de "namespaces". Et lorsque j'ai rectifié le code, je me suis retrouvé dans le même cas de figure qu'au début. Voila le code qui provoque une erreur : Code :
Code :
|
||||
|
|
00
|
|
|
#7 |
|
Membre chevronné
![]() Inscription : octobre 2011 Messages : 412 ![]() |
Je ne peux pas confirmer mais ça n'engage que moi.
|
|
|
00
|
|
|
#8 |
|
Invité de passage
![]() Inscription : octobre 2010 Messages : 10 ![]() |
Que veux tu dire par là? Qu'il y a une incohérence entre ton application et Emacs?
En tout cas, puisque l'attribut xsi:schemaLocation n'a pas de signification particulière, je serais pour ne pas déclarer le namespace. Après tout, cela fonctionne fort bien sans. Qu'en penses-tu? J'ai l'impression que si cet espace de noms n'est pas déclaré, l'argument est traité comme une vulgaire chaîne de caractères dont le contenu est "xsi:schemaLocation". Et ainsi, le code xml correspond bien au schéma. |
|
|
00
|
|
|
#9 |
|
Membre chevronné
![]() Inscription : octobre 2011 Messages : 412 ![]() |
C'est fort bien si tu es content que l'attribut schemaLocation ne soit pas là par quelque moyen que ce soit. Mais je veux dire qu'il soit toléré par l'addition que j'ai mise là dans le rnc. Je n'ai rien à dire de plus en Emac, peut-être pour un jour ultérier, je ne sais pas.
|
|
|
00
|
|
|
#10 |
|
Invité de passage
![]() Inscription : octobre 2010 Messages : 10 ![]() |
OK, et merci encore pour ton aide.
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com