2017-07-14 29 views
1

在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 

sparql results

这里我只选择页面类型为与问题的其余部分明确。 这是整套。现在我想排除一些页面。排除所有代理(个人,组织等):

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 

The result.

确定。然后我想排除更多类型,例如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 } 
    } 

的问题是: 我应该去什么样的方式来排除特定类型的网页(直接和超类)?

回答

2

它看起来是这样的工作答案(如何排除类型的倍数)

{ 
     ?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:作品将被过滤掉。

+0

用'FILTER NOT EXISTS {?page a dbo:Agent}'取代'MINUS {?page a dbo:Agent}'也可以。 – AndyS

+0

是的,它适用于单一类型排除。在我的情况下,它并没有帮助 – Chpokeridze