【发布时间】:2014-08-30 21:30:44
【问题描述】:
下面是一个示例 XML 架构。如您所见,我需要创建大量元素(elem001 到elem999),其中所有元素都引用另一个元素“param”。请注意,param 的属性 ID 是一个键,因此必须是唯一的。
现在,我如何指定一个限制,使得对于elem001,元素“param”的属性“数量”只能采用给定的一组值。同样,elem002 到 elem999 将有自己的一组值。但是,整个 XML 文档中的所有“param”元素都必须具有唯一的 ID。
我猜如果我使用类型派生限制而不是 ref,则唯一性约束将不再适用于所有“param”子类型。那我该怎么做呢?
<xsd:element name="param">
<xsd:complexType>
<xsd:simpleContent base="xsd:double">
<xsd:extension>
<xsd:attribute name="quantity" type="xsd:string">
<xsd:attribute name="ID" type="xsd:int">
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
<xsd:root>
<xsd:key name="paramkey">
<xsd:selector xpath="param/">
<xsd:field xpath="@ID">
</xsd:key>
<xsd:element name="elem001">
<xsd:element ref="param">
<xsd:element name="X" />
</xsd:element>
<xsd:element name="elem002">
<xsd:element ref="param">
<xsd:element name="Y" />
</xsd:element>
<!-- ... -->
<xsd:element name="elem999">
<xsd:element ref="param">
<xsd:element name="Y" />
</xsd:element>
</xsd:root>
---------------编辑----
很抱歉,我应该提供我的最终目标的示例 XML 文件以使其更清晰。在下面的示例中,您可以看到我有几个包含(除其他外)一些物理参数的对象(汽车、飞机、马)。属性“数量”定义了我们所说的物理量:温度、燃料水平等。
现在,我有两个要求:
首先,我需要在我的架构中限制允许的汽车物理量,这显然不能包括血压。同样,指定马的高度也没有意义(至少对于我的应用程序......)。因此,我需要指定允许在汽车上测量的物理量。
其次,参数的 id 在所有参数中必须是唯一的。例如,飞机高度的id不能为6,如果id为6的参数(马的血压)在“数量”中有另一个字符串值
<car>
<param id="1" quantity="fuelLevel">100</param>
<param id="2" quantity="temperature">86</param>
</car>
<car>
<param id="3" quantity="fuelLevel">99</param>
<param id="4" quantity="temperature">77</param>
</car>
<horse>
<param id="5" quantity="temperature">123</param>
<param id="6" quantity="bloodPressure">26</param>
</horse>
<plane>
<param id="7" quantity="altitude">1000</param>
<param id="8" quantity="temperature">1050</param>
</plane>
其实,如果我能做下面这样的事情,可能会更好,但我认为它更不可行。
<car>
<params>
<fuelLevel id="1">100</fuelLevel>
<temperature id="2">86</temperature>
</params>
</car>
<car>
<params>
<fuelLevel id="3">99</fuelLevel>
<temperature id="4">77</temperature>
</params>
</car>
<horse>
<params>
<temperature id="5">123</temperature>
<bloodPressure id="6">26</bloodPressure>
</params>
</horse>
<plane>
<params>
<temperature id="7">1000</temperature>
<altitude id="8"></altitude>
</params>
</plane>
另一个精度:我需要唯一的 id 是一个 int,所以我不能使用关联 id 和数量字段的键。
顺便说一句,这个论坛不允许我写一些问候或感谢的表述,这很令人不安。
【问题讨论】:
-
elem001等是否在其他地方引用param元素?还是他们将param元素嵌入为子元素?完全不清楚您的 XML 应该是什么样子;如果没有更明确的问题,就不可能回答您的问题。