2011-04-28 3 views
7

나는 통제 할 수없는 XML 문서를 가지고있다. 이들의 구조는 잘 정의되어 있지만 PDF의 모음에 설명되어 있습니다. 매우 정확한 내용 임에도 불구하고 자동화 된 유효성 검사는 다루기가 쉽지 않습니다. XML 스키마를 작성하여 (대부분의) 해당 PDF의 규칙을 실행 가능하게 만듭니다.XML 스키마에서 형식화 된 값을 비우는 방법은 무엇입니까?

모든 요소는 필수 항목입니다. 그러나 그들 중 절반 정도는 비어 있거나 간단한 입력 내용을 가질 수 있습니다.

이러한 요소에 대한 데이터 유형을 정의 할 때 "정상적인"버전과 비어있을 수있는 버전의 두 가지 버전을 정의했습니다.

<xs:simpleType name="empty"> 
    <xs:restriction base="xs:string"> 
    <xs:length value="0"/> 
    </xs:restriction> 
</xs:simpleType> 

<xs:simpleType name="codPostal"> 
    <xs:restriction base="xs:string"> 
    <xs:pattern value="^[0-9]{4}-[0-9]{3}$"/> 
    </xs:restriction> 
</xs:simpleType> 
<xs:simpleType name="opt_codPostal"> 
    <xs:union memberTypes="empty codPostal"/> 
</xs:simpleType> 

이 일을 덜 반복적 인 방법이 있나요 : 나는 empty 데이터 타입으로 노동 조합을 정의하여 이런 짓을?

답변

6

xs : nillable을 사용할 수 있습니다.

<OptionalString xsi:nil="true" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" /> 

이 문자열이 아닌 유형에 가장 유용 문서에서

<xs:simpleType name="codPostal"> 
    <xs:restriction base="xs:string"> 
    <xs:pattern value="^[0-9]{4}-[0-9]{3}$"/> 
    </xs:restriction> 
</xs:simpleType> 

<xs:element name="OptionalString" type="codPostal" nillable="true" /> 

XSD에서

(예를 들어, 날짜 등) 문자열로 당신은 제로 길이를 사용할 수 있습니다.

<OptionalString /> 

불행히도 문서에 "nil"속성을 지정해야합니다. 내가 아는 한, 당신이 원하는 것을하기위한 유일한 방해가 아닌 방법은 당신이 이미 선택한 노동 조합 유형 접근법입니다.

+0

예, 문자열 예제가 어리 석었습니다 ... 더 의미있는 것으로 변경했습니다 (답변을 실제로 무효화하지는 않습니다). –

+0

문서에서'xsi : nil'을 사용해야합니까? 나는 문서를 바꿀 수 없다 : ( –

+0

@Martinho : 안타깝게도 네, 문서에도 "nil"을 지정해야합니다. AFAIK는 당신이 원하는 것을하기 위해 방해가되지 않는 유일한 방법은 이미 선택한 조합 유형 접근법입니다 –

관련 문제