使用XPath是否可以检查ID/IDREF使用?

使用XPath是否可以检查ID/IDREF使用?,xpath,Xpath,使用XML模式,我们可以在XML文档中的组件之间定义ID/IDREF链接。我正在寻找一种使用XPath的方法,以确保只有某些ID可以用作IDREF,也就是说,只有那些在模式设计的上下文中逻辑上有意义的值 使用下面的示例,我如何确保一本书的library_id实际上是可用的library_id之一,而不是消息中可能出现并用于某些完全不同目的的其他id(但仍然是有效的模式) 但这会引发一个错误,因为包含多个项的序列不允许作为contains()的第一个参数(“lib1”、“lib2”) 谢谢我希望您

使用XML模式,我们可以在XML文档中的组件之间定义ID/IDREF链接。我正在寻找一种使用XPath的方法,以确保只有某些ID可以用作IDREF,也就是说,只有那些在模式设计的上下文中逻辑上有意义的值

使用下面的示例,我如何确保一本书的library_id实际上是可用的library_id之一,而不是消息中可能出现并用于某些完全不同目的的其他id(但仍然是有效的模式)

但这会引发一个错误,因为包含多个项的序列不允许作为contains()的第一个参数(“lib1”、“lib2”)


谢谢

我希望您能正确理解您的需求

图书馆列表中存在具有图书馆id的图书

//book[@library_id = //library/@id]
图书馆id不正确的图书

//book[not(@library_id = //library/@id)]

为什么不使用XSD的key/keyref约束而不是ID/IDREF呢?它们更加灵活:它们可以限定在任何元素而不是整个文档的范围内;一个文档中可以有不同类型的ID,并且引用必须匹配到同一类型;值可以是复合的(例如,名字+姓氏);值可以是任何数据类型。

谢谢,这正是我所需要的!我们需要坚持使用ID属性,这在我们的模式中是可选的,这给我们在尝试使用key/keyref时带来了一个问题。然后您将不得不接受它的限制。但我不知道有多少事情可以用ID/IDREF做,而用key/keyref做不到。
//book[@library_id = //library/@id]
//book[not(@library_id = //library/@id)]