XSD条件逻辑和正则表达式

时间:2017-09-18 23:18:39

标签: xml xsd

我有以下部分的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。

1 个答案:

答案 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_acctamt_due

如果您更改了XML设计,您将能够非常自然地在XSD 1.0中表达您的约束。

相关问题