2017-09-18 4 views
0

J'ai la partie suivante de mon schéma XML:XSD logique conditionnelle et regex

<xs:element minOccurs="0" maxOccurs="unbounded" name="aux_data"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element minOccurs="0" name="field_name" type="xs:string" /> 
     <xs:element minOccurs="0" name="field_value" type="xs:string" /> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

"field_name" pourrait avoir l'une des trois valeurs différentes: payment_date, bank_acct et amt_due. "field_value" doit correspondre à une regex différente pour chaque "field_name".

Quel serait l'équivalent du code Java suivant pour ce schéma?

if(field_name.equals("payment_date")) { 
    field_value.matches(/**regex*/); 
} 
else if(field_name.equals("bank_acct")) { 
    field_value.matches(/**another regex*/); 
} 

Je ne peux pas utiliser xs de type: date, que je ne peux pas avoir des tirets dans le format de date, donc je dois utiliser xs: string.

Répondre

1

XSD 1.0 ne peut pas exprimer vos contraintes; XSD 1.1 peut utiliser des assertions.

Cependant, vous rencontrez des difficultés car votre conception XML est trop méta pour la vérification des contraintes de XSD, qui est ancrée sur les noms d'éléments.

Plutôt que

<aux_data> 
    <field_name>payment_date</field_name> 
    <field_value>2017/09/18</field_value> 
<aux_data> 

utilisation

<payment_date>2017/09/18</payment_date> 

et de même pour bank_acct et amt_due.

Si vous changez votre conception XML, vous serez en mesure d'exprimer vos contraintes dans XSD 1.0 tout naturellement.

+0

Il existe parfois des cas où un motif de conception "méta" comme celui-ci est approprié (parfois il facilite la conversion vers et à partir d'autres formats). Mais c'est un modèle de conception qui n'est pas bien supporté par XSD. –