2013-08-12 52 views
3

我使用的是schema.org本體。我想返回<http://schema.org/Event>的子類和每個返回的子類的子數。我的查詢當前正在返回一個子類。SPARQL查找孫子的數量

PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#> 
SELECT ?uri (count(?children) as ?childrenCount) WHERE 
{ 
    ?uri rdfs:subClassOf <http://schema.org/Event>. 
    ?children rdfs:subClassOf ?uri 
} 
GROUP BY ?uri 

我想它有子女的數量<http://schema.org/Event>每個子類中。

+0

你從那個查詢中得到了什麼結果?我得到一個類'UserInteraction'和一個'9'。我可以看到(並在我的回答中解釋了)爲什麼你沒有看到更多的課程,但我沒有看到這一計數有什麼不正確。你期待什麼價值?如果我們不知道你是否認爲我們得到的結果是正確的或不正確的,那麼很難解決問題。 –

+0

是的,我誤解了孫子們的錯誤,會編輯問題。 – rumplestilskin

回答

2

你沒有提到「它的孩子的錯誤數量」是什麼。當我在schema.org OWL document運行查詢,我得到這些結果:

------------------------------------------------------- 
| uri         | childrenCount | 
======================================================= 
| <http://schema.org/UserInteraction> | 9    | 
------------------------------------------------------- 

我認爲這個數是正確的。如果您預計的計數不同,請將問題更新爲,您計劃的是什麼,以及爲什麼。根據schema.org Full Hierarchy頁面顯示這個層次結構,其中Event的唯一孫子類是UserInteraction的子女,並且其中有9個。

type hierarchy for Event from schema.org

在任何情況下,你沒有看到在這個列表的詳細結果的原因是,查詢現在只發現其實自己的孩子的孩子,這顯著限制你的結果。如果您想選擇自己沒有子女的Event的子女,您可以選擇模式中Event的孫子女。爲了說明:

prefix schema: <http://schema.org/> 
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> 

select * where { 
    ?child rdfs:subClassOf schema:Event . 
    optional { 
    ?grandchild rdfs:subClassOf ?child 
    } 
} 

生產:

$ arq --data schemaorg.owl --query query.sparql 
-------------------------------------------------- 
| child     | grandchild   | 
================================================== 
| schema:FoodEvent  |      | 
| schema:Festival  |      | 
| schema:SportsEvent  |      | 
| schema:SaleEvent  |      | 
| schema:EducationEvent |      | 
| schema:ChildrensEvent |      | 
| schema:DanceEvent  |      | 
| schema:BusinessEvent |      | 
| schema:TheaterEvent |      | 
| schema:SocialEvent  |      | 
| schema:VisualArtsEvent |      | 
| schema:MusicEvent  |      | 
| schema:ComedyEvent  |      | 
| schema:LiteraryEvent |      | 
| schema:UserInteraction | schema:UserCheckins | 
| schema:UserInteraction | schema:UserTweets  | 
| schema:UserInteraction | schema:UserLikes  | 
| schema:UserInteraction | schema:UserPlays  | 
| schema:UserInteraction | schema:UserDownloads | 
| schema:UserInteraction | schema:UserPlusOnes | 
| schema:UserInteraction | schema:UserComments | 
| schema:UserInteraction | schema:UserBlocks  | 
| schema:UserInteraction | schema:UserPageVisits | 
-------------------------------------------------- 

大多數Event子類沒有任何類;只有UserInteraction呢。這就是說,現在我們看到如何找到這些類,即使他們沒有小類,計數應該與查詢落入地方很像你原來的:

prefix schema: <http://schema.org/> 
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> 

select ?child (count(?grandchild) as ?nGrandchildren) where { 
    ?child rdfs:subClassOf schema:Event . 
    optional { 
    ?grandchild rdfs:subClassOf ?child 
    } 
} 
group by ?child 

的結果,當然,顯示大部分類別爲零,而對於UserInteraction顯示爲零。

$ arq --data schemaorg.owl --query query.sparql 
------------------------------------------- 
| child     | nGrandchildren | 
=========================================== 
| schema:ComedyEvent  | 0    | 
| schema:ChildrensEvent | 0    | 
| schema:SportsEvent  | 0    | 
| schema:FoodEvent  | 0    | 
| schema:BusinessEvent | 0    | 
| schema:Festival  | 0    | 
| schema:EducationEvent | 0    | 
| schema:LiteraryEvent | 0    | 
| schema:SaleEvent  | 0    | 
| schema:TheaterEvent | 0    | 
| schema:SocialEvent  | 0    | 
| schema:UserInteraction | 9    | 
| schema:MusicEvent  | 0    | 
| schema:DanceEvent  | 0    | 
| schema:VisualArtsEvent | 0    | 
------------------------------------------- 
+0

偉大的答案謝謝!這就是我想要的,即使計數是「0」,也可以用他們的計數來檢索孫子女。 – rumplestilskin