2010-03-25 6 views
4

J'ai le schéma suivant, que j'utilise pour m'assurer que PhoneNumber et PhoneNumberType (Maison, Travail, etc.) ne dépasse pas 10 caractères. Cependant, je souhaite améliorer ce schéma afin que PhoneNumberType ne soit pas requis si un PhoneNumber n'est pas fourni, mais est requis si le PhoneNumber est fourni. Existe-t-il un moyen de le faire dans XML Schema 1.0?Schéma XML pour limiter un champ basé sur un autre

Je suis conscient que cela pourrait être accompli dans XML Schema 1.1 en utilisant <xs:assert/>, mais malheureusement je suis coincé avec XML Schema 1.0.

<?xml version="1.0" encoding="UTF-8"?> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="PhoneNumber"> 
    <xs:simpleType> 
     <xs:restriction base="xs:string"> 
     <xs:minLength value="0"/> 
     <xs:maxLength value="10"/> 
     </xs:restriction> 
    </xs:simpleType> 
    </xs:element> 
    <xs:element name="PhoneNumberType"> 
    <xs:simpleType> 
     <xs:restriction base="xs:string"> 
     <xs:minLength value="0"/> 
     <xs:maxLength value="10"/> 
     </xs:restriction> 
    </xs:simpleType> 
    </xs:element> 
</xsd:schema> 

Répondre

0

Il me semble que cela est une relation "a".

Si vous avez un élément PhoneNumber, il doit avoir une propriété de type PhoneNumberType. Plutôt que de déconner avec la validation et les restrictions, je suggérerais de transformer PhoneNumber en un élément complexe et de faire de PhoneNumberType une propriété obligatoire.

+0

Je ne peux pas changer la structure du document XML , car il provient d'une source externe. –

0

Peut être trop tard, mais vous pouvez les mettre dans le groupe comme celui-ci

<xs:group name="group"> 
<xs:sequence> 
    <xs:element ref="PhoneNumber"/> 
    <xs:element ref="PhoneNymberType" /> 
</xs:sequence> 

Et faire de ce groupe requis ou non

Questions connexes