Cliquez ici.
Accueil
 chercher             Plan du site             Info (English version) 
L'histoire de XML s'écrit en ce moment même. XMLfr vous aide à la suivre et à en dégager les tendances.Les listes de discussions XMLfr sont à votre disposition pour réagir sur nos articles ou simplement poser une question.Si vous ètes passionnée(e) par XML, pourquoi ne pas en faire votre métier ?XMLfr n'est heureusement pas le seul site où l'on parle de XML. Découvrez les autres grâce à XMLfr et à l'ODP.Les partenaires grâce auxquels XMLfr peut se développer.Pour tout savoir sur XMLfr.XMLfr sans fil, c'est possible !Pour ceux qui veulent vraiment en savoir plus sur XML.L'index du site.
 Commentaires et questions non techniques.Commentaires et questions techniques.

 
Cliquez ici.

xml tech : Technologies XML

[xml-tech] Re: XML schema, contraintes sur attributs d'éléments répétés

[xml-tech] Re: XML schema, contraintes sur attributs d'éléments répétés

Auteur: Eric van der Vlist <vdv@dyomedea.com>
Date: 16/06/2005 - 08:37
X-Mailer: Evolution 2.2.1.1

On jeu, 2005-06-16 at 10:18 +0200, Frédéric Glorieux wrote:
> Merci pour cette réponse publique, qui a d'autant plus de poids lorsque
> l'on connaît votre compétence et votre indépendance à l'égard des
> langages de schémas
> <http://www.oreillynet.com/cs/catalog/view/au/853?x-t=book.view>.
>

Merci :-) !

> >><record>
> >> <dc:title xml:lang="fr"/><!-- obligatoire -->
> >> <dc:title xml:lang="en"/><!-- obligatoire -->
> >> <dc:title xml:lang="autre"/><!-- répétable, optionnel -->
> >></record>
>
>
> > Non, ce n'est pas possible avec W3C XML Schema, vous aurez une erreur du
> > type :
> >
> > ++++++++++++++++++++++++++++++++++++++++++++++
> > Description: E cos-element-consistent: Error for type
> > '#AnonType_record'. Multiple elements with name 'title', with different
> > types, appear in the model group.
> > URL: http://www.w3.org/TR/xmlschema-1/#cos-element-consistent
> > ++++++++++++++++++++++++++++++++++++++++++++++
>
> Oui, c'est bien ce que j'ai compris, ce qui d'ailleurs n'est pas
> arbitraire. En DTD on aurait certainement fait quelque chose comme
> <title-fr/>, <title-en/>, <title-xx/> ?

Oui, cette contrainte existait également avec les DTDs avec beaucoup
plus de poids puisque les définitions d'éléments étaient toutes
globales.

D'une manière générale, je ne suis pas partisan de l'utilisation de
définitions différentes des types d'éléments en fonction du contexte :
ces redéfinitions compliquent beaucoup la compréhension d'un vocabulaire
XML. Par contre dans le cas particulier que vous citez, elles semblent
assez légitimes.

> > Par contre, avec RELAX NG :
> >
> > element record {
> > element dc:title {
> > attribute xml:lang { "fr" }
> > },
> > element dc:title {
> > attribute xml:lang { "en" }
> > },
> > element dc:title {
> > attribute xml:lang { "autre" }
> > } *
>
> Disons plutôt un code ISO au lieu de "autre", mais en effet, c'est très
> clair.

Effectivement et dans ce cas, vous pourriez même exclure les valeurs
"fr" et "en" :

    element record {
        element dc:title {
            attribute xml:lang { "fr" }
        },
        element dc:title {
            attribute xml:lang { "en" }
        },
        element dc:title {
            attribute xml:lang { xsd:language - ("fr" | "en") }
        } *
    }

Pour être tout à fait honnête, il est possible avec W3C XML Schema de
vérifier (en utilisant xs:unique) que vous ne répétez pas une valeur de
xml:lang et cela est impossible avec RELAX NG.

> > ne pose pas de problème :-) ...
>
> Et bien voilà, c'est dit. Pour valider un enregistrement Dublin Core,
> pensez aussi à Relax NG.

Ou à Schematron qui peut faire ce type de contrôle "métiers" en
complément d'une DTD, un schéma W3C XML Schema ou RELAX NG.

Dans ce cas on écrirait :

<sch:schema xmlns:sch="http://www.ascc.net/xml/schematron">
    <sch:pattern name="languages">
        <sch:rule context="record">
            <sch:assert test="dc:title[1]/@xml:lang = 'fr'">Le premier élément dc:title doit être en
                français</sch:assert>
            <sch:assert test="dc:title[2]/@xml:lang = 'en'">Le deuxième élément dc:title doit être
                en anglais</sch:assert>
        </sch:rule>
    </sch:pattern>
</sch:schema>

Ce n'est pas plus compliqué et on maîtrise totalement les messages
d'erreurs qui sont affichés.

Autre avantage : cela permet de ne pas avoir à redéfinir le type de
l'élément dc:title en fonction de son contexte (voir plus haut)...

Vous pouvez également vérifier l'unicité des attributs xml:lang avec la
règle :

        <sch:rule context="dc:title">
            <sch:report test="@xml:lang = preceding-sibling::dc:title/@xml:lang">Les titres
                (dc:title) doivent être uniques pour chacun des langages.</sch:report>
        </sch:rule>

En compliquant un peu, vous pouvez afficher des informations sur le
contexte lié à cette erreur.

Eric

PS: RELAX NG et Schematron sont maintenant des standards ISO.

-- 
Read me on XML.com.
                                            http://www.xml.com/pub/au/74
------------------------------------------------------------------------
Eric van der Vlist       http://xmlfr.org            http://dyomedea.com
(ISO) RELAX NG   ISBN:0-596-00421-4 http://oreilly.com/catalog/relax
(W3C) XML Schema ISBN:0-596-00252-1 http://oreilly.com/catalog/xmlschema
------------------------------------------------------------------------
--
Devenez redacteur <XML>fr et contribuez au developpement du
xml francophone (http://xmlfr.org/infos/redacteurs/) !
Liste de diffusion "xml-tech@xmlfr.org" (http://xmlfr.org).
Cette liste est a votre disposition pour discuter en francais de 
tout sujet technique lie a XML.
Pour resilier votre abonnement, envoyez un message contenant 
la commande "unsubscribe" a xml-tech-request@xmlfr.org
(mailto:xml-tech-request@xmlfr.org?Subject=unsubscribe)
Received on Thu Jun 16 10:37:53 2005

Archive générée par hypermail 2.1.8 le 30/06/2005 - 21:52 UTC

webmaster@xmlfr.org

 

xml tech

Discussions techniques au sujet de XML.

Cette liste est à votre disposition pour discuter en français de tout sujet technique lié à XML.



Devenez rédacteur <XML>fr et contribuez au développement du xml francophone !
Les documents publiés sur ce site le sont sous licence "Open Content"
Conception graphique
  l.henriot@online.fr  

Conception, réalisation et hébergement