特定の診断コード (?ICD9) に関連付けられ、特定の薬に関連付けられておらず、注文日を持つ一連の患者識別子コード (?Crid) を返す SPARQL クエリを作成しようとしています。 (?OrderDate) が採用日 (?RecruitDate) よりも前であること。OBIB オントロジーをグラフに組み込みました。
ここに私がこれまでに持っているものがあります(少し単純化され、読みやすさ/感度のために省略されたグラフのいくつかのステップがあります):
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 エンドポイントを使用してこのクエリを実行し、グラフ データを保存しています。