XPath与XQuery等价性疑问:为何XQuery结果包含于XPath结果?
关于XPath与XQuery查询结果差异的直观解释
给定的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
这个查询的逻辑是:只要某门课程的学生列表里存在至少一个叫Smith的学生,就返回该课程的Subject。哪怕这门课还有其他名字的学生,只要有一个Smith,就会被纳入结果。
[2] XQuery查询语句
for $c in /Courses/Course where every $s in $c/Students/Student satisfies $s/@Name="Smith" return $c/Subject
这个查询的逻辑是:只有当某门课程的所有学生都叫Smith时,才返回该课程的Subject。也就是说,这门课里不能有任何一个学生的名字不是Smith,必须全是Smith才符合条件。
直观例子对比
假设有以下3门课程:
- 课程1:学生包含Smith、John → 符合[1]的条件(有Smith),会被[1]返回;但不符合[2]的条件(有John),不会被[2]返回。
- 课程2:学生只有Smith → 同时符合两个查询的条件,会被两者都返回。
- 课程3:学生包含Alice、Bob → 既不符合[1]也不符合[2],都不会被返回。
从例子能明显看出:[2]返回的所有结果,必然都在[1]的结果里(因为全是Smith的课程肯定至少有一个Smith),但[1]的结果里会包含那些“有Smith但还有其他学生”的课程,这些是[2]不会返回的。所以[2]的结果始终包含于[1]的结果。
内容的提问来源于stack exchange,提问作者DataStatsExplorer
相关产品推荐
相关产品推荐

