2009-07-19 2 views
3

모델 속성 (이름/값 쌍) :XSD : 내가 좋아하는 속성을 정의하는 XML이

<properties> 
    <property name="play_sound" value="true" /> 
    <property name="duration" value="30" /> 
</properties> 

그것이 가능 XML 스키마와 같은 조건을 지정 "속성 이름은 '기간'인 경우 값은 정수 여야합니다 ". XML 파일에서 이러한 종류의 정보를 모델링하는 데 권장되는 방법은 무엇입니까?

내가 좋아하는 뭔가에 대해 생각되었습니다

<properties> 
    <play_sound>true</play_sound> 
    <duration>30</duration> 
</properties> 

내 스키마 타입 restrictionos을 정의 할 수 있습니다 그런 식으로. 그러나, 내가 수백 가지의 다른 속성을 가지고 있고, 앞으로 성장할 가능성이 있다면 ... 어떻게 될까요?

감사합니다.

답변

1

XML 스키마 1.0에는 이러한 종류의 제약이 없습니다.

XML Schema 1.1 현재 개발 중입니다.

Saxon XSLT/XQuery 엔진을 사용하는 경우 실험을 위해 포함 된 XML 스키마 1.1의 초기 구현이 있습니다.

또 다른 옵션은 Schematron입니다.

그러나 일반적으로 이들은 응용 프로그램 내부에서 처리됩니다. XML 스키마는 데이터 구조를 설명하는 데는 공평하지만 실제 내용의 유효성을 검사하는 데 그리 좋지 않습니다.

1

저는 이것을 속성 이름으로 적용 할 수 있다고 생각하지 않습니다. 당신은 아마도 Schematron으로 뭔가를 할 수 있습니다.

verbose strict schema와 relaxed compact schema 간에는 일반적인 균형이 있습니다. XML 파일을 사용하는 방법과 Xsd를 사용하는 방법에 따라 상황에 따라 더 나은 것을 결정해야합니다.

1

XSD에서 원하는대로 수행 할 수있는 조건부 지원이 없습니다. 파서가 XML을 검증하도록하는 것이 절대적으로 중요합니까?

그렇다면, 당신의 유일한 옵션은 (당신이 설명한 것 같은) 유형으로 속성을 정의하거나하는 등의 속성 (예 : <my_object play_sound="true" duration="30"/>)

보통

, 유효성 검사 이후 단계에서 발생하는 경우 그러나, 그것은 중요하지 않습니다 (예를 들어, XML이 애플리케이션에 의해 소화 될 때) 원하는 시점에 XML을 쉽게 처리 할 수 ​​있습니다.

2

XML을 특정 속성 또는 특정 유형의 요소로 모델링하는 것이 좋습니다.

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="properties"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="play_sound" type="xs:boolean"/> 
       <xs:element name="duration" type="xs:byte"/> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

<properties> 
    <play_sound>true</play_sound> 
    <duration>30</duration> 
</properties> 
관련 문제