XSD 子元素的数据类型取决于父元素的属性
XSD data type of child element depending on parent element's attribute
我有一些报告是这样的:
<report>
<dataset datatype="integer">
<data timestamp="1970-01-01T00:00:00+01:00">25</data>
<data timestamp="1970-01-01T00:01:00+01:00">25</data>
<data timestamp="1970-01-01T00:02:00+01:00">25</data>
<data timestamp="1970-01-01T00:03:00+01:00">25</data>
</dataset>
<dataset datatype="string">
<data timestamp="1970-01-01T00:00:00+01:00">foo</data>
<data timestamp="1970-01-01T00:01:00+01:00">bar</data>
<data timestamp="1970-01-01T00:02:00+01:00">baz</data>
<data timestamp="1970-01-01T00:03:00+01:00">foobar</data>
</dataset>
</report>
我需要一个描述上述 XML 的 xml 架构定义。到目前为止没问题。我无法解决的问题是如何做如下: data
元素的类型需要取决于 data set
元素的 datatype
属性。
数据类型可以是:字符串、浮点数或整数。例如。 datatype
属性设置为“整数”,所有子“数据”元素应限制为“xs:integer”类型。
这是我的 XSD 除了类型限制:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="DataTypes">
<xs:restriction base="xs:string">
<xs:enumeration value="string"/>
<xs:enumeration value="integer"/>
<xs:enumeration value="float"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="Data">
<xs:simpleContent>
<xs:extension base="xs:anySimpleType">
<xs:attribute name="timestamp" type="xs:dateTime" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="Dataset">
<xs:sequence>
<xs:element name="data" type="Data" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="datatype" type="DataTypes" use="required" />
</xs:complexType>
<xs:element name="report">
<xs:complexType>
<xs:sequence>
<xs:element name="dataset" type="Dataset" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
我很感激每一个有用的想法!
The type of the data elements needs to depend on the datatype attribute of the data set element.
这是对 XSD 1.1 中添加的“条件类型归因”功能的非常精确的描述。它也被称为“类型替代”。请注意,并非所有 XSD 处理器都支持 XSD 1.1.
您可以在 XSD 1.1 xs:alternative/xs:assert
找到一些示例
这不能在 XSD 1.0 中完成。
我有一些报告是这样的:
<report>
<dataset datatype="integer">
<data timestamp="1970-01-01T00:00:00+01:00">25</data>
<data timestamp="1970-01-01T00:01:00+01:00">25</data>
<data timestamp="1970-01-01T00:02:00+01:00">25</data>
<data timestamp="1970-01-01T00:03:00+01:00">25</data>
</dataset>
<dataset datatype="string">
<data timestamp="1970-01-01T00:00:00+01:00">foo</data>
<data timestamp="1970-01-01T00:01:00+01:00">bar</data>
<data timestamp="1970-01-01T00:02:00+01:00">baz</data>
<data timestamp="1970-01-01T00:03:00+01:00">foobar</data>
</dataset>
</report>
我需要一个描述上述 XML 的 xml 架构定义。到目前为止没问题。我无法解决的问题是如何做如下: data
元素的类型需要取决于 data set
元素的 datatype
属性。
数据类型可以是:字符串、浮点数或整数。例如。 datatype
属性设置为“整数”,所有子“数据”元素应限制为“xs:integer”类型。
这是我的 XSD 除了类型限制:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="DataTypes">
<xs:restriction base="xs:string">
<xs:enumeration value="string"/>
<xs:enumeration value="integer"/>
<xs:enumeration value="float"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="Data">
<xs:simpleContent>
<xs:extension base="xs:anySimpleType">
<xs:attribute name="timestamp" type="xs:dateTime" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="Dataset">
<xs:sequence>
<xs:element name="data" type="Data" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="datatype" type="DataTypes" use="required" />
</xs:complexType>
<xs:element name="report">
<xs:complexType>
<xs:sequence>
<xs:element name="dataset" type="Dataset" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
我很感激每一个有用的想法!
The type of the data elements needs to depend on the datatype attribute of the data set element.
这是对 XSD 1.1 中添加的“条件类型归因”功能的非常精确的描述。它也被称为“类型替代”。请注意,并非所有 XSD 处理器都支持 XSD 1.1.
您可以在 XSD 1.1 xs:alternative/xs:assert
找到一些示例这不能在 XSD 1.0 中完成。