2017-09-18 2 views
0

나는 내 XML 스키마의 다음과 같은 부분이 있습니다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"세 가지 값 중 하나를 가질 수있다 : PAYMENT_DATE, bank_acct 및 amt_due. "field_value"는 각 "field_name"에 대해 다른 정규 표현식과 일치해야합니다.

이 스키마에 대해 다음 Java 코드와 동등한 것은 무엇입니까? 나는 날짜 형식으로 대시를 할 수 없기 때문에, 날짜, 그래서 XS를 사용할 수 있습니다 :

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

I 타입 XS를 사용할 수 없습니다 문자열입니다.

답변

1

XSD 1.0은 사용자의 제약 조건을 표현할 수 없습니다. XSD 1.1은 어설 션을 사용할 수 있습니다.

그러나 XML 설계가 요소 이름에 고정되어있는 XSD의 제약 조건 검사에 너무 메타이기 때문에 고민 중입니다.

보다는

<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가 잘 지원하지 않는 디자인 패턴입니다. –