在这个级别的工作中,我需要从MeSH本体中提取一个类同义词。 我正在寻找SPARQL查询的正确语法:它们如何存储在MeSH中的同义词?以及如何提取它们?
答案 0 :(得分:8)
我不确定你的同义词是什么意思。但是在看了MeSH本体之后(从here下载)。我运行以下查询来列出所有不同的谓词:
SELECT DISTINCT ?p where { ?s ?p ?o }
......我得到......
<http://www.w3.org/2004/02/skos/core#historyNote>
<http://www.nlm.nih.gov/mesh/2006#considerAlso>
<http://www.nlm.nih.gov/mesh/2006#recordAuthorizer>
<http://www.nlm.nih.gov/mesh/2006#dateEstablished>
<http://www.nlm.nih.gov/mesh/2006#dateCreated>
<http://www.nlm.nih.gov/mesh/2006#onlineNote>
<http://www.nlm.nih.gov/mesh/2006#activeMeSHYear>
<http://www.nlm.nih.gov/mesh/2006#historyNote>
<http://www.w3.org/2004/02/skos/core#related> <<<---
<http://www.w3.org/2004/02/skos/core#broader> <<<---
<http://www.nlm.nih.gov/mesh/2006#recordMaintainer>
<http://www.w3.org/2004/02/skos/core#scopeNote>
<http://www.w3.org/2004/02/skos/core#altLabel>
<http://www.w3.org/2004/02/skos/core#prefLabel>
<http://www.nlm.nih.gov/mesh/2006#preferredCombination> <<<---
<http://www.nlm.nih.gov/mesh/2006#publicMeSHNote>
<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>
<http://www.w3.org/2004/02/skos/core#annotation>
<http://www.w3.org/2004/02/skos/core#hiddenLabel>
<http://www.nlm.nih.gov/mesh/2006#recordOriginator>
<http://www.nlm.nih.gov/mesh/2006#runningHead>
<http://www.nlm.nih.gov/mesh/2006#dateRevised>
... <<<---
的谓词让我想到了资源之间的某种排序关系。
例如,如果我们使用以下查询尝试skos:related
:
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?slabel ?olabel
WHERE {
?s skos:related ?o .
?s skos:prefLabel ?slabel .
?o skos:prefLabel ?olabel .
}
我们得到像......
"Anesthetics" "Adjuvants, Anesthesia"
"Prostatic Neoplasms" "Prostate-Specific Antigen"
"Elbow" "Tennis Elbow"
"Uterine Hemorrhage" "Menorrhagia"
"Ecology" "Environmental Health"
"Endocarditis, Bacterial" "Aneurysm, Infected"
( .... and many more )
如果您使用以下查询尝试skos:broader
(省略前缀)。请注意,skos:broader
用于定义概念的层次结构,因此它具有与skos:related
不同的语义
SELECT ?slabel ?olabel
WHERE {
?s skos:broader ?o .
?s skos:prefLabel ?slabel .
?o skos:prefLabel ?olabel .
}
你得到了......
"Healthy People Programs" "Health Promotion"
"Suggestion" "Hypnosis"
"Sodium Iodide" "Iodides"
"Unnecessary Procedures" "Health Services Misuse"
"Bornanes" "Norbornanes"
"Prajmaline" "Ajmaline"
"Vestibular Nerve" "Vestibulocochlear Nerve"
"Adenolymphoma" "Neoplasms, Complex and Mixed"
"Child, Gifted" "Child, Exceptional"
"Tooth Germ" "Tooth Components"
"Breast Self-Examination" "Self-Examination"
( ... and many more)
一句话,如果您不知道架构运行some exploratory queries并尝试查看其中的内容。
编辑:查询OWL文件
@safé我认为你是对的,你正在使用的OWL文件中的类之间没有这种关系。
以下查询为您提供了所有OWL类:
SELECT DISTINCT ?p WHERE { ?s a <http://www.w3.org/2002/07/owl#Class> . }
...而另一个给出了在任何类中使用的所有谓词:
SELECT DISTINCT ?p WHERE {
?s a <http://www.w3.org/2002/07/owl#Class> .
?s ?p ?o }
...这最后一个查询只返回:
<http://www.w3.org/2000/01/rdf-schema#subClassOf>
<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>
实际上,在该OWL文件中,您只有以下内容:
<http://org.snu.bike/MeSH#antimony_sodium_gluconate> rdf:type owl:Class .
和......
<http://org.snu.bike/MeSH#antimony_sodium_gluconate> rdfs:subClassOf <http://org.snu.bike/MeSH#gluconate>.
这意味着在该OWL文件中唯一声明的是类的层次结构,并且没有声明同义词。
如果你想以某种方式提取所有子类...
SELECT * WHERE {
?subClass <http://www.w3.org/2000/01/rdf-schema#subClassOf> ?upperClass
}