Suppose we have an ontology recording log events, with 2 distinct types of events: info
and warning
. Each entry is linked to the previous one via the non-transitive property hasPreviousEvent
as shown below:
For all the info
nodes I would like to retrieve the closest error
node, no matter how many hops back it resides. Ideally, for the above sample dataset, I would like to have the following resultset:
entry | prev |
---|---|
:info_2 | :error_1 |
:info_3 | :error_2 |
:info_4 | :error_2 |
Using SPARQL property paths, the following query
SELECT * WHERE {
?entry rdf:type :Info ;
:hasPreviousEntry* ?prev .
?prev rdf:type :Error .
} ORDER BY ?entry
reasonably retrieves the following resultset:
entry | prev |
---|---|
:info_2 | :error_1 |
:info_3 | :error_1 |
:info_3 | :error_2 |
:info_4 | :error_1 |
:info_4 | :error_2 |
I cannot find how I could have the desired results. Any help would be highly appreciated.