Example interface to the National Library of Medicine MESH SPARQL endpoint, which returns medical synonyms using the following type of query:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX meshv: <http://id.nlm.nih.gov/mesh/vocab#>
PREFIX mesh: <http://id.nlm.nih.gov/mesh/>
PREFIX mesh2020: <http://id.nlm.nih.gov/mesh/2020/>
PREFIX mesh2019: <http://id.nlm.nih.gov/mesh/2019/>
PREFIX mesh2018: <http://id.nlm.nih.gov/mesh/2018/>
PREFIX : <urn:ex:>
SELECT DISTINCT ?synonyms
FROM <http://id.nlm.nih.gov/mesh>
WHERE {
# Which direct triples ?s match the query string?
?s ?p ?n.
# Find ancestors a few levels above. The limiting numbers {,3} mean
# only consider 3 levels at most - this is important as the number
# of ancestors/descendants are potentially large.
?possible_concepts (:|!:){,3} ?s.
# Of these ancestors, which have a direct path to the query string?
?possible_concepts (:|!:){,3} ?n.
# ..and of these, we want concepts because they contain
# synonyms of interest
[] meshv:preferredConcept ?possible_concepts.
# Find all the children of these concepts
?possible_concepts (:|!:){,3} ?all_descendants.
# Finally, enumerate labels of these concepts as synonyms of the
# input string
?all_descendants meshv:label|meshv:prefLabel|rdfs:label|meshv:altLabel ?synonyms.}