XML 架构 - 可以有多个子元素,但具有唯一值
XML Schema - multiple child elements are possible, but have unique values
所以我有一个 "hotel" 根元素,其中包含一个元素 "rooms"。
在 rooms 元素中,必须有当前房间的列表:
<?xml version="1.0"?>
<h:hotel xmlns:h="hotel">
<existingRooms>
<room>101</room>
<room>102</room>
<room>201</room>
</existingRooms>
</h:hotel>
多个房间同号应该是非法的:
<?xml version="1.0"?>
<h:hotel xmlns:h="hotel">
<existingRooms>
<room>101</room>
<room>102</room>
<room>201</room>
<room>201</room>
</existingRooms>
</h:hotel>
当我尝试用 执行此操作时,验证器只接受一个房间,这显然不是我的目标:
<?xml version="1.0"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:h="hotel"
targetNamespace="hotel">
<element name="hotel">
<complexType>
<sequence>
<element name="existingRooms">
<complexType>
<sequence>
<element name="room" type="integer" maxOccurs="unbounded"/>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
<unique name="inuqueRoomNumber">
<selector xpath="existingRooms"/>
<field xpath="room"/>
</unique>
</element>
</schema>
这个问题的解决方案是什么?
改变
<unique name="inuqueRoomNumber">
<selector xpath="existingRooms"/>
<field xpath="room"/>
</unique>
至
<unique name="inuqueRoomNumber">
<selector xpath="existingRooms/room"/>
<field xpath="."/>
</unique>
所以我有一个 "hotel" 根元素,其中包含一个元素 "rooms"。 在 rooms 元素中,必须有当前房间的列表:
<?xml version="1.0"?>
<h:hotel xmlns:h="hotel">
<existingRooms>
<room>101</room>
<room>102</room>
<room>201</room>
</existingRooms>
</h:hotel>
多个房间同号应该是非法的:
<?xml version="1.0"?>
<h:hotel xmlns:h="hotel">
<existingRooms>
<room>101</room>
<room>102</room>
<room>201</room>
<room>201</room>
</existingRooms>
</h:hotel>
当我尝试用 执行此操作时,验证器只接受一个房间,这显然不是我的目标:
<?xml version="1.0"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:h="hotel"
targetNamespace="hotel">
<element name="hotel">
<complexType>
<sequence>
<element name="existingRooms">
<complexType>
<sequence>
<element name="room" type="integer" maxOccurs="unbounded"/>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
<unique name="inuqueRoomNumber">
<selector xpath="existingRooms"/>
<field xpath="room"/>
</unique>
</element>
</schema>
这个问题的解决方案是什么?
改变
<unique name="inuqueRoomNumber">
<selector xpath="existingRooms"/>
<field xpath="room"/>
</unique>
至
<unique name="inuqueRoomNumber">
<selector xpath="existingRooms/room"/>
<field xpath="."/>
</unique>