使用“获取所有文章”;“时间点”;SPARQL中的属性
我想查询所有具有P585属性(时间点)的维基百科文章。不幸的是,其中一些非常模糊,并且位于子属性下,如图中所示。我希望能够过滤这些日期,无论它们在什么属性下 查询:“?item p:P585/ps:P585?date.”只会在时间点是根类别的地方返回结果,并且无论我尝试什么,我都无法在某个地方获得所有包含“时间点”的文章。或者,如果不可能,至少我希望能够指定“重大事件/*/时间点”使用“获取所有文章”;“时间点”;SPARQL中的属性,sparql,wikidata,Sparql,Wikidata,我想查询所有具有P585属性(时间点)的维基百科文章。不幸的是,其中一些非常模糊,并且位于子属性下,如图中所示。我希望能够过滤这些日期,无论它们在什么属性下 查询:“?item p:P585/ps:P585?date.”只会在时间点是根类别的地方返回结果,并且无论我尝试什么,我都无法在某个地方获得所有包含“时间点”的文章。或者,如果不可能,至少我希望能够指定“重大事件/*/时间点” 谢谢大家! 问题是您希望“时间点”是一个限定属性,而不是您当前编写的语句的属性。让我通过考虑以下关于Q76(巴拉
谢谢大家! 问题是您希望“时间点”是一个限定属性,而不是您当前编写的语句的属性。让我通过考虑以下关于
Q76
(巴拉克·奥巴马)和P26
(配偶)的问题来澄清我的意思:
ps:P26
告诉我们陈述的对象是谁,即米歇尔·奥巴马
注意:通常您会发现,对于每个?a p:Px/ps:Px?b
,都有?a wdt:Px?b
(这取决于声明的排名,例如,关于奥巴马出生地有两种声明,一种是夏威夷,另一种是肯尼亚,但只有列出夏威夷的声明排名高到足以保证与wdt
直接关联)
但是,如果我们想找到关于该语句的限定属性(例如,奥巴马夫妇结婚的时间、地点等),那么我们需要一个不同的名称空间,在本例中是pq
,其中“q”代表限定符
这与你的例子有什么关系?
在您的示例中,您要查找的“main”属性是“重大事件”,因此P793
,限定符是P585
因此,您的查询应该是这样的:
SELECT *
WHERE {
?subject p:P793 ?statement .
?statement pq:P585 ?date .
}
简言之:
SELECT *
WHERE {
?subject p:P793/pq:P585 ?date .
}
如果您对重大事件的对象更感兴趣(在您的示例中,这是“火箭发射”Q797476
),那么您可以这样指定:
SELECT *
WHERE {
?subject p:P793 ?statement .
?statement pq:P585 ?date ;
ps:P793 wd:Q797476 .
}
请注意名称空间和属性号所起的作用。问题在于,您希望“时间点”成为符合条件的属性,而不是您当前编写的语句的属性。让我通过考虑以下有关
Q76
(巴拉克·奥巴马)和P26
(配偶)的查询来澄清我的意思:
ps:P26
告诉我们陈述的对象是谁,即米歇尔·奥巴马
注意:通常您会发现,对于每个?a p:Px/ps:Px?b
,都有?a wdt:Px?b
(这取决于声明的排名,例如,关于奥巴马出生地有两种声明,一种是夏威夷,另一种是肯尼亚,但只有列出夏威夷的声明排名高到足以保证与wdt
直接关联)
但是,如果我们想找到关于该语句的限定属性(例如,奥巴马夫妇结婚的时间、地点等),那么我们需要一个不同的名称空间,在本例中是pq
,其中“q”代表限定符
这与你的例子有什么关系?
在您的示例中,您要查找的“main”属性是“重大事件”,因此P793
,限定符是P585
因此,您的查询应该是这样的:
SELECT *
WHERE {
?subject p:P793 ?statement .
?statement pq:P585 ?date .
}
简言之:
SELECT *
WHERE {
?subject p:P793/pq:P585 ?date .
}
如果您对重大事件的对象更感兴趣(在您的示例中,这是“火箭发射”Q797476
),那么您可以这样指定:
SELECT *
WHERE {
?subject p:P793 ?statement .
?statement pq:P585 ?date ;
ps:P793 wd:Q797476 .
}
请注意名称空间和属性号所起的作用。非常感谢您的详细解释,这很有帮助!非常感谢您的详细解释,这很有帮助!