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
這裏我只選擇頁面類型爲與問題的其餘部分明確。 這是整套。現在我想排除一些頁面。排除所有代理(個人,組織等):
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 }
}
的問題是: 我應該去什麼樣的方式來排除特定類型的網頁(直接和超類)?
用'FILTER NOT EXISTS {?page a dbo:Agent}'取代'MINUS {?page a dbo:Agent}'也可以。 – AndyS
是的,它適用於單一類型排除。在我的情況下,它並沒有幫助 – Chpokeridze