2012-02-01 2 views
2

이것은 stackoverflow에 대한 나의 첫 번째 질문입니다. (저는 이미 여기에있는 대답으로 내 문제를 파악할 수있었습니다).XSD 복잡한 열거 형

이 이러한 질문과 유사하지만, 내 질문은 조금 다른 생각 (또한, XSD 정말 어렵습니다) : 내가하려고

매개 변수 데이터 유형을 나타내는 "유형"의 제한된 세트를 정의하십시오. 예 : 그건, 그래서 만약 속성 :

<xs:complexType name="parameterDataType" abstract="true"> 
    <xs:sequence> 
     <xs:element name="type" type="xs:string" /> 
     <xs:element name="abbreviation" type="xs:string" /> 
     <xs:element name="length" type="xs:positiveInteger" /> 
    </xs:sequence> 
</xs:complexType> 

<xs:complexType name="binaryBitMappedType"> 
    <xs:complexContent> 
     <xs:restriction base="parameterDataType"> 
      <xs:sequence> 
       <xs:element name="type" type="xs:string" fixed="Binary Bit-Mapped" /> 
       <xs:element name="abbreviation" type="xs:string" fixed="B/BM" /> 
       <xs:element name="length" type="xs:positiveInteger" fixed="1" /> 
      </xs:sequence> 
     </xs:restriction> 
    </xs:complexContent> 
</xs:complexType> 
etc... 

참고 잘 :

- Binary bit-mapped B/BM 1 byte 
    - Unsigned Integer  U/I  2 bytes 
    - Alphanumeric   ALPHA 1 byte 
    - etc... 

그래서 나는 다음과 같은 XSD와 함께 올라와있다 또한 시퀀스와 "형, 약어, 길이"인 XS와 함께이 시도 더 나은 해결책은 저에게 알려줍니다.

이 잘 작동하지만 그들의 제한 값 (그렇지 않으면 유효하지 않습니다)로 요소를 다시 정의하기 위해 XML을 필요로하므로 같은 비트 :

<message> 
    <id>123</id> 
    <name>Some status type message</name> 
    <dataType xsi:type="binaryBitMappedType"> 
     <type>Binary Bit-Mapped</type> 
     <abbreviation>B/BM</abbreviation> 
     <length>1</length> 
    </dataType> 
    ...etc 
</message> 
<message> 
    <id>321</id> 
    <name>A DIFFERENT status type message</name> 
    <dataType xsi:type="binaryBitMappedType"> 
     <type>Binary Bit-Mapped</type> 
     <abbreviation>B/BM</abbreviation> 
     <length>1</length> 
    </dataType> 
    ...etc 
</message> 
<message> 
    <id>456</id> 
    <name>a continuous value type message</name> 
    <dataType xsi:type="unsignedIntegerType"> 
     <type>Unsigned Integer</type> 
     <abbreviation>U/I</abbreviation> 
     <length>2</length> 
    </dataType> 
    ...etc 
</message> 

다음을 다시 정의 할 필요가 없도록하는 방법이 있나요 XML의 값 (정의는 XSD에서 가져 오거나 XSD에서 가져올 수 있습니까?) 또는 XML 파일에 정의를 제공 한 다음 xsi : type을 기준으로 "가져 오기"할 수 있습니까?

더 자세히 설명해주세요.

<message> 
    <id>123</id> 
    <name>Some status type message</name> 
    <dataType xsi:type="binaryBitMappedType" /> <!-- don't have to repeat the dataType contents --> 
    ...etc 
</message> 
<message> 
    <id>321</id> 
    <name>A DIFFERENT status type message</name> 
    <dataType xsi:type="binaryBitMappedType" /> <!-- don't have to repeat the dataType contents --> 
    ...etc 
</message> 

아니면 아무것도 숨기고 있습니까? 미리 감사드립니다.

답변

1

XSD 1.0의 일반적인 규칙은 공동 제약 조건을 정의 할 수 없다는 것입니다. 즉, 한 요소의 유효한 값은 다른 요소의 유효한 값과 완전히 독립적입니다.

XSD 1.1에서는 어설 션을 사용하여 원하는대로 할 수 있습니다.

+0

안녕하세요, 답변 해 주셔서 감사합니다. 나는 어설 션에 대해 몰랐고, 그들은이 문제의 일부를 풀 수도있는 것처럼 보였다. 반복을 피하려고하는 부분을 설명하기 위해 약간의 질문을 확장했습니다. – Doddie