SKOS displays w/ SPARQL
I’m just in the process of getting my head around SPARQL a bit more. At $work, Clay and I ran up against a situation where we wanted a query that would return a subgraph from an entire SKOS concept scheme for any assertions involving a particular concept URI as the subject. Easy enough right?
DESCRIBE <http://lcsh.info/sh96010624#concept>
The thing is, for human readable displays we don’t want to display the URIs for related concepts (skos:broader, skos:narrower or skos:related) … we want to display the nice skos:prefLabel for them. Something akin to:
So how can we get a subgraph for a concept as well as any concept that might be directly related to it, in a single query? We came up with the following but I’d be interested in more elegant solutions:
PREFIX skos: <http://www.w3.org/2004/02/skos/core#> CONSTRUCT {<http://lcsh.info/sh96010624#concept> ?p1 ?o1. ?s2 ?p2 ?o2} WHERE { {<http://lcsh.info/sh96010624#concept> ?p1 ?o1.} UNION { {<http://lcsh.info/sh96010624#concept> skos:narrower ?s2.} {?s2 ?p2 ?o2.} } UNION { {<http://lcsh.info/sh96010624#concept> skos:broader ?s2.} {?s2 ?p2 ?o2.} } UNION { {<http://lcsh.info/sh96010624#concept> skos:related ?s2.} {?s2 ?p2 ?o2.} } }
The above ran quite nicely in my Arc playground. Any suggestions or ideas on how to boil this down would be appreciated. I also wanted to jot this query in the likely event that I forget how I did it.