2012-11-12 64 views
1

我想獲得個人所屬的課程。更詳細地說,我想傳遞一個參數給一個使用python的個人(使用rdflib),方法應該返回它所屬的個人的類。使用SPARQL獲得個人課程

例如:我有一個AlcoholicBeverage類,它有子類Beer和Beer類有一個子類Brands。在品牌類中,有很多代表啤酒品牌的個人。 我想將一個參數傳遞給一個方法,運行SPARQL查詢來查找,xyz是Brands類的一個個體。

理想情況下,我也想得到,xyz是一個啤酒(因爲品牌類是啤酒的子類)和啤酒是酒精飲料。

感謝您的幫助。

回答

2

關於如何:

SELECT ?class WHERE { xyz a ?class . } 

注意ardf:type的簡寫 - 看到SPARQL specification第4.2.4

你只能從這個查詢獲得超(AlcoholicBeverage,啤酒),如果他們已經明確添加到RDF模型中,或者如果您有inference enabled(並且模式已加載到模型中),以便它們隱式添加。

您的模式有點奇怪 - 啤酒顯然是AlcoholicBeverage的一個子類,但品牌是什麼?爲什麼不讓每個品牌成爲啤酒的一個子類別(暗示個人是真正的物理飲料:「這種飲料是一種啤酒」Old Peculier),或使每個品牌成爲啤酒的一個個體:「Old Peculier是啤酒「, 例如。品牌似乎是一種在正式模式中沒有意義的非正式佔位符?爲什麼品牌是複數,當你的其他類名稱單數?

+0

感謝您的回覆和建議。我相信我的問題是,我不能以正確的方式引用xyz。沒有過濾器部分,下面的查詢工作正常,但與FILTER部分,它什麼都不返回。我如何在.owl文件中引用一個類或個人? PREFIX owl:[link](http://goo.gl/ZwwgT) SELECT?class WHERE {?sub rdfs:subClassOf?class。 FILTER(?sub = owl:Brands)} –