I am trying to extract a subset of a graph with a multi-hierarchy.
Example Structure:
root
/ \
SubWant subNotWant
/ \ \
childWant childWant gCWant
/ \
gCWant gCNotWant
/
gGCWant
the subWant subtree is what I would like to get (assume all {'/','\'} or broader/narrower relationships)
My current query is:
CONSTRUCT
{
?children a skos:Concept ;
skos:broader ?parent ;
skos:prefLabel ?childPrefLiteral .
}
WHERE {
?children skos:broader+ <http://example.com#subWant> ;
skos:prefLabel ?childPrefLiteral .
filter(STRBEFORE(?childPrefLiteral, " ") NOT IN (<criteria to prune by>) )
?children skos:broader ?parent ;
# filter parent to only have transitive broader relation to desired concept
?parent skos:broader+ <http://example.com#subWant>
}
This query almost works except that it will not include direct children of the subWant node. Any recommendations on how to elegantly accomplish this? Note the reason for the last triple ?parent skos:broader <http://example.com#subWant> is necessary as nodes have multiple parents (multi-hierarchy) - see gCWant node in sample graph.
Try changing
into
The difference between "*" and "+" is that "*" also matches results where
?parentis<http://example.com#subWant>.