2009-09-16 6 views

Répondre

1

Non, malheureusement, il s'agit d'une zone où XSD fait défaut - vous ne pouvez pas contrôler la structure en fonction des valeurs d'un attribut ou d'un élément. XSD est strictement sur la structure de contrôle.

Pour quelque chose comme ça, vous auriez à utiliser d'autres techniques de validation XML, donc je suggère que vous pourriez vouloir jeter un oeil à Schematron:

Schematron est une approche où vous pouvez définir ce type de dépendances ("si cet attribut a la valeur XYZ, alors .......").

Marc

+0

C'est ce que je pensais être le cas. Merci d'avoir validé mes pensées. –

1

Vous pouvez faire quelque chose de similaire en utilisant le type abstrait.

<xs:complexType name="basePqrameterType" abstract="true"/> 

Suivi par le spécifique (béton) définitions type:

<xs:complexType name="Param_uniform"> 
    <xs:complexContent> 
     <xs:extension base="baseParameterType"> 
      <xs:attribute name="type" use="required" fixed="uniform"/> 
      ...<!--other specific restrictions for type uniform--> 
     </xs:extension> 
     </xs:complexContent> 
</xs:complexType> 

<xs:complexType name="Param_normal"> 
    <xs:complexContent> 
     <xs:extension base="baseParameterType"> 
      <xs:attribute name="type" use="required" fixed="normal"/> 
      ...<!--other specific restrictions for type normal--> 
     </xs:extension> 
     </xs:complexContent> 
</xs:complexType> 

Votre xml ressemblera à ceci:

<Param xsi:type="Param_normal" type="normal"/> 
<Param xsi:type="Param_uniform" type="uniform"/> 

Ainsi, il est possible d'avoir des éléments avec le même nom mais les contraindre en raison de la définition de différents types, MAIS vous ne pouvez pas 'sélectionner' ces types en utilisant une valeur d'attribut. Il doit être fait en utilisant la notation 'xsi: type'.

Questions connexes