sparql排除多个类型层次结构

时间:2017-07-14 11:28:26

标签: sparql dbpedia

在dbpedia中,我选择一些标签以' A'开头的页面。在这里,我使用额外的过滤器来缩小集合。在原始版本中还有另一个条件(结果集更大)

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 }
   }

问题是: 我应该以什么方式排除某些类型的网页(直接和超类)?

1 个答案:

答案 0 :(得分: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:Agents,db:Places,dbo:Works将被过滤掉。