diff --git a/src/linkeddata_api/domain/label.py b/src/linkeddata_api/domain/label.py index c94e565..2c7b215 100644 --- a/src/linkeddata_api/domain/label.py +++ b/src/linkeddata_api/domain/label.py @@ -12,6 +12,8 @@ def get( """ Returns a label or None if no label found. """ + # TODO: Currently, we try and fetch from TERN's controlled vocabularies. + # We may want to also fetch with a SERVICE query from other repositories in the future. template = Template( """ PREFIX skos: @@ -22,15 +24,32 @@ def get( SELECT DISTINCT ?label WHERE { - VALUES (?labelProperty) { - (skos:prefLabel) - (rdfs:label) - (dcterms:title) - (schema:name) - (sdo:name) - (dcterms:identifier) + { + BIND(<{{ uri }}> as ?uri) + VALUES (?labelProperty) { + (skos:prefLabel) + (rdfs:label) + (dcterms:title) + (schema:name) + (sdo:name) + (dcterms:identifier) + } + ?uri ?labelProperty ?label . + } + UNION { + SERVICE { + BIND(<{{ uri }}> as ?uri) + VALUES (?labelProperty) { + (skos:prefLabel) + (rdfs:label) + (dcterms:title) + (schema:name) + (sdo:name) + (dcterms:identifier) + } + ?uri ?labelProperty ?label . + } } - <{{ uri }}> ?labelProperty ?label . } LIMIT 1 """ @@ -66,16 +85,32 @@ def _get_from_list_query(uris: list[str]) -> str: { SELECT DISTINCT ?uri ?label WHERE { - BIND(<{{ uri }}> as ?uri) - VALUES (?labelProperty) { - (skos:prefLabel) - (rdfs:label) - (dcterms:title) - (schema:name) - (sdo:name) - (dcterms:identifier) + { + BIND(<{{ uri }}> as ?uri) + VALUES (?labelProperty) { + (skos:prefLabel) + (rdfs:label) + (dcterms:title) + (schema:name) + (sdo:name) + (dcterms:identifier) + } + ?uri ?labelProperty ?label . + } + UNION { + SERVICE { + BIND(<{{ uri }}> as ?uri) + VALUES (?labelProperty) { + (skos:prefLabel) + (rdfs:label) + (dcterms:title) + (schema:name) + (sdo:name) + (dcterms:identifier) + } + ?uri ?labelProperty ?label . + } } - ?uri ?labelProperty ?label . } LIMIT 1 }