我有一個複雜的OWL本體與許多類。我需要使用什麼SPARQL查詢來獲取一個OWL類(例如,Person類)的數據和對象屬性?如何使用SPARQL獲取OWL類的數據和對象屬性?
回答
除了Jukka Matilainen's answer,有一些應該加以考慮的幾點。 OWL不是面向對象的編程語言,類和屬性的概念與面向對象編程語言中的類和屬性不同。當我們斷言
p rdfs:domain C
我們沒有做任何限制個人,p
可以有一個值。也就是說,它是不相矛盾的,如果我們看到
x p something
,我們不知道x
是一個C
。事實上,我們實際上是在說,當我們說p
的域名C
是,任何時候我們有一個三重的形式x p something
,我們可以推斷這是x
一個C
。當與rdfs:subClassOf
推理規則相結合
x p _ p rdfs:domain C
------------------------- [1]
x rdf:type C
這有一些潛在的令人吃驚的結果:我們可以將這個作爲三元組的推理規則。尤其要記住的是,當C rdfs:subClassOf D
,這意味着任何時候我們有一個C
的實例,我們可以推斷它也是D
的一個實例。作爲推理規則:
x rdf:type C C rdfs:subClassOf D
----------------------------------- [2]
x rdf:type D
爲什麼這會導致令人驚訝的結果?那麼,這意味着如果p
的域是C
,並且C
是D
的子類,那麼說D
是的(或a)域也是合法的。爲什麼會這樣?那麼,假設x p _
,那p rdfs:domain C
,和那個C rdfs:subClassOf D
。那麼,通過上面的規則[1]
,我們有那個x rdf:type C
。但後來因爲C
是D
的子類,我們也有x rdf:type D
。由於x
是任意的,因此我們只要有x p _
,我們也有x rdf:type D
,但這正是p rdfs:domain D
的意思。
這意味着如果您嘗試檢索所有具有foaf:Person
作爲域的屬性,則需要使用OWL推理器,而不僅僅是SPARQL查詢,如果您需要所有結果。只是要求聲明域名爲foaf:Person
的內容不一定會找到所有結果。
有一個accepted answer用SPARQL查詢,但我還注意到,它可以通過使用values
,而不是使用
{ ?property a owl:DatatypeProperty } UNION { ?property a owl:ObjectProperty }
被清理了一下由於意圖是?property
有兩個值之一作爲rdf:type
,我們可以縮短查詢是:
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
SELECT ?property
FROM <http://xmlns.com/foaf/spec/index.rdf>
WHERE {
values ?propertyType { owl:DatatypeProperty owl:ObjectProperty }
?property a ?propertyType ;
rdfs:domain foaf:Person .
}
如上所述,你可能要包括其聲明域是foaf:Person
的子類的任何屬性,雖然我們無法使用SPARQL查詢計算整個OWL類層次結構,但我們至少可以使用屬性路徑:
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
SELECT ?property
FROM <http://xmlns.com/foaf/spec/index.rdf>
WHERE {
values ?propertyType { owl:DatatypeProperty owl:ObjectProperty }
?property a ?propertyType ;
rdfs:domain/rdfs:subClassOf* foaf:Person .
}
如果您想查詢OWL本體(例如FOAF ontology)以找出具有聲明爲其域的給定類(例如foaf:Person)的數據類型屬性和對象屬性,則可以使用SPARQL查詢這樣的:
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
SELECT ?property
FROM <http://xmlns.com/foaf/spec/index.rdf>
WHERE {
{ ?property a owl:DatatypeProperty } UNION { ?property a owl:ObjectProperty }
?property rdfs:domain foaf:Person
}
謝謝Jukka,這個查詢可以很好地工作並解決我的問題。 – user1794211
請注意,您可以在這裏使用'values'而不是'union',如'select ... {values?propertyType {owl:DatatypeProperty owl:ObjectProperty}?property a?propertyType; rdfs:domain foaf:Person。 }'。 –
- 1. 如何使用SPARQL獲取數據類型屬性值
- 2. 在OWL Api中獲取對象屬性的超級屬性4
- 3. OWL類表達對數據屬性
- 4. 製作OWL數據和對象屬性相同屬性的子屬性
- 5. 如何使用OWL API獲取對象屬性聲明的註釋
- 6. 如何獲得數據屬性在SPARQL
- 7. 如何用Sparql中的對象屬性查詢類
- 8. 如何使用SPARQL查詢獲取.owl文件中的所有可用類?
- 9. 使用sparql請求獲取xml:lang屬性
- 10. OWL:定義一個類的屬性和成員對象
- 11. 如何將RDF圖形屬性轉換爲OWL對象屬性?
- 12. 如何根據獲取的JSON對象爲類定義屬性?
- 13. 如何在sparql中獲取個人數據屬性值
- 14. 如何使用屬性的類對象
- 15. 如何查詢OWL的所有屬性:使用SPARQL的dbpedia的事情?
- 16. 如何使用rowlex提取有關owl文件的類和屬性的信息?
- 17. 使用NSFetchedResultsController獲取對象的屬性
- 18. 使用從MongoDB獲取的新數據更新對象屬性
- 19. 如何使用類對象從數據庫中獲取數據?
- 20. 如何獲取Grails域對象的屬性的類型(類)?
- 21. 獲取核心數據對象的子對象的屬性?
- 22. Javascript:如何使用字符串數組獲取對象屬性?
- 23. Python:如何用getattr獲取對象屬性的屬性?
- 24. 使用OWL API 4.0檢索具有相同對象屬性的OWL個體
- 25. 使用propertyinfo對象獲取屬性值
- 26. 使用XML對象獲取xml:id屬性
- 27. 使用標籤獲取對象屬性
- 28. 獲取對象的屬性
- 29. 獲取對象的屬性
- 30. 獲取對象的屬性和值recursivly
類沒有對象和數據屬性。相反,個人具有對象和數據屬性的值。堆棧溢出問題需要比這個更具體一些;你能否舉一個你想要的數據類型的例子,以及你想要返回的結果? –
我只是想要一個查詢來列出任何OWL本體中的一個OWL類的所有數據和對象屬性。下面的Jukka已經理解了我的問題並給出了一個解決方案。 – user1794211
因爲OWL類沒有屬性,所以談論「自己的OWL類的數據和對象屬性」是不正確的。我在我的回答中已經解釋了更多關於此的內容,並且還提供了一個稍微修改的SPARQL查詢。 –