dbpediasparql可选
我正在运行这个简单的查询dbpediasparql可选,sparql,dbpedia,Sparql,Dbpedia,我正在运行这个简单的查询 前缀p: 选择*WHERE{ ?个人术语:主题类别:英国新闻工作者。 可选{个人p:name?name}。 可选{个人p:dateOfBirth?dob}。 } 限制10 我希望从他们是否有姓名和出生日期中获得前10名。我得到了前10个人谁拥有这两个属性。例如,安德鲁·罗斯坦之后有两名失踪人员 我做错了什么?您的查询的问题是a)限制限制返回的行数,而不是主题,以及b)有些人有多个名字 例如,记者丹尼尔·辛格(http://dbpedia.org/resource/Da
前缀p:
选择*WHERE{
?个人术语:主题类别:英国新闻工作者。
可选{个人p:name?name}。
可选{个人p:dateOfBirth?dob}。
}
限制10
我希望从他们是否有
姓名
和出生日期
中获得前10名。我得到了前10个人谁拥有这两个属性。例如,安德鲁·罗斯坦之后有两名失踪人员
我做错了什么?您的查询的问题是a)
限制
限制返回的行数,而不是主题,以及b)有些人有多个名字
例如,记者丹尼尔·辛格(http://dbpedia.org/resource/Daniel_Singer_(记者)
)至少有两个名字:“丹尼尔·辛格”@en
和“辛格,丹尼尔”@en
。这使他作为主题的行数增加了一倍
如果您按人分组
,则确保每行只有一人。然后,您需要对姓名和出生日期进行抽样,以便每人只挑选一个
PREFIX p: <http://dbpedia.org/property/>
SELECT ?person (SAMPLE(?name) as ?aname) (SAMPLE(?dob) as ?adob) WHERE {
?person dcterms:subject category:British_journalists .
OPTIONAL { ?person p:name ?name } .
OPTIONAL { ?person p:dateOfBirth ?dob } .
}
GROUP BY ?person
LIMIT 10
前缀p:
选择人员(样本(?姓名)作为名称(样本(?dob)作为adob),其中{
?个人术语:主题类别:英国新闻工作者。
可选{个人p:name?name}。
可选{个人p:dateOfBirth?dob}。
}
按人分组
限制10
(我不确定
SAMPLE
如何处理未绑定的情况,即没有名称的情况)根据O.R Mapper的评论-删除限制会带来完整的结果集,这表明可选实际上是有效的。
谢谢。“我希望能从……得到前10个人-为什么?当没有指定订单时,是什么让您认为您可以依赖任何特定的订单?正如@O.R.Mapper所说,您的问题很模糊。你到底想干什么?@O.R.Mapper点击点。删除限制带来了完整的结果集,这表明可选的事实上是工作的。谢谢!当每个人都需要一个记录并且任何样本名称都可以接受时,这是一个很好的技巧。原始查询为我提供了所有名称变体。如果需要所有变体,可以使用不同的聚合器:
GROUP\u CONCAT(?.name;separator=“,”)
而不是SAMPLE
。这将生成一个包含所有名称的单一值。
PREFIX p: <http://dbpedia.org/property/>
SELECT ?person (SAMPLE(?name) as ?aname) (SAMPLE(?dob) as ?adob) WHERE {
?person dcterms:subject category:British_journalists .
OPTIONAL { ?person p:name ?name } .
OPTIONAL { ?person p:dateOfBirth ?dob } .
}
GROUP BY ?person
LIMIT 10