2017-05-03 45 views
0

我有SPARQL問題。我想從類別中選擇一些東西。例如科目。我在http://dbpedia.org/snorql中提出這樣的查詢。SPARQL - 從skos中選擇:category - Virtuoso 37000

SELECT ?category ?subject WHERE 
    { 
    ?category a skos:Concept . 
    ?category skos:Concept: American_punk_rock_guitarists. 
    ?category dct:subject ?subject . 
    } LIMIT 1000 

我有錯誤Virtuoso 37000.我不明白爲什麼。

P.S. SPARQL - 學習SPARQL,第二版 使用SPARQL 1.1查詢和更新

+0

二三折模式顯然是錯誤的。請檢查那裏的語法。 – AKSW

+0

然後,你想「從類別中選擇一些東西,例如主題」 - 這完全令人困惑,你在混合東西:屬於一個類別的東西具有類別的主題。看到下面的答案,這是正確的方法。 – AKSW

+0

爲了將來的參考,完整的錯誤文本通常比錯誤代碼本身更具啓發性。另外,至少在您學習SPARQL時,您可能會發現使用[拖放式圖形查詢構建器iSPARQL](http://dbpedia.org/isparql/)很有幫助。 – TallTed

回答

2

您至少有一個語法錯誤:第二個三元組中的第二個冒號(:)。

語義上......我並不真正瞭解dbpedia中的類或謂詞...但是可以使用skos:Concept既是一個類型又是一個謂詞?

我給你寫了一個返回類別「American_punk_rock_guitarists」的10名成員

我把這個一起前往dbpedia's faceted free text search和熟悉自己與American punk rock guitarists概念有效的查詢,具體Joey Ramone

prefix dbpcat: <http://dbpedia.org/resource/Category:> 

    SELECT ?subject ?category 
    WHERE 
     { values ?category { dbpcat:American_punk_rock_guitarists } . 
     ?subject dct:subject ?category } 
    LIMIT 10 
0

在Virtuoso 37000錯誤方面,您的錯誤如下:

  1. 您在之後 skos:概念在第2行,並且您錯過了「American_punk_rock_guitarists」的前綴。

  2. American_punk_rock_guitarists應該已經dbpcat:American_punk_rock_guitarists。雖然這是要給你一個空的結果,語法正確的版本,或者您的查詢是:

    prefix dbpcat: <http://dbpedia.org/resource/Category:> 
    
    SELECT ?category ?subject WHERE 
        { 
        ?category a skos:Concept . 
        ?category skos:Concept dbp:catAmerican_punk_rock_guitarists. 
        ?category dct:subject ?subject . 
        } LIMIT 1000 
    

    這將返回因爲下面的空集:

一個。 skos:概念是一個類,而不是一個屬性。根據{?Subject?Predicate?Object},您只能在合適的SPARQL查詢中將skos:Concept視爲?主體和/或?對象[1]。區分類和屬性的簡單方法是,類應以大寫字母(例如:skos:概念)開頭,屬性(謂詞)應以小寫字母開頭(例如:rdf:type)。

b。 dbpcat:American_punk_rock_guitarists屬於「skos:Concept」類型。如果您查看此實體(?主題)的DBPedia頁面,您將在「rdf:type」行中看到這一點。仔細觀察,你會發現這個概念是一個dct:subject各種其他實體[2]。

除了@馬克·米勒的查詢這一塊也將提供結果:

prefix dbpcat: <http://dbpedia.org/resource/Category:> 

    SELECT ?subject ?category 
    WHERE 
     { ?subject dct:subject ?category. 
     ?category a skos:Concept. 
     filter(?category = dbpcat:American_punk_rock_guitarists). 

     } 
    LIMIT 10 

SKOS:這裏不需要概念,僅僅因爲它是如何被使用的例子,如果你正在尋找的東西如「所有類型 - skos:概念」。

鏈接:

  1. https://www.w3.org/2009/08/skos-reference/skos.html#Concept
  2. http://dbpedia.org/resource/Category:American_punk_rock_guitarists