SPARQLクエリを作成しようとしていますが、特定の診断コード(?ICD9)を関連付けた患者識別子コード(?Crid)特定の投薬を関連させておらず、募集日(?RecruitDate)の前に注文日(?OrderDate)を持っていないでください。私はグラフにOBIBオントロジーを組み込んだ。SPARQL特定の基準を満たしていない結果を検索するクエリ
SELECT DISTINCT ?Crid WHERE
{?Crid a obib:CRID .
#-- Return CRIDs with a diagnosis
?Crid obib:hasPart ?ICD9 .
?ICD9 a obib:diagnosis .
#-- Return CRIDs with a medical prescription record
?Crid obib:hasPart ?medRecord .
?medRecord a obib:medicalRecord .
#-- Return CRIDs with an order date
?medRecord obib:hasPart ?OrderDate .
?OrderDate a obib:dateOfDataEntry .
#-- Return CRIDs with a recruitment date
?Crid obib:hasPart ?FormFilling .
?FormFilling a obib:formFilling .
?RecruitDate obib:isAbout ?FormFilling .
?RecruitDate a obib:dateOfDataEntry .
#-- Filter results for specific ICD9 codes
FILTER (?ICD9 = '1')
#-- Subtract Results with Certain Medication and Order Date Prior to Recruitment
#-- This is the part that I think is giving me a problem
MINUS {
FILTER (regex (?medRecord, "medication_1", "i"))
FILTER (?RecruitDate-?OrderDate < "P0D"^^xsd:dayTimeDuration)
}
}
私の直感では、私が正しくMINUSを使用していないということである。ここでは
は、私がこれまで(読みやすさ/感度のために省略し、グラフを介してビット簡略化し、いくつかのステップで)持っているものです。このクエリは、のほとんどがの結果を返します。私は10の結果を期待しており、12を返しています。関連のない2つの結果は、 "medication_1"を取得し、募集日の前に注文日を持っていました。セット。
重要な場合は、Stardogエンドポイントを使用してこのクエリを実行し、グラフデータを保存しています。簡単なのだろう(私もおそらく正規表現は適切なツールがここにあるかどうかを検討したい
FILTER (!regex(?medRecord, "medication_1", "i"))
FILTER (?RecruitDate-?OrderDate >= "P0D"^^xsd:dayTimeDuration)
:代わりに
#-- Subtract Results with Certain Medication and Order Date Prior to Recruitment
#-- This is the part that I think is giving me a problem
MINUS {
FILTER (regex (?medRecord, "medication_1", "i"))
FILTER (?RecruitDate-?OrderDate < "P0D"^^xsd:dayTimeDuration)
}
}
の
ご回答いただきありがとうございます。このアプローチの問題は、「投薬1」を受けた患者を除外し、募集日後の受注日があることです。患者を除外するには、募集日の前に「medication_1」を注文する必要があります。 – hayfreed
@hayfreedしかし、どのような場合でも、MINUS自体は結果セットを返すグラフパターンです - あなたの例では、MINUS句の中でトリプルパターンを選択していないので、常に空です。 – AKSW