SPARQL OPTIONAL 검수SPARQL FILTER 위치OPTIONAL 행 누락미입력 조건 불일치 구분

SPARQL OPTIONAL 검수, 값이 없는 주문은 왜 사라질까

SPARQL OPTIONAL을 썼는데 납기일 없는 주문이 사라진다면 FILTER 위치를 확인합니다. 가상 주문으로 목록 필터, 조건부 값 표시, 원값과 판정 분리의 결과를 대조합니다.

이 글을 쓴 알파카랩스카카오·네이버·쿠팡 출신, 재하청 0%, 대기업·공공기관 등 18개사+ 레퍼런스

발행 ·알파카랩스

2026년 11월 기준, SPARQL에서 전체 주문을 남기려면 OPTIONAL 뒤의 FILTER를 확인합니다. 미바인딩 날짜의 비교 오류로 행이 제외될 수 있습니다.

납기일이 잡힌 주문과 날짜가 아직 입력되지 않은 주문을 함께 보는 목록을 가정해 보겠습니다. ‘기준일 이내’ 조건을 넣은 뒤 미입력 주문까지 사라지면, 담당자는 날짜를 보완할 대상도 목록에서 찾지 못합니다. 먼저 화면이 모든 주문을 보여 줄지, 조건을 만족한 주문만 보여 줄지 정합니다.

OPTIONAL이 있는데 왜 주문 행이 줄어들까요?#

OPTIONAL은 선택 패턴이 맞지 않아도 앞에서 찾은 해를 유지합니다. 그러나 그 바깥의 FILTER가 납기일을 비교하면 날짜가 연결되지 않은 행은 조건을 통과하지 못합니다. FILTER가 속한 중괄호 그룹을 확인해야 합니다. 같은 그룹 안에서 문장만 위아래로 옮겨도 적용 범위는 같습니다. W3C SPARQL 1.1 선택 패턴과 필터 범위

다음은 가상 RDF 그래프입니다. 모든 주문에 식별자가 있고 납기일은 최대 한 개라고 가정합니다. A와 B의 납기시각은 각각 UTC 11월 4일 00시와 11월 6일 00시이며 C에는 해당 속성이 없습니다. 비교 기준시각은 UTC 11월 5일 00시입니다.

@prefix ex: <https://example.org/order/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
ex:A a ex:Order; ex:dueDate "2026-11-04T00:00:00Z"^^xsd:dateTime .
ex:B a ex:Order; ex:dueDate "2026-11-06T00:00:00Z"^^xsd:dateTime .
ex:C a ex:Order .

아래 쿼리는 기준시각까지 납기시각이 잡힌 A만 반환합니다. 전체 주문 목록의 기대 결과가 A·B·C라면 이 쿼리의 행 선택 조건부터 바꿔야 합니다.

PREFIX ex: <https://example.org/order/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT ?order ?due WHERE {
  ?order a ex:Order .
  OPTIONAL { ?order ex:dueDate ?due }
  FILTER(?due <= "2026-11-05T00:00:00Z"^^xsd:dateTime)
}
ORDER BY ?order

FILTER를 안으로 옮기면 미입력을 구분할 수 있나요?#

선택 패턴 안으로 조건을 옮기면 이 예의 A·B·C 행은 모두 남습니다. 다만 B는 날짜가 있어도 조건에 맞지 않아 날짜 칸이 미바인딩 상태가 됩니다. C의 날짜 칸도 미바인딩이므로 그 결과만으로 둘을 구별할 수 없습니다.

가상 입력에 같은 시각 비교를 적용한 결과입니다. 표의 날짜는 모두 UTC 00시를 뜻합니다. 빈칸은 해당 변수가 결과에서 값에 연결되지 않았다는 뜻입니다.

주문과 원천 날짜OPTIONAL 밖 FILTEROPTIONAL 안 FILTER원값과 판정을 분리
A, 11월 4일행 있음, 날짜 있음행 있음, 날짜 있음날짜 있음, true
B, 11월 6일행 제외행 있음, 날짜 빈칸날짜 있음, false
C, 날짜 속성 없음행 제외행 있음, 날짜 빈칸날짜 빈칸, 판정 빈칸
가상 주문 3건의 검수표입니다.

화면이 세 주문과 원래 날짜를 함께 보여 줘야 한다면, 다음처럼 날짜를 선택 조회하고 비교 결과를 별도 변수에 담을 수 있습니다. BIND의 평가에 오류가 생기면 해당 변수는 미바인딩으로 남고 해는 유지됩니다. 날짜 자체와 판정 칸을 함께 확인합니다. W3C SPARQL 1.1 BIND

PREFIX ex: <https://example.org/order/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT ?order ?due ?withinCutoff WHERE {
  ?order a ex:Order .
  OPTIONAL { ?order ex:dueDate ?due }
  BIND((?due <= "2026-11-05T00:00:00Z"^^xsd:dateTime) AS ?withinCutoff)
}
ORDER BY ?order

어떤 경우에는 바깥 FILTER가 맞을까요?#

기준일까지 납기일이 확정된 주문만 고르는 화면이라면 바깥 FILTER로 A만 반환하는 것이 목적에 맞습니다. 인수표에 대상 주문 키와 제외 사유를 먼저 적고 실제 결과를 대조합니다. 전체 목록에서는 미바인딩 판정을 곧바로 false로 바꾸지 않고 ‘확인 필요’처럼 표시할 수 있습니다.

이 예에서 C에는 날짜 속성이 없습니다. 운영 화면에서 빈칸이 생기면 미입력, 수집 누락, 권한 제한, 자료형 오류 중 무엇이 원인인지 원천과 실행 결과로 확인해야 합니다. 같은 권한과 데이터셋을 고정하는 기준은 SPARQL 조회 범위 검수, 관계를 붙인 뒤 행 수가 늘어나는 문제는 온톨로지 중복 집계 검수에서 다룹니다.

어떤 문서와 실행 결과를 기준으로 삼았나요?#

이 글은 2013년 3월 21일 W3C SPARQL 1.1 권고의 선택 패턴과 표현식 규칙을 사용했습니다. 예제 입력과 기준값에는 비교 연산이 규정된 xsd:dateTime을 사용하고 UTC를 명시했습니다. 업무 마감일을 시각으로 바꾸는 규칙은 원천 담당자와 별도로 정합니다. 2026년 11월 1일 공개된 SPARQL 1.2 문서는 작업 초안입니다. 두 판본은 2026년 11월 5일에 확인했습니다. SPARQL 1.2 작업 초안 고정 판본

가상 그래프를 RDFLib 7.6.0에서 실행해 세 배치의 결과를 대조했습니다. 바깥 필터는 1행, 안쪽 필터와 원값·판정 분리는 각각 3행이며 표의 날짜·판정과 일치했습니다. 실제 운영 엔진에서도 같은 입력과 쿼리를 실행해 확인해야 합니다.

알파카랩스의 온톨로지 구축 서비스는 기존 통계와의 대사, 출처·권한을 지키는 AI·MCP 조회의 검수 조건을 협의합니다. 이 글은 알파카랩스가 작성한 설계 안내이며 하단에 자사 서비스 상담 링크가 있습니다.

SPARQL OPTIONAL 검수 FAQ#

FILTER를 같은 중괄호 안에서 위로 옮기면 결과가 달라지나요?

FILTER는 속한 그룹 전체의 해를 제한합니다. 같은 그룹 안에서 텍스트 위치만 옮기는 것으로 적용 범위를 바꿀 수 없습니다. 선택 패턴 안과 바깥의 그룹 경계를 확인해야 합니다.

FILTER를 OPTIONAL 안에 넣으면 날짜가 없는 주문만 빈칸이 되나요?

조건에 맞지 않는 날짜도 그 선택 패턴에서 바인딩되지 않습니다. 이 글의 B는 날짜가 있어도 빈칸이 됩니다. 원래 날짜를 보여 줘야 하면 값을 읽는 부분과 판정을 분리합니다.

BIND로 날짜를 비교했는데 판정이 빈칸이면 false인가요?

미바인딩과 false는 다른 결과입니다. 날짜가 없거나 표현식 평가에 오류가 나면 판정 변수가 연결되지 않을 수 있습니다. 원값과 자료형, 평가 조건을 함께 확인합니다.

날짜가 여러 개 연결된 주문에도 같은 행 수가 나오나요?

날짜 값이 여러 개면 한 주문이 여러 해로 반환될 수 있습니다. 이 글의 표는 주문별 날짜가 최대 한 개인 가정입니다. 여러 날짜의 의미와 선택 규칙을 먼저 정하고 주문 키와 결과를 대조합니다.

이 예제를 운영 엔진에서도 다시 실행해야 하나요?

동일한 그래프와 쿼리를 운영 엔진에 넣어 주문 키, 날짜, 미바인딩 판정을 확인합니다. 실행한 쿼리와 엔진 판본, 입력 범위, 권한 조건도 기록합니다.

선택 속성 조회 인수표 협의#

비식별 입력과 화면에 남아야 하는 주문 키 목록을 준비하면 선택 속성의 값·판정을 비교할 인수표 초안 범위를 협의할 수 있습니다. 소요 시간은 표본과 조회 범위를 확인한 뒤 정합니다.

선택 속성 조회의 기대 결과를 정합니다

비식별 입력과 기대 목록으로 인수표 초안을 협의합니다. 소요 시간은 표본 범위를 확인한 뒤 정합니다.

선택 속성 조회 인수표 협의하기