私は最近、OWL 推論が有効になっているトリプルストアに約 1000 万のステートメントをロードすることの実現可能性について質問しました。
これは、いくつかの StackOverflow コメントと、私の研究グループ内で、本当に OWL 推論が必要かどうかについての議論につながりました。
OWL の推論を必要としないと思われる実際のクエリから始めます。
「41167-4120-0」は、米国における市販医薬品「フェキソフェナジン塩酸塩180MG経口錠[アレグラ]」を識別するNDCコードです。
NDC のわずかに変更されたバージョンは、薬物オントロジー (具体的にはファイルdron-ndc.owl )のラベルとして表示されます。
http://purl.obolibrary.org/obo/DRON_00604430 rdfs:label "41167412000"
DrON は次の OWL アサーションを行います。
http://purl.obolibrary.org/obo/DRON_00604430 is a packaged drug product
and is rdfs:subClass of
( has_proper_part some http://purl.obolibrary.org/obo/DRON_00083688 )
http://purl.obolibrary.org/obo/DRON_00083688
rdfs:subClassOf http://purl.obolibrary.org/obo/DRON_00062350
http://purl.obolibrary.org/obo/DRON_00062350 has_proper_part some
(scattered molecular aggregate
and (is bearer of some active ingredient)
and (is bearer of some (mass and
(has measurement unit label value milligram)
and (has specified value <value> )))
and (has granular part some fexofenadine))
そして、ChEBI は次のように述べています。
http://purl.obolibrary.org/obo/CHEBI_5050 rdfs:label "fexofenadine"
subClassOf (has role some anti-allergic agent)
と
http://purl.obolibrary.org/obo/CHEBI_50857 rdfs:label "anti-allergic agent"
したがって、NDC コードと治療上の役割を関連付けるために、次のようなクエリを記述できます。
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX obo: <http://purl.obolibrary.org/obo/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
select distinct
?ndcval ?packdrugprod ?drugbrand ?brandlab ?drugform ?api ?apilab ?drugrole
where {
values ?ndcval {
"41167412000"
}
?packdrugprod rdfs:subClassOf ?hasproppart ;
rdfs:label ?ndcval .
?hasproppart a owl:Restriction ;
owl:onProperty <http://www.obofoundry.org/ro/ro.owl#has_proper_part> ;
owl:someValuesFrom ?drugbrand .
?drugbrand rdfs:subClassOf ?drugform ;
rdfs:label ?brandlab .
?drugform rdfs:subClassOf ?proppart .
?proppart a owl:Restriction ;
owl:onProperty <http://www.obofoundry.org/ro/ro.owl#has_proper_part> ;
owl:someValuesFrom ?valSource1 .
?valSource1 owl:intersectionOf ?intsect1 .
# scat mol agg
?intsect1 rdf:first obo:OBI_0000576 .
?intsect1 rdf:rest ?scatmolag .
?scatmolag rdf:first ?bearacting .
?scatmolag rdf:rest ?intsect3 .
# bearer of active ingredient
?bearacting a owl:Restriction ;
owl:onProperty obo:BFO_0000053 ;
owl:someValuesFrom obo:DRON_00000028 .
?intsect3 rdf:first ?granpart .
?intsect3 rdf:rest ?r .
# has granular part fexofenadine
?granpart a owl:Restriction ;
owl:onProperty obo:BFO_0000071 ;
owl:someValuesFrom ?api .
?api rdfs:subClassOf ?rolerestr ;
rdfs:label ?apilab .
# has anti allergic role
?rolerestr a owl:Restriction ;
owl:onProperty obo:RO_0000087 ;
owl:someValuesFrom ?drugrole .
?drugrole rdfs:label ?drlab .
values ?drugrole {
obo:CHEBI_50857
}
}
懸念:
ネストされたサブクラスの関係に理由なくアクセスするのはどうですか?
フェキソフェナジンには「抗アレルギー」の役割があると直接主張されているため、上記の例は簡単でした。
硝酸エステルを服用している人に興味がある場合はどうすればよいですか? ニトログリセリンはニトログリセロールであり、硝酸エステルです。推論を有効にせずにリポジトリを使用した場合、次のようなスニペットを使用して、プロパティ パスを明示的に使用して、硝酸エステルを服用している患者を見つける必要があります (右?)
?s rdfs:subClassOf* <http://purl.obolibrary.org/obo/CHEBI_51080> .
個体が属するクラスを推測するのはどうでしょうか?
私のオントロジーが次のように言うとどうなりますか
:ViagraPill owl:equivalentClass ( :pill
and (:hasColor some :blue )
and (:hasShape some :diamond))
:steelBlue rdfs:subClassOf :blue
そして、次のようなデータトリプルがあります
:patient1 :consumed :pill1 .
:pill1 :hasColor :steelBlue1 ;
:hasShape :diamond1 .
:steelBlue1 a :steelBlue .
:diamond1 a :diamond.
そして、バイアグラの錠剤を服用した患者に対するクエリを書きたいと思います。
?patient a :patient ;
:consumed ?pill .
?pill a :ViagraPill .
そのためには、なんらかの形の OWL 推論が必要ですよね?