XPath 和 XQuery 等效性

XPath and XQuery Equivalency

提问人:DataStatsExplorer 提问时间:11/17/2023 更新时间:11/17/2023 访问量:26

问:

我正在做一些自学,遇到了一个我无法理解的问题的答案。

给定以下 DTD:

<!DOCTYPE Courses [
   <!ELEMENT Courses (Course*)>
   <!ELEMENT Course (Subject, Students)>
   <!ATTLIST Course CID ID #REQUIRED Credits PCDATA #REQUIRED>
   <!ELEMENT Subject (#PCDATA)>
   <!ELEMENT Students (Student+)>
   <!ELEMENT Student EMPTY>
   <!ATTLIST Student Name PCDATA #REQUIRED> ]>

[1] 我有一个 XPath 提示符:

/Courses/Course[Students/Student/@Name="Smith"]/Subject

[2] 和 XQuery 提示符:

for $c in /Courses/Course
where every $s in $c/Students/Student satisfies $s/@Name="Smith"
return $c/Subject

答案声明 [2] 的结果始终包含在 [1] 中。对此有直观的解释吗?

根据我的理解,我认为 2 个提示将输出相同的结果。

XML XPath XQuery

评论


答:

0赞 Michael Kay 11/17/2023 #1

如果课程中的任何学生被命名为“Smith”,则 XPath 表达式 [1] 将选择该课程。

如果课程中的每个学生都命名为“Smith”,则 XQuery 表达式 [2] 选择该课程。

所以它们不等价。

[2] 的结果始终是 [1] 的子集的命题依赖于这样一个事实,即 DTD 不允许课程没有学生,或者学生没有名字。如果不是这种情况,则 [2] 将选择空课程,但 [1] 不会选择。

评论

0赞 DataStatsExplorer 11/17/2023
谢谢!简单澄清一下:如果我的 DTD 允许一门课程没有学生,或者一个学生没有名字,那么 XQuery 表达式中的 EVERY 仍将选择一个空课程,尽管没有名为“Smith”的学生?
0赞 Michael Kay 11/17/2023
在数学(以及 XPath 和 XQuery)中,当 S 为空时,无论条件 X 如何,表达式“S 中的每个 e 都满足 X”为真。因此,如果一门课程没有学生,那么该课程中的每个学生都被命名为“史密斯”。