sparql - 使用 SPARQL 从 Turtle 文件中提取同义词和标签

标签 sparql turtle-rdf

我正处于 SPARQL 的学习阶段。我正在使用 Turtle 文件提取一些信息。条件是:如果确切的同义词有一个子字符串 'stroke' 或 'Stroke',查询应该返回所有的同义词和 rdfs:label

我正在使用以下查询但没有得到输出:

prefix oboInOwl: <http://www.geneontology.org/formats/oboInOwl#>
prefix obo: <http://purl.obolibrary.org/obo/>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
               
Select * where { 
  ?s ?p ?o . 
  rdfs:label <http://www.geneontology.org/formats/oboInOwl#hasExactSynonym> "stroke"^^xsd:string
}

下面是示例 Turtle 文件:

###  https://ontology.aaaa.com/aaaa/meddra_10008196

:meddra_10008196 
  rdf:type owl:Class ;
  <http://www.geneontology.org/formats/oboInOwl#hasDbXref> "DOID:6713" , "EFO:0000712" , "EFO:0003763" , "HE:A10008190" ;
  <http://www.geneontology.org/formats/oboInOwl#hasExactSynonym> 
    "(cva) cerebrovascular accident" , 
    "Acute Cerebrovascular Accident" , 
    "Acute Cerebrovascular Accidents" , 
    "Acute Stroke" , 
    "Acute Strokes" ;
  rdfs:label "Cerebrovascular disorder"@en ;
  :hasSocs "Nervous system disorders [meddra:10029205]" , "Vascular disorders [meddra:10047065]" ;
  :uid "6e46da69b727e4e924c31027cdf47b8a" .

我期待这样的输出:

(cva) cerebrovascular accident
Acute Cerebrovascular Accident
Acute Cerebrovascular Accidents
Acute Stroke
Acute Strokes
Cerebrovascular disorder

最佳答案

使用这个三重模式,您正在查询 rdfs:label 作为主语,而不是作为谓语:

rdfs:label <http://www.geneontology.org/formats/oboInOwl#hasExactSynonym> "stroke"^^xsd:string

您要问的是:“资源 rdfs:label 是否具有字符串值为 'stroke' 的属性 oboInOwl:hasExactSynonym?”

但是你想问这个关于类的问题(例如,:meddra_10008196),而不是 rdfs:label:

?class oboInOwl:hasExactSynonym "stroke" .

寻找匹配项

因为你不想只找到完全匹配的字符串,你可以使用 CONTAINS :

?class oboInOwl:hasExactSynonym ?matchingSynonym .
FILTER( CONTAINS(?matchingSynonym, "stroke") ) .

因为要忽略大小写,可以用LCASE查询小写同义词:

?class oboInOwl:hasExactSynonym ?matchingSynonym .
FILTER( CONTAINS(LCASE(?matchingSynonym), "stroke") ) .

显示结果

要在同一列中显示标签和所有同义词,您可以使用带有 | ( AlternativePath ) 的属性路径:

?class rdfs:label|oboInOwl:hasExactSynonym ?labelOrSynonym .

完整查询

# [prefixes]

SELECT ?class ?labelOrSynonym
WHERE {

  ?class rdfs:label|oboInOwl:hasExactSynonym ?labelOrSynonym .

  FILTER EXISTS {
    ?class oboInOwl:hasExactSynonym ?matchingSynonym .
    FILTER( CONTAINS(LCASE(?matchingSynonym), "stroke") ) .
  }

}

关于sparql - 使用 SPARQL 从 Turtle 文件中提取同义词和标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74118096/

相关文章:

rdf - RDF 与海龟的文本表示

xml - 如何在 QName 中表示逗号(尤其是在 Turtle 文档中)

java - 在 DBPedia 中查询具有给定属性集的实体

sparql - 我如何使 sparql 查询仅关于数据类型名称?

java - 正则表达式 SPARQL 查询

java - 本地 Blazegraph : Expected an RDF value here, 上的维基数据发现 '' [第 1 行]

sparql - 在海龟或 RDF 中,我可以在符合条件的所有主题上添加谓词/宾语吗?

Sparql-如何获得三元组的数量?

java - 从查询中选择多个结果

Java - 使用 Jena APi - 从 RDF 文件获取数据