Patricio
Patricio

Reputation: 1

RDF/SKOS concept hierarchy as Python dictionary

In Python, how do I turn RDF/SKOS taxonomy data into a dictionary that represents the concept hierarchy only?

The dictionary must have this format:

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

I tried using RDFLib with JSON plugins, but did not get the result I want.

Upvotes: 0

Views: 837

Answers (1)

Joshua Taylor
Joshua Taylor

Reputation: 85843

I'm not much of a Python user, and I haven't worked with RDFLib, but I just pulled the SKOS and vocabulary from the SKOS vocabularies page. I wasn't sure what concepts (RDFS or OWL classes) were in the vocabulary, nor what their hierarchy was, so I ran this a SPARQL query using Jena's ARQ to select classes and their subclasses. I didn't get any results. (There were classes defined of course, but none had subclasses.) Then I decided to use both the SKOS and SKOS-XL vocabularies, and to ask for properties and subproperties as well as classes and subclasses. This is the SPARQL query I used:

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

The results I got were

-------------------------------------------------------------------------------------------------------------------
| 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                    |
-------------------------------------------------------------------------------------------------------------------

It looks like there's not much concept hierarchy in SKOS at all. Could that explain why you didn't get the results you wanted before?

Upvotes: 1

Related Questions