2013-05-10 67 views
0

在Python中,如何將RDF/SKOS分類數據轉換爲僅表示概念層次結構的字典?作爲Python詞典的RDF/SKOS概念層次結構

字典必須有這樣的格式:

{ 'term1': [ 'term2', 'term3'], 'term3': [{'term4' : ['term5', 'term6']}, 'term6']} 

我嘗試使用RDFLib使用JSON插件,但沒有得到我想要的結果。

+0

你試過什麼「使用帶有JSON插件的RDFLib」?結果不是你想要的結果是什麼? – 2013-05-11 12:46:27

+0

你想要什麼格式?第一個條目看起來像沒有嵌套條目的「class:[direct-subclass-1,direct-subclass-2]」(例如,從第二個條目開始,我們知道term3具有子條目,但它們未列出在第一個條目中,然而,在第二個條目中,term4的條目是嵌套的。你想要的格式是什麼?如果它只是'{subclass_i:[direct-subclass_ij] ...}',那應該不會太難任何可以讓你查詢子類的庫 – 2013-05-11 12:50:01

+0

正如Joshua所說,你需要添加更多的上下文並更精確地定義你的目標,如果你添加了應該轉換成所需格式的SKOS,這將會有所幫助。 – 2013-05-12 18:22:38

回答

1

我不是一個Python用戶,我沒有使用RDFLib,但我只是從SKOS vocabularies page中提取SKOS和詞彙。我不確定詞彙中有什麼概念(RDFS或OWL類),也不知道它們的層次結構是什麼,所以我使用Jena的ARQ來運行這個SPARQL查詢來選擇類和它們的子類。我沒有得到任何結果。 (當然有類定義,但沒有任何子類。)然後,我決定使用SKOS和SKOS-XL詞彙表,並要求提供屬性和子屬性以及類和子類。這是SPARQL查詢我所用:

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
PREFIX skos: <http://www.w3.org/2004/02/skos/core#> 
SELECT ?property ?subproperty ?class ?subclass WHERE { 
    { ?subclass rdfs:subClassOf ?class } 
    UNION 
    { ?subproperty rdfs:subPropertyOf ?property } 
} 
ORDER BY ?class ?property 

我得到的結果是

------------------------------------------------------------------------------------------------------------------- 
| property    | subproperty    | class   | subclass         | 
=================================================================================================================== 
| rdfs:label    | skos:altLabel   |     |           | 
| rdfs:label    | skos:hiddenLabel  |     |           | 
| rdfs:label    | skos:prefLabel   |     |           | 
| skos:broader   | skos:broadMatch   |     |           | 
| skos:broaderTransitive | skos:broader   |     |           | 
| skos:closeMatch   | skos:exactMatch   |     |           | 
| skos:inScheme   | skos:topConceptOf  |     |           | 
| skos:mappingRelation | skos:broadMatch   |     |           | 
| skos:mappingRelation | skos:closeMatch   |     |           | 
| skos:mappingRelation | skos:narrowMatch  |     |           | 
| skos:mappingRelation | skos:relatedMatch  |     |           | 
| skos:narrower   | skos:narrowMatch  |     |           | 
| skos:narrowerTransitive | skos:narrower   |     |           | 
| skos:note    | skos:changeNote   |     |           | 
| skos:note    | skos:definition   |     |           | 
| skos:note    | skos:editorialNote  |     |           | 
| skos:note    | skos:example   |     |           | 
| skos:note    | skos:historyNote  |     |           | 
| skos:note    | skos:scopeNote   |     |           | 
| skos:related   | skos:relatedMatch  |     |           | 
| skos:semanticRelation | skos:broaderTransitive |     |           | 
| skos:semanticRelation | skos:mappingRelation |     |           | 
| skos:semanticRelation | skos:narrowerTransitive |     |           | 
| skos:semanticRelation | skos:related   |     |           | 
|       |       | _:b0   | <http://www.w3.org/2008/05/skos-xl#Label> | 
|       |       | skos:Collection | skos:OrderedCollection     | 
------------------------------------------------------------------------------------------------------------------- 

它看起來像有在SKOS很多概念層次不是在所有。這能解釋爲什麼你沒有得到你想要的結果嗎?