2017-02-10 11 views
0

특정 진단 코드 (? ICD9)와 연관된 환자 식별자 코드 (? Crid) 집합을 반환하는 SPARQL 쿼리를 작성하려고합니다. 특정 약을 관련시키지 말고 모집 날짜 (? 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

아마 그냥 MINUS없이 쓰기 것 문자열 비교 작업?),하지만 그건 다른 문제입니다.

+0

답변 해 주셔서 감사합니다. 이 접근 방식의 문제점은 "약물 치료 _1"을 복용 한 환자는 제외하고 채용일 이후 주문 날짜가있는 것입니다. 환자를 제외시키기 위해서는 모집 날짜 전에 "약제 _1"을 주문해야합니다. – hayfreed

+1

@hayfreed하지만 MINUS 자체는 결과 집합을 반환하는 그래프 패턴입니다. 예를 들어, MINUS 절에서 트리플 패턴을 선택하지 않았으므로 항상 비어 있습니다. – AKSW