🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: fr.comp.text.xml
3 messages
3 total messages Started by Yves Thu, 21 Apr 2011 13:19
Type complexe avec minimum 1 enfant, mais en acceptant plusieurs
#178
Author: Yves
Date: Thu, 21 Apr 2011 13:19
98 lines
3859 bytes
Bonjour,

Je dois créer un type "site" , dérivé d'un type "person" auquel
j'ajoute encore
"nue" et "gln".

Ce qui est décrit comme ceci dans mon xsd:

    <xsd:complexType name="person">
        <xsd:annotation>
        	<xsd:documentation>
        		Person identification
				Pcvqid : id (required)
				Name : Full Name (not required, but helpful)
			</xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
    		<xsd:element name="pcvqid" type="xsd:int" maxOccurs="1"
minOccurs="1">
    		</xsd:element>
    		<xsd:element name="name" maxOccurs="1" minOccurs="0">
    			<xsd:simpleType>
    				<xsd:restriction base="xsd:string">
    					<xsd:pattern value="\w.*"></xsd:pattern>
    				</xsd:restriction>
    			</xsd:simpleType>
    		</xsd:element>
    	</xsd:sequence>
    </xsd:complexType>

<xsd:complexType name="site">
    	<xsd:complexContent>
    		<xsd:extension base="pcvq:person">
    			<xsd:sequence>
    				<xsd:element name="NUE" type="pcvq:NUEType" maxOccurs="1"
minOccurs="0"></xsd:element>
    				<xsd:element name="GLN" type="pcvq:GLNType" maxOccurs="1"
minOccurs="0"></xsd:element>
    			</xsd:sequence>
    		</xsd:extension>
    	</xsd:complexContent>
    </xsd:complexType>

Mon problème est que je veux recevoir au moins une des 3 informations
requises, mais je dois aussi accepter de les recevoir toutes ou juste
quelques unes d'entre elles. La balise "name" étant systématiquement
acceptée mais optionelle.

Par contre, chaque information communiquée ne peut apparaître qu'une
seule fois.

Par exemple, (sans tenir compte des patterns):

<site>
 <pcvqid>117118</site>
</site>
ou
<site>
 <pcvqid>117118</site>
<nue>9.123.564.529</nue>
</site>
ou
<site>
 <pcvqid>117118</site>
<nue>9.123.564.529</nue>
<gln>4568794519814</gln>
</site>
ou
<site>
 <pcvqid>117118</site>
 <name>Michu</name>
<nue>9.123.564.529</nue>
<gln>4568794519814</gln>
</site>

sont tous correct, mais également :
<site>
 <name>Michu</name>
<gln>4568794519814</gln>
</site>
ou
<site>
 <pcvqid>117118</site>
<nue>9.123.564.529</nue>
</site>
ainsi que n'importe quelle combinaison de ce type.

Par contre, un exemple inacceptable ressemblerait à ceci  :
<site>
 <pcvqid>117118</site>
 <name>Michu</name>
<nue>9.123.564.529</nue>
<nue>9.123.564.528</nue>
<gln>4568794519814</gln>
</site>

Comment puis-je définir ces rêgles dans mon xsd ? J'ai essayé
différentes combinaisons sans y arriver.
Re: Type complexe avec minimum 1 enfant, mais en acceptant plusieurs
#179
Author: Mayeul
Date: Thu, 21 Apr 2011 14:29
28 lines
2249 bytes
La seule mani�re de le faire en XML Schema 1.0 est d'�noncer, soi-m�me, 
toutes les combinaisons autoris�es, et de faire un xs:choice permettant 
au choix chacune d'entre elles.

<xs:choice>
   <xs:sequence>
     <xs:element ref="a"/>
     <xs:element ref="b" minOccurs="0"/>
     <xs:element ref="c" minOccurs="0"/>
   </xs:sequence>
   <xs:sequence>
     <xs:element ref="b"/>
     <xs:element ref="c" minOccurs="0"/>
   </xs:sequence>
   <xs:sequence>
     <xs:element ref="c"/>
   </xs:sequence>
</xs:choice>

On ne r�p�te pas le a, puis le b, parce que XML Schema impose qu'une 
branche de <xs:choice> soit choisie sans ambigu�t�.

En XML Schema 1.1, il y a xs:assert qui permettrait de v�rifier qu'il y 
en a au moins un pr�sent, apr�s les avoir tous rendus optionnels. Mais 
bon, peu de choses le g�rant...

--
Mayeul
Re: Type complexe avec minimum 1 enfant, mais en acceptant plusieurs
#180
Author: Yves
Date: Thu, 21 Apr 2011 14:48
33 lines
2480 bytes
On 21 avr, 16:29, Mayeul <mayeul.marg...@free.fr> wrote:
> La seule manière de le faire en XML Schema 1.0 est d'énoncer, soi-même,
> toutes les combinaisons autorisées, et de faire un xs:choice permettant
> au choix chacune d'entre elles.
>
> <xs:choice>
>    <xs:sequence>
>      <xs:element ref="a"/>
>      <xs:element ref="b" minOccurs="0"/>
>      <xs:element ref="c" minOccurs="0"/>
>    </xs:sequence>
>    <xs:sequence>
>      <xs:element ref="b"/>
>      <xs:element ref="c" minOccurs="0"/>
>    </xs:sequence>
>    <xs:sequence>
>      <xs:element ref="c"/>
>    </xs:sequence>
> </xs:choice>
>
> On ne répète pas le a, puis le b, parce que XML Schema impose qu'une
> branche de <xs:choice> soit choisie sans ambiguïté.
>
> En XML Schema 1.1, il y a xs:assert qui permettrait de vérifier qu'il y
> en a au moins un présent, après les avoir tous rendus optionnels. Mais
> bon, peu de choses le gérant...
>
> --
> Mayeul

Merci :)
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads