SPARQL-запрос не работает - онтология SNOMED-CT

Я пытаюсь выполнить очень простой 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") )
}

1 ответ

Решение

Единственное появление rdfs:label в СНОМЕД-КТ на Биопортале есть 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.

Другие вопросы по тегам