我想过滤在查询中用作“join”的资源。 例如,给定DBpedia资源,我需要返回由sameAs属性链接的资源标签,并在其URI中包含“pt”。我使用以下查询:
SELECT ?label
{ <http://dbpedia.org/resource/Category:Algorithms> owl:sameAs ?nomePT.
?nomePT rdfs:label ?label
FILTER regex(str(?nomePT), "pt", "i")
}
但是,它返回空,因为变量“?NomePT”始终包含列表中的第一个资源。见:
SELECT ?nomePT
{ <http://dbpedia.org/resource/Category:Algorithms> owl:sameAs ?nomePT.
?nomePT rdfs:label ?label
}
但资源有几个相同的链接:
SELECT ?nomePT
{ <http://dbpedia.org/resource/Category:Algorithms> owl:sameAs ?nomePT.}
查询中有什么问题?
提前感谢。
答案 0 :(得分:0)
如果您编写查询:
(valid bit): 2^22*(10 + 1)
您将获得SELECT distinct * {
?nomePT owl:sameAs category:Algorithms.
}
资源owl:sameAs
的所有链接。但是,您已经限制了三联的范围。所以,如果你要求:
category:Algorithms
如果首先找到您的特定资源,然后仅查找该资源的标签。但是,如果您在开始时没有绑定三元组,只过滤您的资源将为您提供所需的所有链接:
SELECT distinct ?nomePT {
?nomePT owl:sameAs category:Algorithms.
?nomePT rdfs:label ?label
}
因此,您应首先找到所有资源,然后根据特定资源(例如SELECT distinct ?resource {
?nomePT owl:sameAs ?resource.
?nomePT rdfs:label ?label.
filter( ?nomePT=category:Algorithms )
}
)过滤它们,因为sameAs是自反的:
category:Algorithms