1

私は最近、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 推論が必要ですよね?

4

1 に答える 1

2

OBO やその他の生物、生命科学、農学が何百万ものクラスを使用する傾向があるといつも思っていましたが、個人がほとんどいないのは間違いです。

上記のモデリングは、アレグラのすべてのインスタンス (すべての単一の錠剤、箱、またはその他のパッケージ) について、「それは分散した分子集合体である」、「何らかの有効成分の担い手である」、「粒状部分にフェキソフェナジンがある」などのステートメントを推測する必要があることを意味します。 "。これはもったいないと思います。

これらのステートメントを医薬品の定義に直接添付することをお勧めします。制限としてではなく、単純なステートメントとしてです。次の 2 つの方法でそれを行うことができます。

  1. Allegra は引き続きクラスとして扱いますが、しゃれを使用して小道具を直接アタッチします。
  2. アレグラを例として扱い、個々の錠剤を説明する必要がある場合は、次のようなステートメントを使用しますpill dct:type Allegra

次に、そのドラッグ (クラスまたは非クラス) を介して単純にピルのプロパティにアクセスできます。

?pill rdf:type ?drug. # or in Variant2: dct:type
?drug obo:RO_0000087 obo:CHEBI_50857. # has anti allergic role

クエリに似ていますが、制限を回避するため、非常にシンプルで高速です。

( parse の必要性についてはrdf:Lists、オントロジー作成者の意識に大きな負担がかかるはずです):

    ?intsect1 rdf:first obo:OBI_0000576 .
    ?intsect1 rdf:rest ?scatmolag .
    ?scatmolag rdf:first ?bearacting .
    ?scatmolag rdf:rest ?intsect3 .
    # bearer of active ingredient

バイアグラムの例を簡略化して示します。私は命名法の値:blue:diamond個体 ( skos:Concept) に変えました。それらがクラスである理由:steelBlue1が見当たらないからです (私には意味がありません)。

:ViagraPill a DrugForm;
  :hasColor :blue;
  :hasShape :diamond.
:steelBlue a skos:Concept;
  skos:broader :blue.

:patient1 :consumed :pill1.
:pill1 :hasColor :steelBlue; :hasShape :diamond.

色と形は薬を識別するための必要条件ですが、十分条件ではないため、?drugForm以下はその錠剤の可能性のある薬ですが、確実ではありません。

select ?patient ?drugForm {
  ?patient a :patient; :consumed ?pill.
  ?pill :hasColor ?color; :hasShape ?shape.
  ?drugForm :hasColor ?color1; :hasShape ?shape.
  ?color skos:broaderTransitive? ?color1
}

ここでは推移的な推論を使用しました: pathskos:broaderTransitive?は path よりも高速ですskos:broader*

推論はオール オア ナッシングの問題ではありません。組み込みのルールセットから必要なルールを選択できます。たとえば、RDFS の推論を含めると、次のように簡略化できます。

?x a ?s. ?s rdfs:subClassOf* :CHEBI_51080

ただに

?x a :CHEBI_51080

デフォルトのビルトイン ルールセット RDFS-Plus-optimized には、RDFS、インバース、および推移が含まれます。詳細なアドバイスについては、http: //graphdb.ontotext.com/documentation/enterprise/rules-optimisations.htmlを参照してください。

あなたは反対するかもしれません:「あなたは小道具をドラッグ(クラス)に直接付けると言いませんでしたか?どうしてそれらを:pill1上にも付けますか?」.

私はそれでいいと思います: これらの props が domain を持っていると宣言し:DrugIndividual or :DrugForm or :Drug、それらを「観察された」ものとして解釈することができます:DrugIndividualが、「公称」または「必須」のものとして解釈することができます:DrugForm and :Drug。ところで、私はschema:domainIncludes ...の代わりに を使用してポリモーフィック ドメインを宣言するのが好きですrdfs:range [a owl:Class; owl:unionOf (...)]

麻薬密売人 (インスタンス) に小道具を付けたくない場合は、たとえば次のように、ピルに「未知のクラス」を使用する必要があります。

:patient1 :consumed :pill1.
:pill1 a [:hasColor :steelBlue; :hasShape :diamond].

クエリのそれぞれのわずかな複雑さで:

select ?patient ?drugForm {
  ?patient a :patient; :consumed ?pill.
  ?pill a [:hasColor ?color; :hasShape ?shape].
  ?drugForm :hasColor ?color1; :hasShape ?shape.
  ?color skos:broaderTransitive? ?color1
}

要約する:

  • GraphDB は OWL DL をサポートしていません。QL と RL をサポートしています。
  • OBO スタイルのオントロジーは何百万ものクラスを使用します。これは、クラス制限から個体までの小道具全体の推論を規定します。無駄だと思います。
于 2020-09-18T06:43:05.180 に答える