2017-09-18 22 views
0

私は私のXMLスキーマの以下の部分を持っている:PAYMENT_DATE、bank_acct、およびamt_due:XSD条件ロジックと正規表現

<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が" 3つの異なる値のうちの1つを有すること。 "field_value"は "field_name"ごとに異なる正規表現と一致する必要があります。

このスキーマには、次のJavaコードと同等のものは何ですか?

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

xs:date型は使用できません。日付形式にダッシュを付けることができないため、xs:stringを使用する必要があります。

答えて

1

XSD 1.0では制約を表すことができません。 XSD 1.1はアサーションを使用できます。

しかし、XSDの制約チェックのXMLデザインが要素名に固定されているので、あなたは苦労しています。

むしろより

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

と同様bank_acctamt_dueため

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

使用。

XMLデザインを変更すると、XSD 1.0の制約を非常に自然に表現できます。

+0

このような "メタ"デザインパターンが適切な場合があります(他の形式との変換が簡単な場合があります)。しかし、それはXSDでうまくサポートされていないデザインパターンです。 –