我有以下部分的XML架构:
<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”可以有三个不同的值之一:payment_date,bank_acct和amt_due。 “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。
答案 0 :(得分:1)
XSD 1.0无法表达您的约束; XSD 1.1可以使用断言。
然而,你正在苦苦挣扎,因为你的XML设计对于XSD的约束检查而言过于元化,这种检查以元素名称为基础。
而不是
<aux_data>
<field_name>payment_date</field_name>
<field_value>2017/09/18</field_value>
<aux_data>
使用
<payment_date>2017/09/18</payment_date>
,同样适用于bank_acct
和amt_due
。
如果您更改了XML设计,您将能够非常自然地在XSD 1.0中表达您的约束。