2
這是我的第一個問題在stackoverflow(我通常能夠找出我的問題,已經在這裏的答案)。XSD複雜枚舉
這是類似這些問題,但我想我的問題是有點不同(也XSD真的很難):
我想定義一組代表參數數據類型的「類型」。例如。
- Binary bit-mapped B/BM 1 byte
- Unsigned Integer U/I 2 bytes
- Alphanumeric ALPHA 1 byte
- etc...
於是我想出了以下的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...
注意哦:我也試圖與一個序列和「類型,縮寫,長度」爲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>
還是我在隱藏到沒有?在此先感謝
嗨,謝謝你的回答。我不知道斷言,看起來他們可能會解決這個問題。我已經稍微擴展了這個問題,試圖說明我試圖避免重複的部分。 – Doddie 2012-02-02 02:39:00