2011-07-31 3 views
1

xsi:type을 사용하지 않고 XML 스키마의 변형 데이터 구조를 어떻게 모델링 하시겠습니까? 내 목표는 <property>이라는 요소에 대한 스키마를 정의하는 것이며 그 속성과 속성 유형은 datatype 속성에 따라 달라집니다. 예를 들면 : 문자열 형식의 속성의 default 속성이 어떤 문자를 허용하여야한다 반면 여기XML 스키마의 변형 데이터 구조 모델 방법

<property datatype="integer" default="1234"/> 
<property datatype="string" default="Abcde" maxlength="255"/> 

는 정수 형식의 속성의 default 속성은 유효한 정수 값을 허용하여야한다.

또한 maxlength 속성은 datatype="string" 인 경우에만 허용됩니다.

e.e. 스키마 유효성 검사 오류는 다음과 같은 속성 모두에서 발생한다 :

<property datatype="integer" default="NotAnInteger"/> 
<property datatype="integer" default="12345" maxlength="100"/> <!-- maxlength not allowed --> 

은 내가 대신 datatypexsi:type을 사용하는 경우,이 XML 스키마에서 모델 쉽게 될 것이라고 알고있다. 여기 xsi:type를 사용하지 않는 이유를 적어도 두 가지 이유, 그러나이있다 : 나는 많은 장소에서 읽고

  • 가 좋은 스타일로 간주되지 않습니다 xsi:type, 예를 들어, 사용은 xsi:type is Evil 또는 Smart but useless, part 3.

  • 이름 xsi:type은 단순히 속성의 용도를 정확하게 표현하지 않습니다. 나는 다소 datatype을 선호합니다.

답변

3

Xerces 및 Saxon의 최신 릴리스에서 구현되는 XSD 1.1의 조건부 유형 지정을 사용하여이 작업을 수행 할 수 있습니다. XSD 1.0에서는이 작업을 수행 할 수 없습니다. 이는 잘 알려진 제한 사항입니다 (종종 "co-occurrence constraints"라는 레이블 아래에서 언급 됨).

+0

조건부 유형 지정 (= )은 내가 필요한 것처럼 들립니다. 불행히도 XML Schema 1.1 표준은 아직 발표되지 않았기 때문에 많은 XML 프로세서는 아직 XML Schema 1.1과 호환되지 않습니다. XML Schema 1.0은 내 문제를 해결할 수있는 어떤 것을 제공합니까? –

관련 문제