使用与数据集

时间:2016-03-09 21:02:31

标签: union sparql optional

挑战集是将UNION关键字与以下数据集一起使用,并返回一个祖父列表。

RELDB1拥有2个有用的表:

fatherOf表包含以下数据:

Table fatherof:
('Chuck', 'Paul'),
('Chuck', 'Bonnie'),
('Jerry', 'George'),
('Jerry', 'Mary'),
('Chuck', 'Olivia'),
('Paul', 'Joan'),
('George', 'John'),
('George', 'Carole'),
('Ringo', 'Yoko'),
('Ringo', 'Peter')

表人员有:

Table person:
('Sara', 64, 'f'),
('Nancy', 68, 'f'),
('Mary', 27, 'f'),
('Olivia', 37, 'f'),
('Bonnie', 35, 'f'),
('Carole', 7, 'f'),
('Yoko', 6, 'f'),
('Joan', 9, 'f'),
('Chuck', 67, 'm'),
('Jerry', 65, 'm'),
('Paul', 30, 'm'),
('George', 25, 'm'),
('Ringo', 39, 'm'),
('John', 8, 'm'),
('Peter', 11, 'm')

我尝试了这个查询:

>SELECT ?x ?y ?z  
>WHERE {{?x rdf:type ex:Person}  
>UNION  
>{?x ex:fatherOf ?y . ?y ex:fatherOf ?z}}  
>ORDER BY (?x)

输出是Person表中的每个人,然后是Chuck(Paul,Joan)和Jerry(George,John和George和Carole)的儿子和孙子。我试过删除?y?z。该查询返回了人员表的列表!

如何修改查询以便UNION保留,但我只有祖父母。任何指导都将不胜感激。

1 个答案:

答案 0 :(得分:0)

你正试图归还每个祖父。在您的问题中,您表明您只返回 父亲祖父母 ...

祖父有孩子生孩子。

                                        Grandfather
                              Son                    Daughter
                        Son       Daughter       Son        Daughter

工会部分发挥作用,因为你将返回以下内容:

  1. ?z的父亲
  2. ??b的母亲
  3. ??b的父亲

                                              ?z
                                    ?a                ?a
                               ?b        ?b       ?b       ?b
    
  4. 你需要一个关于?b的母亲和父亲的联盟,因为你要结合多个三重模式的结果。我不会向您提供此问题的查询,因为这是课堂作业,但是,这可以帮助您使用所拥有的内容得出答案。