2017-07-14 12 views
1

dbpediaでは、「A」で始まるラベルのあるページをいくつか選択します。ここでは、対象を絞り込んで追加のフィルターを使用しています。元のバージョンでは、他の条件は、(結果セットがはるかに大きい)sparql複数の型階層を除外

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

    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 

The result.

OK:すべてのエージェント(人、組織など)を除外します。次に、より多くのタイプ、たとえば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

'MINUS {?page a dbo:エージェント}'を 'FILTER NOT EXISTS {?page a dbo:エージェント} 'に置き換えることもできます。 – AndyS

+0

はい、シングルタイプ除外のために機能します。私の場合は助けにならない – Chpokeridze