sparql排除多种类型的层次结构
问题描述:
在dbpedia中,我选择了一些标签开始'A'的页面。在这里我使用主题的附加过滤器来缩小集合。在原来的版本也有另一种情况(结果集是更大)sparql排除多种类型的层次结构
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX purl: <http://purl.org/dc/terms/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX : <http://dbpedia.org/page/>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX dbr: <http://dbpedia.org/resource/>
SELECT DISTINCT
?pageType
WHERE
{
{
?page rdfs:label ?label .
?page a ?pageType .
?page <http://purl.org/dc/terms/subject> <http://dbpedia.org/resource/Category:Banking> .
}
FILTER (strstarts(str(?pageType), 'http://dbpedia.org/ontology'))
}
LIMIT 1000
这里我只选择页面类型为与问题的其余部分明确。 这是整套。现在我想排除一些页面。排除所有代理(个人,组织等):
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX purl: <http://purl.org/dc/terms/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX : <http://dbpedia.org/page/>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX dbr: <http://dbpedia.org/resource/>
SELECT DISTINCT
?pageType
WHERE
{
{
?page rdfs:label ?label .
?page a ?pageType .
?page <http://purl.org/dc/terms/subject> <http://dbpedia.org/resource/Category:Banking> .
MINUS { ?page a dbo:Agent }
}
FILTER (strstarts(str(?pageType), 'http://dbpedia.org/ontology'))
}
LIMIT 1000
确定。然后我想排除更多类型,例如Written_Work。我尝试了不同的方法,但无法找到正确的方法。
这将返回什么:
WHERE
{
{
?page rdfs:label ?label .
?page a ?pageType .
?page <http://purl.org/dc/terms/subject> <http://dbpedia.org/resource/Category:Banking> .
MINUS { ?page a dbo:Agent }
MINUS { ?page a dbo:WrittenWork }
}
这就好比没有过滤器设置:
WHERE
{
{
?page rdfs:label ?label .
?page a ?pageType .
?page <http://purl.org/dc/terms/subject> <http://dbpedia.org/resource/Category:Banking> .
MINUS { ?page a dbo:Agent, dbo:WrittenWork }
}
的问题是: 我应该去什么样的方式来排除特定类型的网页(直接和超类)?
答
它看起来是这样的工作答案(如何排除类型的倍数)
{
?page purl:subject ?id .
?page a ?pageType .
FILTER NOT EXISTS {
?page a/rdfs:subClassOf* ?skipClasses .
FILTER(?skipClasses in (dbo:Agent, dbo:Place, dbo:Work))
}
}
在这个例子中所有DBO:代理,DB:邻居,DBO:作品将被过滤掉。
用'FILTER NOT EXISTS {?page a dbo:Agent}'取代'MINUS {?page a dbo:Agent}'也可以。 – AndyS
是的,它适用于单一类型排除。在我的情况下,它并没有帮助 – Chpokeridze