From: Antoine Mensch (antoine.mensch@xquarkgroup.com)
Date: 24/01/2004 - 21:10
Je pense qu'en définissant la keyref au même niveau que la key, ça devrait
marcher dans les deux cas.
<xsd:complexType name="type_Personnes">
<xsd:sequence>
<xsd:element name="Personnes" type="type_Individus" minOccurs="0">
<xsd:key name="type_Personne_Key">
<xsd:selector xpath="Homme | Femme"/>
<xsd:field xpath="@id"/>
</xsd:key>
<xsd:keyref name="Association_personnes_Ref" refer="type_Personne_Key">
<xsd:selector xpath=".//refid"/>
<xsd:field xpath="."/>
</xsd:keyref> </xsd:element>
</xsd:sequence>
</xsd:complexType>
Normalement, la spécification n'impose pas d'avoir des domaines identiques
pour la définition des key et des keyref: en principe, les keyref peuvent
être définies sur des éléments englobants les éléments sur lesquels les key
sont définies (celles-ci sont propagées vers le haut), mais l'inverse n'est
pas vrai. En l'occurrence, je pense que Xerces a le comportement correct. Il
faut dire que la spec est particulièrement confuse sur ce sujet.
Antoine
> -----Message d'origine-----
> De : xml-tech-bounce@xmlfr.org [mailto:xml-tech-bounce@xmlfr.org]De la
> part de hc3
> Envoyé : samedi 24 janvier 2004 14:56
> À : xml-tech@xmlfr.org
> Objet : [xml-tech] Validation avec les Key/ KeyRef
>
>
>
> Bonjour
>
> L'instance ci-dessous est validée par son schema sous MSXML4.
>
> Mais pas sous Xerces : "The keyref 'Association_personnes_Ref' refers to a
> key/unique that is out of scope."
>
> Comment faire pour valider l'instance à la fois sous MSXML et Xerces ?
>
> Merci
>
>
> <?xml version="1.0" encoding="utf-8"?>
> <Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xsi:noNamespaceSchemaLocation="personnes.xsd">
> <Personnes>
> <Homme id="p1">
> <nom>PIERRE</nom>
> <est_en_relation>
> <refid>p2</refid>
> <refid>p3</refid>
> </est_en_relation>
> </Homme>
> <Femme id="p2">
> <nom>SOPHIE</nom>
> <est_en_relation>
> <refid>p1</refid>
> </est_en_relation>
> </Femme>
> <Femme id="p3">
> <nom>SYLVIE</nom>
> <est_en_relation>
> <refid>p1</refid>
> </est_en_relation>
> </Femme>
> </Personnes>
> </Root>
>
>
>
> <?xml version="1.0" encoding="UTF-8"?>
> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> elementFormDefault="qualified" attributeFormDefault="unqualified">
>
> <xsd:element name="Root" type="type_Personnes"/>
>
> <xsd:complexType name="type_Personnes">
> <xsd:sequence>
> <xsd:element name="Personnes"
> type="type_Individus" minOccurs="0">
> <xsd:key name="type_Personne_Key">
> <xsd:selector xpath="Homme
> | Femme"/>
> <xsd:field xpath="@id"/>
> </xsd:key>
> </xsd:element>
> </xsd:sequence>
> </xsd:complexType>
>
> <xsd:complexType name="type_Individus">
> <xsd:choice maxOccurs="unbounded">
> <xsd:element name="Homme" type="type_Homme"/>
> <xsd:element name="Femme" type="type_Femme"/>
> </xsd:choice>
> </xsd:complexType>
>
> <xsd:complexType name="type_Femme">
> <xsd:sequence>
> <xsd:element name="nom"/>
> <xsd:element name="est_en_relation"
> type="type_Associations_personnes"/>
> </xsd:sequence>
> <xsd:attribute name="id" type="xsd:QName" use="required"/>
> </xsd:complexType>
>
> <xsd:complexType name="type_Homme">
> <xsd:sequence>
> <xsd:element name="nom"/>
> <xsd:element name="est_en_relation"
> type="type_Associations_personnes"/>
> </xsd:sequence>
> <xsd:attribute name="id" type="xsd:QName" use="required"/>
> </xsd:complexType>
>
> <xsd:complexType name="type_Associations_personnes">
> <xsd:sequence>
> <xsd:element name="refid" type="xsd:QName"
> maxOccurs="unbounded">
> <xsd:keyref
> name="Association_personnes_Ref" refer="type_Personne_Key">
> <xsd:selector xpath="."/>
> <xsd:field xpath="."/>
> </xsd:keyref>
> </xsd:element>
> </xsd:sequence>
> </xsd:complexType>
>
> </xsd:schema>
>
>
> --
> 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)
>
>
--
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)
Archive générée par hypermail 2.1.3 le 28/06/2004 - 11:06 UTC
webmaster@xmlfr.org
|