提问人:DataStatsExplorer 提问时间:11/17/2023 更新时间:11/17/2023 访问量:26
XPath 和 XQuery 等效性
XPath and XQuery Equivalency
问:
我正在做一些自学,遇到了一个我无法理解的问题的答案。
给定以下 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 个提示将输出相同的结果。
答:
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”为真。因此,如果一门课程没有学生,那么该课程中的每个学生都被命名为“史密斯”。
评论