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 :

[XSD] petite question au sujet d'un schéma


Sujet :

Valider XML

  1. #1
    Membre confirmé
    Homme Profil pro
    Fondateur
    Inscrit en
    Octobre 2002
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Fondateur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2002
    Messages : 445
    Points : 504
    Points
    504
    Par défaut [XSD] petite question au sujet d'un schéma
    Bonjour,

    Je viens de me lancer dans les schémas XML avec XSD et j'ai quelques petits problèmes.
    Après plusieurs tentatives je suis arrivé à ce schéma :

    - fichier projets.xsd
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    <?xml version="1.0" encoding="utf-8" ?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
     
    	<xs:element name="langage" type="xs:string" />
    	<xs:element name="description" type="xs:string" />
    	<xs:element name="link" type="xs:string" />
    	<xs:element name="documentation" type="xs:string" />
    	<xs:element name="duree" type="xs:string" />
    	<xs:element name="download" type="xs:string" />
     
    	<xs:element name="projet">
    		<xs:complexType>
    			<xs:all>
    				<xs:element ref="langage" />
    				<xs:element ref="description" />
    				<xs:element ref="link" />
    				<xs:element ref="documentation" />
    				<xs:element ref="duree" />
    				<xs:element ref="download" />
    			</xs:all>
     
    			<xs:attribute name="name" type="xs:string" use="required" />
    			<xs:attribute name="date" type="xs:string" use="required" />
    			<xs:attribute name="niveau" type="xs:string" use="required" />
     
    		</xs:complexType>
    	</xs:element>
     
    </xs:schema>
    - fichier projets.xml
    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" ?>
     
    <projets xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="./projets.xsd">
     
    	<projet name="xxx" date="xxx" niveau="xxx">
    		<langage>xxx</langage>
    		<description>xxx</description>
    		<link>xxx</link>
    		<documentation>xxx</documentation>
    		<duree>xxx</duree>
    		<download>xxx</download>
    	</projet>
     
    </projets>
    Ceci passe au validateur du W3C. Cependant, il y a encore quelques trucs que j'aimerais modifier.
    Par exemple j'aimerais que la présence des toutes les balises fils de projet ne soit pas obligatoire. D'après ce que j'ai lu je pensais qu'avec <xs:all> on n'était pas obligé de mettre toutes les balises fils mais apparemment ce n'est pas le cas puisqu'en essayant de valider un fichier xml dans lequel j'ai enlevé la balise <download></download> par exemple, le validateur rejette mon document et me dit qu'il manque cette balise.

    Savez vous ce que je dois préciser pour pouvoir faire ça ?


    Enfin, j'ai une autre petite question. Pour la balise description j'aimerais la modifier pour qu'elle ait le comportement suivant :

    - elle a un attribut de nom type qui peut prendre valeurs une ou l'autre des valeurs prédéfinies (short, long) obligatoirement- et ensuite son contenu est tjrs de type string

    Là, je pense qu'il faut définir la balise description comme une balise de type Complexe mais une fois ceci fait je ne vois pas comment définir à l'intérieur que son contenu sera de type string et surtout comment mettre les contraintes concernant son attribut.

    Quelqu'un aurait - il une piste à me donner pour définir ceci ?


    Merci d'avance.

    Sylvain.

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

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    pour rendre les éléments contenus dans le xs:all (on les appelle des particules dans le jargon de la spécification, et xs:all est un compositeur) optionnels, il suffit d'utiliser l'attribut minOccurs qui permet de spécifier le nombre minimal d'occurrences d'un élément dans un modèle de contenu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <xs:all>
      <xs:element ref="langage" minOccurs="0"/>
      <xs:element ref="description" minOccurs="0"/>
      <xs:element ref="link" minOccurs="0"/>
      <xs:element ref="documentation" minOccurs="0"/>
      <xs:element ref="duree" minOccurs="0"/>
      <xs:element ref="download" minOccurs="0"/>
    </xs:all>
    Pour ta balise description il y a plusieurs possibilités, en voici une qui n'utilise que des types locaux anonymes :
    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
     
    <xs:element name="description">
      <xs:complexType>
        <xs:simpleContent>
          <xs:extension base="xs:string">
            <xs:attribute name="type" use="required">
              <xs:simpleType>
                <xs:restriction base="xs:string">
                  <xs:enumeration value="short"/>
                  <xs:enumeration value="long"/>
                </xs:restriction>
              </xs:simpleType>
            </xs:attribute>
          </xs:extension>
        </xs:simpleContent>
      </xs:complexType>
    </xs:element>
    Si dans ton schéma tu as d'autres éléments ou attributs qui ont le même modèle de contenu, ça vaudra alors le coup de transformer ces types locaux en types globaux.

  3. #3
    Membre confirmé
    Homme Profil pro
    Fondateur
    Inscrit en
    Octobre 2002
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Fondateur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2002
    Messages : 445
    Points : 504
    Points
    504
    Par défaut
    Ca marche bien, merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Petite question sur les extensions dans un XSD
    Par LaBastoss dans le forum XSL/XSLT/XPATH
    Réponses: 0
    Dernier message: 27/09/2011, 14h32
  2. Réponses: 5
    Dernier message: 17/02/2008, 21h26
  3. Petites questions sur le sujet
    Par Bardack dans le forum Hibernate
    Réponses: 98
    Dernier message: 09/03/2007, 14h56
  4. [ASP.NET VB.NET]Petite question au sujet du datagrid
    Par Azephel dans le forum ASP.NET
    Réponses: 11
    Dernier message: 06/03/2007, 18h38
  5. Petite question au sujet du code Hamming
    Par sylsau dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 28/02/2006, 13h30

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