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 :

DTD -> XMLSchema


Sujet :

Valider XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut DTD -> XMLSchema
    Salut,

    J'ai besoin de décrire une structure très simple en xml, dont le document ressemble à ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <?xml version="1.0" encoding="UTF-8"?>
     
    <station-logos type="freeboxtv" base-url="http://unsite/remote/station-logos/tv">
    	<station num="1" filename="tf1.png" />
    	<station num="2" filename="france2.png" />
    	<station num="3" filename="france3.png" />
    	<station num="5" filename="france5.png" />
    	<station num="6" filename="m6.png" />
    	<station num="7" filename="arte.png" />
    	<station num="8" filename="direct8.png" />
    	<station num="9" filename="w9.png" />
    	<station num="11" filename="nt1.png" />
    	<station num="12" filename="nrj.png" />
    	<station num="13" filename="lcp.png" />
    </station-logos>
    J'avais tout d'abord fait une DTD:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?xml version="1.0" encoding="utf-8"?>
     
    <!ELEMENT station-logos (station*)>
    <!ATTLIST station-logos type CDATA #REQUIRED base-url CDATA #REQUIRED>
     
    <!ELEMENT station EMPTY>
    <!ATTLIST station num CDATA #REQUIRED filename CDATA #REQUIRED>
     
    <!ELEMENT url (#PCDATA)>
    mais je voudrais maintenant utiliser XMLSchema.

    J'ai donc fait ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <?xml version="1.0" encoding="UTF-8"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
     
    	<xs:element name="station-logos">
    		<xs:complexType>
    			<xs:sequence>
    				<xs:element name="station" type="Station" minOccurs="0" maxOccurs="unbounded"/>
    			</xs:sequence>
    		</xs:complexType>
    	</xs:element>
     
    	<xs:complexType name="Station">
    		<xs:sequence>
    			<xs:element name="num" type="xs:nonNegativeInteger"/>
    			<xs:element name="filename" type="xs:string"/>
    		</xs:sequence>
    	</xs:complexType>
     
    </xs:schema>
    1. Concernant la structure, vaut-il mieux "externaliser" xs:complexType pour l'élement "station-logos"?
    2. Vaut-il mieux xs: ou xsd: (j'ai trouvé les 2 sur google)?
    3. J'ai utilisé nonNegativeInteger parce que j'ai trouvé ça par hasard, mais où puis-je trouver la liste de tous les types prédéfinis?
    4. Pour la DTD, il est possible d'indiquer dans un xml utilisant ce format une ligne du genre
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      <!DOCTYPE channel-logos PUBLIC "unsite/public-logos" "http://unsite/remote/station-logo.dtd">
      Comment faire de même en XMLSchema?
    5. Une fois cette ligne ajoutée, les parseurs SAX ou DOM de Java peuvent-il vérifier qu'un document respecte le XMLSchema (comme il le fait pour vérifier le respect de la DTD)?
    6. Ai-je fait des erreurs dans ma description XMLSchema?

  2. #2
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Pour la question 3, j'ai trouvé sur http://www.w3.org/TR/xmlschema-2/#built-in-datatypes


    Plus que 5...

  3. #3
    Membre émérite
    Profil pro
    Responsable Dev
    Inscrit en
    Décembre 2003
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable Dev

    Informations forums :
    Inscription : Décembre 2003
    Messages : 788
    Par défaut
    pour 2 on peux utiliser les deux
    pour 5 xmllint -valid

  4. #4
    Expert confirmé
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    Salut,

    Citation Envoyé par ®om Voir le message
    Concernant la structure, vaut-il mieux "externaliser" xs:complexType pour l'élement "station-logos"?
    "externaliser" revient à déclarer un type global qui décrit le modèle de contenu de l'élément station-logos. Un type global est utile dans trois cas :
    • deux éléments présents à des endroits différents ont le même type de contenu (et n'ont pas forcément le même nom) ; en créant un type qui définit ce contenu, et en déclarant ces deux éléments comme étant de ce type, on factorise le code.
    • Dans le cas d'une structure récursive, la création d'un type global est obligatoire
    • On souhaite utiliser les fonctions de dérivation par restriction ou extension des WXS pour créer de nouveaux types à partir de types génériques ou approchants

    Citation Envoyé par ®om Voir le message
    Vaut-il mieux xs: ou xsd: (j'ai trouvé les 2 sur google)?
    C'est totalement égal. Le préfixe n'est qu'un alias désignant un espace de noms, et c'est ce dernier qui est déterminant pour le parser XML. Tu pourrais aussi bien utiliser toto que ça fonctionnerait pareil (ça n'est évidemment pas conseillé).
    Citation Envoyé par ®om Voir le message
    Comment faire de même en XMLSchema?
    En utilisant xsd:schemaLocation ou xsd:noNamespaceSchemaLocation dans l'instance XML ; pour plus d'information, consulte le dernier paragraphe de cet article.
    Citation Envoyé par ®om Voir le message
    Une fois cette ligne ajoutée, les parseurs SAX ou DOM de Java peuvent-il vérifier qu'un document respecte le XMLSchema (comme il le fait pour vérifier le respect de la DTD)?
    Dans le cas de Xerces, la validation par le WXS n'est pas automatique, il faut activer 2 options (features), en l'occurrence http://xerces.apache.org/xerces2-j/f...tml#validation et http://xerces.apache.org/xerces2-j/f...idation.schema
    Citation Envoyé par ®om Voir le message
    Ai-je fait des erreurs dans ma description XMLSchema?
    Je n'ai pas regardé dans le détail, mais il me semble qu'il manque la déclaration des attributs de station-logos.
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  5. #5
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Et bien! Merci pour toutes ces réponses
    Je vais étudier ça

Discussions similaires

  1. Transformer une DTD vers un XMLSchema
    Par soumou dans le forum Valider
    Réponses: 4
    Dernier message: 08/04/2006, 17h18
  2. [XML][DTD] Creer un parser à partir d'une DTD
    Par schnekre dans le forum Valider
    Réponses: 4
    Dernier message: 15/12/2003, 12h59
  3. Réponses: 2
    Dernier message: 29/07/2003, 12h52
  4. Faire respecter une DTD !!!
    Par haypo dans le forum Valider
    Réponses: 3
    Dernier message: 12/07/2003, 19h20
  5. Placement des balises avec DTD
    Par Keul125 dans le forum Valider
    Réponses: 4
    Dernier message: 28/05/2003, 12h08

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