2016-09-27 130 views
1

我有簡單的RDF數據集,具有以下值:用戶,網址,時間和IP。我可以列出所有的數據使用:獲取具有特定屬性的所有數據SPARQL

SELECT DISTINCT * WHERE { ?s ?p ?o } 

但現在我需要列出所有的數據與特定的用戶。如果來自查詢的數據與來自上面的查詢的數據格式相同但我們不需要,我將非常感激。
我想這和一些修改,這一點,但它沒有一個似乎工作:

SELECT DISTINCT * WHERE { ?s ?p ?o. ?u foaf:user username. } 

我剛開始與耶拿和SPARQL和任何幫助的工作將非常感激。提前致謝。

編輯:@AKSW foaf:user工作,因爲foaf是我自己的前綴我定義。我努力使查詢工作,並不知道我在做什麼。這是我還沒有清理的東西。
我最終使用查詢SELECT DISTINCT * WHERE {?u foaf:name USER_NAME_LITERAL . ?u ?p ?o . }這是你建議的,所以謝謝。如果您將其作爲回答發佈,我會將其標記爲已接受。

+1

RDF中的資源由URI標識,因此您的用戶也是。 'SELECT DISTINCT * WHERE {?p?o}'。 – AKSW

+1

SPARQL查詢重新使用變量名稱,以便它們連接三重模式,並且一般會構建一個圖形。您的第二個查詢由兩個未連接的三元模式組成。 – AKSW

+1

不知道'foaf:user'應該是什麼,但是在FOAF中沒有這樣的屬性。 'foaf:name'是一個常見的屬性:http://xmlns.com/foaf/spec/ – AKSW

回答

1

假設你的數據集包括:Record類的記錄與領域:user:url:time:ip

SELECT * { ?r ?p  ?o; 
       a  :Record; 
       :user ?u. 
      ?u :name "your user name". 
      } 

或者,假設你知道用戶的URI是:user123:

SELECT * { ?r ?p  ?o; 
       a  :Record; 
       :user :user123. 
      } 

注:這是對AKSW評論的總結。我使用默認前綴:而不是foaf:,因爲這可能會導致其他人認爲它是已存在的foaf「朋友的朋友」詞彙的一部分。在這種情況下,WHERE關鍵字總是可以省略,並且DISTINCT關鍵字不應該是必需的,除非出現異常情況,例如多個圖中包含相同的三元組。

+0

謝謝你的回答,這非常有幫助,因爲它爲我提供了更多的見解。在我的例子中,整個'foaf'只是我開始學習SPARQL時所做的一切。在目前的版本中,它已被修復。當我使用AKSW解決方案時,如果他決定發表評論作爲答案,我會等待,但如果他不這樣做,我會接受你的答案,因爲它也有幫助,即使我遇到的問題已經解決了。比你再次。 – lsrom

相關問題