IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Valider XML Discussion :

schemaLocation et localisation du xsd


Sujet :

Valider XML

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 16
    Points : 12
    Points
    12
    Par défaut schemaLocation et localisation du xsd
    Bonjour et merci de votre aide,

    J'ai une question de novice : le schemaLocation pointe t'il toujours vers un xsd ?

    En effet, je veux créer un nouveau schéma mélangeant des grammaires de plusieurs origines.
    Notamment, je souhaite inclure des balises xhtml.
    Dans un schéma comme celui-ci, il y a juste la déclaration des namespaces au début du fichier.

    Ma question est par exemple pour xhtml : comment en indiquant uniquement "namespace xhtml = "http://www.w3.org/1999/xhtml"", peut-on valider que l'élément xhtml:h2 à la ligne 80 est valide ?
    En effet, "http://www.w3.org/1999/xhtml" ne pointe par sur un xsd !

    On trouve le même problème ici :
    <xsd:import namespace="http://www.w3.org/1999/xhtml"
    schemaLocation="xhtml.xsd"/>
    pointe vers quel fichier xsd (quelle est l'URL) ?

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    En réalité c'est pas tellement novice.

    Citation Envoyé par cyberserker Voir le message
    J'ai une question de novice : le schemaLocation pointe t'il toujours vers un xsd ?
    En fait c'est toujours une URI, qui désigne toujours un XSD (et pas forcément qui pointe vers quoi que ce soit.)

    La distinction est réelle, bien que rarement exploitée en pratique.

    Citation Envoyé par cyberserker Voir le message
    En effet, je veux créer un nouveau schéma mélangeant des grammaires de plusieurs origines.
    Notamment, je souhaite inclure des balises xhtml.
    Dans un schéma comme celui-ci, il y a juste la déclaration des namespaces au début du fichier.
    Oui, et tu remarqueras que nulle part il est question de schemaLocation. Ce fichier est un Relax-NG, pas un XSD. Ce n'est pas la même chose.
    Le fichier en question n'indique pas d'URI pour valider les namespaces en question, tout simplement parce qu'il s'occupe lui-même de déterminer ce qui est valide ou pas.

    XSD exige que chaque namespace ait son schéma propre, et ne puisse pas être validé par un schéma s'occupant d'un autre namespace.

    D'autres formats, comme Relax-NG, n'imposent rien de ce genre (mais ça reste possible, avec le système d'inclusion, si on préfère.)

    Citation Envoyé par cyberserker Voir le message
    Ma question est par exemple pour xhtml : comment en indiquant uniquement "namespace xhtml = "http://www.w3.org/1999/xhtml"", peut-on valider que l'élément xhtml:h2 à la ligne 80 est valide ?
    Rien de ce genre n'est indiqué.
    C'est la ligne 80 elle-même, qui contribue à décider ce qui est valide ou pas. Rien n'a à dire si elle est valide ou non, c'est elle qui le dit !
    C'est un peu comme si l'audience défendait la cause de l'avocat - non, c'est l'avocat qui défend la cause de son client, on sera gentil de pas inverser les rôles.

    Citation Envoyé par cyberserker Voir le message
    On trouve le même problème ici :
    <xsd:import namespace="http://www.w3.org/1999/xhtml"
    schemaLocation="xhtml.xsd"/>
    pointe vers quel fichier xsd (quelle est l'URL) ?
    Ce sont deux choses complètement différentes. Mais je vais répondre à ton interrogation sur ce truc-là.

    Les URIs et les URLs peuvent très bien être relatives. En l'occurence, ici schemaLocation indique une URI relative, dont la base est la même que le fichier XSD qui l'importe, et le nom local est "xhtml.xsd".
    Par exemple, si le shéma qui l'importe est sur le disque dur, xhtml.xsd est dans le même répertoire de ce disque dur.

    Mais, en effet, les URIs relatives sont à utiliser avec parcimonie. Elles s'échangent mal d'une machine à une autre, et à la base l'échange c'est un peu le but de XML.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Rien de ce genre n'est indiqué.
    C'est la ligne 80 elle-même, qui contribue à décider ce qui est valide ou pas. Rien n'a à dire si elle est valide ou non, c'est elle qui le dit !
    C'est un peu comme si l'audience défendait la cause de l'avocat - non, c'est l'avocat qui défend la cause de son client, on sera gentil de pas inverser les rôles.
    Est-ce à dire qu'en réalité je pourrais écrire :
    <xs:element type="xhtml:p12">...</xs:element>
    dans le schéma et que tout se passerait dans le meilleur des mondes si je crée une balise <p12> dans mon instance XML ?

    Citation Envoyé par thelvin Voir le message
    Ce sont deux choses complètement différentes. Mais je vais répondre à ton interrogation sur ce truc-là.

    Les URIs et les URLs peuvent très bien être relatives. En l'occurence, ici schemaLocation indique une URI relative, dont la base est la même que le fichier XSD qui l'importe, et le nom local est "xhtml.xsd".
    Par exemple, si le shéma qui l'importe est sur le disque dur, xhtml.xsd est dans le même répertoire de ce disque dur.

    Mais, en effet, les URIs relatives sont à utiliser avec parcimonie. Elles s'échangent mal d'une machine à une autre, et à la base l'échange c'est un peu le but de XML.
    Là, j'ai encore un peu de mal.
    Si "http://www.w3.org/1999/xhtml" ne pointe pas vers un .xsd, d'où vient le fichier "xhtml.xsd" qui se retrouve en local ? Que contient-il alors ?

    Encore plus difficile à comprendre pour moi, est-ce qu'un document comme celui-ci sera valide ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?xml version="1.0" encoding="UTF-8"?>
    <xhtml
    	xmlns="http://www.w3.org/1999/xhtml"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://www.w3.org/1999/xhtml xhtml.xsd">
    <head>
    </head>
    <body>
    	<p12>Error</p12>
    </body>
    </xhtml>

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par cyberserker Voir le message
    Est-ce à dire qu'en réalité je pourrais écrire :
    <xs:element type="xhtml:p12">...</xs:element>
    dans le schéma et que tout se passerait dans le meilleur des mondes si je crée une balise <p12> dans mon instance XML ?
    S'il y a à la fois de quoi accepter l'élément xhtml:p12 dans un autre, et de quoi valider l'élément xhtml:p12 quand on le trouve, que ces deux informations sont rangées au bon endroit, alors oui.

    Citation Envoyé par cyberserker Voir le message
    Si "http://www.w3.org/1999/xhtml" ne pointe pas vers un .xsd, d'où vient le fichier "xhtml.xsd" qui se retrouve en local ? Que contient-il alors ?
    Alors déjà http://www.w3.org/1999/xhtml c'est un namespace, ça ne pointe vers rien du tout.

    Ensuite, la question n'est pas "d'où vient le fichier xhtml.xsd" : il vient du fait que quelqu'un l'a mis là. La question est "où le trouver." Et si son URI est juste "xhtml.xsd", une URI relative donc, alors on le trouve à côté du fichier qui parle de lui. Dans le cas d'un disque dur local, ça veut dire dans le même répertoire.

    Citation Envoyé par cyberserker Voir le message
    Encore plus difficile à comprendre pour moi, est-ce qu'un document comme celui-ci sera valide ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?xml version="1.0" encoding="UTF-8"?>
    <xhtml
    	xmlns="http://www.w3.org/1999/xhtml"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://www.w3.org/1999/xhtml xhtml.xsd">
    <head>
    </head>
    <body>
    	<p12>Error</p12>
    </body>
    </xhtml>
    Possiblement, si le fichier xhtml.xsd situé à côté de ce document, le permet.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Merci pour toutes ces réponses.

    En fait j'utilise xmllint (comme validateur) et je pense que cela biaise ma vision.
    Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <xsd:import namespace="http://www.w3.org/1999/xhtml"
    schemaLocation="xhtml.xsd"/>
    conduit à créer un fichier xhtml.xsd dans le répertoire courant. Ce fichier n'est pas le "vrai" schéma, mais un schéma qui semble créé à la volée par xmllint avec seulement les éléments à valider.

    Je n'ai pas réussi à clairement comprendre comment fonctionnent les validateurs de schéma, mais apparemment je devrais leur fournir une sorte d'annuaire de xsd à utiliser pendant la validation.

Discussions similaires

  1. [xsd][Java] Utilité de xsi:schemaLocation ?
    Par tchize_ dans le forum Valider
    Réponses: 6
    Dernier message: 09/09/2009, 10h10
  2. [XSD] XML Schema
    Par sleepy2002 dans le forum Valider
    Réponses: 3
    Dernier message: 15/09/2003, 09h33
  3. [XSD][Java] choix de la techno
    Par cyrdec dans le forum Valider
    Réponses: 4
    Dernier message: 12/09/2003, 16h36
  4. Localisation d'une base Postgresql sur mdk 9.1
    Par Gregco dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 10/06/2003, 18h46
  5. Fichiers xsd
    Par moxnico dans le forum Valider
    Réponses: 3
    Dernier message: 14/08/2002, 11h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo