1

我正在尝试执行一个非常简单的 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") )
}
4

1 回答 1

2

rdfs:labelBioPortal 上的 SNOMED-CT 中唯一出现的是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 属性路径。

于 2018-04-17T11:49:14.333 回答