SPARQL查詢的確切語法取決於您的數據在RDF中的建模方式。讓我們假設一類MyClass
的對象被表示爲在RDF數據庫如下,他們有一個name屬性my:name
:
@prefix my: <http://example.org/my/> .
my:object1 a my:MyClass .
my:object1 my:name "object 1" .
查詢找回在這個確切的時裝模型中的所有對象,他們的名字會看像這樣:
PREFIX my: <http://example.org/my/>
SELECT ?x ?name
WHERE {
?x rdf:type my:MyClass ;
my:name ?name .
}
SPARQL查詢工作作爲圖模式匹配器:查詢查找的三元匹配WHERE子句中指定的模式的任意組合:所以我們正在尋找˚F或兩個三元組,其中一個表示rdf:type
財產的值爲my:MyClass
,另一個表示具有相同主題的另一個三元組應該具有名爲my:name
的屬性,其中我們希望返回該值(綁定到變量?name
)。
正如您所見,它取決於您的特定RDF模型:在您的數據庫中,類的名稱(my:MyName
)和屬性名稱(my:name
)可能不同。因此,在編寫可在您的特定情況下工作的查詢之前,您需要了解如何將數據建模爲RDF。
編輯作爲一旁:SPARQL具有用於屬性rdf:type
,這是a
的簡化符號。所以位?x rdf:type my:MyClass
通常寫爲?x a my:MyClass
。我想強調一個事實,即您正在查詢三元組/屬性,這就是我使用實際屬性名稱的原因。
因爲對於不同類型的對象,謂詞(例如「name」)和對象(例如「Foo」)可以是相等的,所以我肯定需要將限制放在主語中。因此,類型信息只能在主題中找到。 – 2015-03-19 13:33:41
所以你已經知道在哪裏看。只是在你的查詢中,只要求所有不同的主題,然後你就知道你在找什麼類型。 – Artemis 2015-03-19 13:37:51
Artemis:我的問題是關於SPARQL **語法**:我知道我想要什麼,但我不知道如何在SPARQL中表達它。 – 2015-03-19 14:01:41