在以下背景下:
// owl in terms of Java-like syntax
Class Person {}
Class GraduateStudent extends Person {reference takesCourse [*] : GraduateCourse}
Class Student intersect Person {reference takesCourse [*] : Course}
Class UndergradStudent extends Student {}
Class Course{}
Class GraduateCourse extends Course{}
Class CsCourse extends Course{}
请问如何阅读以下查询?
// Q1:
SELECT ?x ?y WHERE
{
{
{ ?x a :UndergradStudent .
?x :takesCourse ?y }
UNION
{ ?x a :GraduateStudent .
?x :takesCourse ?y }
}
?y a :Course .
}
我认为这意味着选择本科学生参加任何课程和研究生参加任何课程,有什么困扰我确认这是以下内容:
是否假设在?y a :Course
之前是一个点,这样{...}
内的UNION模式可以被视为一个匹配的模式,或者它无关紧要?
我可以将?y a :Course
分发到UNION
,即将Q1
转为Q2
。
// Q2:
SELECT ?x ?y WHERE
{
{
{ ?x a :UndergradStudent .
?x :takesCourse ?y .
?y a :Course }
UNION
{ ?x a :GraduateStudent .
?x :takesCourse ?y .
?y a :Course }
}
}