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] Creer un XSD d'une feed RSS itunes


Sujet :

Valider XML

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 117
    Points : 54
    Points
    54
    Par défaut [XSD] Creer un XSD d'une feed RSS itunes
    Bonjour à tous...
    J'ai eu pour mission de réaliser un XSD d'une feed rss utilisant les tags itunes.
    Ne connaissant pas du tout le XSD je me suis lancé en cherchant sur le net les principales infos...
    J'ai donc une feed RSS qui ressemble par exemple à ça :
    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
    31
    32
    33
    34
    35
     
    <?xml version="1.0" encoding="UTF-8"?>
    <rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0">
    <channel>
       <itunes:explicit>no</itunes:explicit>
       <title>The title</title>
       <link>http://monlink</link>
       <description>descr</description>
       <lastBuildDate>Thu, 24 Jan 2008 14:45:29 CET</lastBuildDate>
       <category>Cat1</category>
       <generator>Pub</generator>
       <docs>doc.pdf</docs>
       <item>
          <guid>s18</guid>
          <title>toto-ex1</title>
          <description></description>
          <category>Music</category>
          <enclosure url="http://toto.wav" length="" type="audio/x-m4a"></enclosure>
          <pubDate>Tue, 22 Jan 2008 17:00:35 CET</pubDate>
          <itunes:author>toto</itunes:author>
          <itunes:subtitle>ex1</itunes:subtitle>
          <itunes:keywords>007</itunes:keywords>
       </item>
       <item>
          <guid>s15</guid>
          <title>tata - ex2</title>
          <description></description>
          <category>Music</category>
          <enclosure url="http://tata.wav" length="" type="audio/x-m4a"></enclosure>
          <pubDate>Tue, 22 Jan 2008 16:59:55 CET</pubDate>
          <itunes:author>tata</itunes:author>
          <itunes:subtitle>ex2</itunes:subtitle>
          <itunes:keywords></itunes:keywords>
       </item>
    </channel>
    J'ai donc crée le XSD suivant:
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    <?xml version="1.0" encoding="UTF-8"?>
    <xs:schema id="rssxsd" xmlns:xs="http://www.w3.org/2001/XMLSchema">
       <xs:element name="rss" type="rsstype"/>
       <xs:complexType name="rsstype">
          <xs:sequence>
             <xs:element name="channel" type="channeltype" minOccurs="1" maxOccurs="1"/>
          </xs:sequence>
          <xs:attribute name="version" type="xs:string"/>
       </xs:complexType>
       <xs:complexType name="channeltype">
          <xs:sequence>
             <xs:element name="explicit" type="xs:string"/>
             <xs:element name="title" type="xs:string"/>
             <xs:element name="link" type="xs:string"/>
             <xs:element name="description" type="xs:string"/>
             <xs:element name="lastBuildDate" type="xs:string"/>
             <xs:element name="category" type="xs:string"/>
             <xs:element name="generator" type="xs:string"/>
             <xs:element name="docs" type="xs:string"/>
             <xs:element name="item" type="itemtype" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
       </xs:complexType>
       <xs:complexType name="itemtype">
         <xs:sequence>
            <xs:element name="guid" type="xs:string"/>
            <xs:element name="title" type="xs:string"/>
            <xs:element name="description" type="xs:string"/>
            <xs:element name="category" type="xs:string"/>
            <xs:element name="link" type="xs:string" minOccurs="0"/>
            <xs:element name="enclosure" type="enclosuretype" minOccurs="0"/>
            <xs:element name="pubDate" type="xs:string"/>
            <xs:element name="author" type="xs:string"/>
            <xs:element name="subtitle" type="xs:string"/>
            <xs:element name="keywords" type="xs:string"/>
         </xs:sequence>
       </xs:complexType>
       <xs:complexType name="enclosuretype">
         <xs:attribute name="url" type="xs:string"/>
         <xs:attribute name="length" type="xs:string"/>
         <xs:attribute name="type" type="xs:string"/>
       </xs:complexType>
    </xs:schema>
    Et quand je tente une validation d'un xml avec ce XSD via la commande linux ci-dessous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     xmllint --noout "rss.xml" --schema "rss.xsd"
    J'obtiens une erreur du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    rss.xml:4: element explicit: Schemas validity error : Element '{http://www.itunes.com/dtds/podcast-1.0.dtd}explicit': This element is not expected. Expected is ( explicit ).
    rss.xml fails to validate
    Donc ce que je comprends, c'est que le "validateur" ne reconnait pas les tags d'itunes...mais je ne sais pas du tout comment indiqué dans le XSD que certains tags sont spécifiques itunes!!
    j'ai essayé un itunes:explicit dans le XSD...mais ça ne marche pas mieux!
    Bref, je suis un peu perdu!!
    Avez vous une petite idée de la manière dont je pourrais débloquer cette situation??

    Merci d'avance.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 117
    Points : 54
    Points
    54
    Par défaut
    ça y'est j'ai réussi!!!
    Bon pour ceux que ça intéresse, en fait j'ai crée deux fichiers xsd, et ça me permet de valider ma feed avec la commande
    xmllint --noout "rss.xml" --schema "rss.xsd"

    Le fichier rss.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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    <?xml version="1.0" encoding="UTF-8"?>
    <xs:schema id="rss" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:app1="http://www.itunes.com/dtds/podcast-1.0.dtd">
    <xs:import namespace="http://www.itunes.com/dtds/podcast-1.0.dtd" schemaLocation="rss_app1.xsd" />
    <xs:element name="rss">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="channel" minOccurs="1" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element ref="app1:explicit" />
                  <xs:element name="title" type="xs:string"/>
                  <xs:element name="link" type="xs:string"/>
                  <xs:element name="description" type="xs:string"/>
                  <xs:element name="lastBuildDate" type="xs:string"/>
                  <xs:element name="category" type="xs:string"/>
                  <xs:element name="generator" type="xs:string"/>
                  <xs:element name="docs" type="xs:string"/>
                  <xs:element name="item" minOccurs="1" maxOccurs="unbounded">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="guid" type="xs:string"/>
                        <xs:element name="title" type="xs:string"/>
                        <xs:element name="description" type="xs:string"/>
                        <xs:element name="category" type="xs:string"/>
                        <xs:element name="link" type="xs:string" minOccurs="0"/>
                        <xs:element name="enclosure" minOccurs="0">
                          <xs:complexType>
                            <xs:attribute name="url" type="xs:string" />
                            <xs:attribute name="length" type="xs:string" />
                            <xs:attribute name="type" type="xs:string" />
                          </xs:complexType>                    
                        </xs:element>
                        <xs:element name="pubDate" type="xs:string"/>
                        <xs:element ref="app1:author" />
                        <xs:element ref="app1:subtitle" />
                        <xs:element ref="app1:keywords" />
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
          <xs:attribute name="version" type="xs:string" />
        </xs:complexType>
      </xs:element>
       <xs:element name="rss" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
        <xs:complexType>
          <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element name="rss" />
          </xs:choice>
        </xs:complexType>
      </xs:element>
    </xs:schema>
    et le rss_app1.xsd
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?xml version="1.0" standalone="yes"?>
    <xs:schema id="rss" targetNamespace="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:mstns="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" attributeFormDefault="qualified" elementFormDefault="qualified" xmlns:app1="http://www.itunes.com/dtds/podcast-1.0.dtd" >
       <xs:element name="explicit" msdata:Prefix="itunes" type="xs:string"/>
       <xs:element name="author" msdata:Prefix="itunes" type="xs:string"/>
       <xs:element name="subtitle" msdata:Prefix="itunes" type="xs:string"/>
       <xs:element name="keywords" msdata:Prefix="itunes" type="xs:string"/>
    </xs:schema>
    En espérant que ça en aidera certains!

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

Discussions similaires

  1. [XSD] Générer un schéma depuis une WSDL?
    Par virgul dans le forum Valider
    Réponses: 2
    Dernier message: 12/10/2006, 07h45
  2. [XSD] Créer un espace de noms
    Par ploxien dans le forum Valider
    Réponses: 3
    Dernier message: 25/09/2006, 17h33
  3. [XSD]Ou peut-on déclarer une grammaire XSD dans un XML?
    Par Jayceblaster dans le forum Valider
    Réponses: 1
    Dernier message: 21/08/2006, 01h12
  4. [XSD]Créer structure de tableaux
    Par blastobi dans le forum Valider
    Réponses: 4
    Dernier message: 07/04/2006, 11h29
  5. Réponses: 3
    Dernier message: 15/06/2005, 10h15

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