XPath 和 XQuery 等效性

问题描述 投票:0回答:1

我正在自学,发现了这个我无法理解的问题的答案。

给出以下 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] 中。有没有直观的解释?

根据我的理解,我认为这两个提示会输出相同的结果。

xml xpath xquery
1个回答
0
投票

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

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

所以它们不等价。

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

© www.soinside.com 2019 - 2024. All rights reserved.