Я пытаюсь выполнить очень простой запрос SPARQL для получения информации о конкретном заболевании с помощью https://bioportal.bioontology.org/ontologies/SNOMEDCT/?p=classes&conceptid=root (в Java) на основе имени, переданного в строке запроса, и я не понимаю, почему он не работает. Вот соответствующий код:
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT DISTINCT *
FROM <http://bioportal.bioontology.org/ontologies/SNOMEDCT>
FROM <http://bioportal.bioontology.org/ontologies/globals>
WHERE
{
?x rdfs:label ?label .
FILTER (CONTAINS ( UCASE(str(?label)), "MELANOMA") )
}





Единственное появление rdfs:label в SNOMED-CT на BioPortal - это snomed-term: rdfs:label "SNOMEDCT". Вместо этого BioPortal используетskos:prefLabel (который является подсвойствоrdfs:label).
Попробуйте этот запрос:
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX snomed-term: <http://purl.bioontology.org/ontology/SNOMEDCT/>
SELECT DISTINCT *
FROM <http://bioportal.bioontology.org/ontologies/SNOMEDCT>
FROM <http://bioportal.bioontology.org/ontologies/globals>
WHERE {
?x skos:prefLabel ?label .
FILTER (CONTAINS ( UCASE(str(?label)), "MELANOMA") )
}
Должно быть 10 результатов.
Если вам нужно ограничить результаты до болезни, возможно, вам придется добавить ?x rdfs:subClassOf+ snomed-term:64572001 к вашему запросу. Но, к сожалению, похоже, что конечная точка BioPortal SPARQL не поддерживает пути свойств SPARQL 1.1.
@ela, я полагаю, вы имеете в виду :267038008, :79654002 и :423666004. Что ж, BioPortal сказать: «Частичные или неполные результаты. Sparql.bioontology.org использует внутренний механизм soft-limit 4store для ограничения ресурсов для дорогостоящих запросов». и т.д. FILTER (?label = "Edema"@en) работает лучше. Или используйте свою собственную локальную конечную точку.
Большое спасибо. Я очень признателен за всю помощь, которую вы мне оказали с моими ошибками.
Вы хоть представляете, почему он не возвращает все результаты? Например, если я заменю
FILTER (CONTAINS ( UCASE(str(?label)), "MELANOMA") )наFILTER ( STR(?prefLabel) = "Edema"), я не получу никаких результатов, хотя при ручном поиске по онтологии есть 3 результата.