SHACL 복합 경로 검수: 중간 노드 오류는 어디에서 잡을까
SHACL 복합 경로가 통과해도 중간 조직의 클래스 오류나 일부 담당자 누락은 남을 수 있습니다. 최종 값 검사와 조직별 검사를 같은 합성 그래프로 대조하고 경로 인수표의 조건을 정리합니다.
이 글을 쓴 알파카랩스카카오·네이버·쿠팡 출신, 재하청 0%, 대기업·공공기관 등 18개사+ 레퍼런스
SHACL 복합 경로는 최종 값과 중간 노드를 나눠 검수합니다. 2026-11-06 기준, 경로 통과만으로 각 중간 조직의 조건을 보장하지 않습니다.
주문에서 조직을 거쳐 담당자를 찾았고 검증도 통과했습니다. 그런데 다른 조직에는 담당자가 없거나, 연결된 중간 노드가 조직 클래스에 속하지 않을 수 있습니다. 데이터 인수 때는 끝에서 찾은 값과 지나온 노드의 의무를 따로 확인해야 합니다.
검사 대상 주문 자체의 누락이 의심되면 SHACL 검증 대상 검수부터 확인합니다. 이미 대상을 고정했다면 아래 두 규칙으로 경로 안의 검사 위치를 대조합니다. 조건에 맞는 직접 연결 값의 수는 SHACL 조건부 개수 검수에서 별도로 다룹니다.
복합 경로의 sh:class는 어느 노드를 검사하나요?#
속성 셰이프의 sh:class는 지정 경로로 얻은 값 노드에 적용됩니다. 주문→조직→담당자 경로라면 최종 담당자가 그 대상입니다. 중간 조직의 클래스까지 자동으로 검사하는 조건은 아닙니다.
W3C SHACL 권고의 경로·값 노드 정의는 순서 경로와 속성 셰이프가 다루는 값을 설명합니다. 아래의 A는 unit 다음 owner를 따라 얻는 최종 값이 최소 하나 있고, 그 값들이 Person에 속하는지 검사합니다. B는 unit 자체의 조건과 각 unit의 owner 조건을 나눕니다.
두 규칙은 같은 업무 요구를 다르게 구현한 동등한 대안이 아닙니다. A는 최종 담당자 존재·클래스만 요구하고, B는 중간 조직의 클래스와 조직마다 담당자가 있어야 한다는 의무를 추가합니다. 인수할 요구가 어느 쪽인지 먼저 합의합니다.
중간 조직의 오류와 일부 누락은 어떻게 드러내나요?#
최종 값이 정상인 상태에서 중간 노드만 바꿔 보거나, 담당자가 없는 조직을 추가해 대조합니다. 이때 경로 전체의 최종 값은 그대로 남을 수 있습니다. 다음은 실제 고객 자료가 없는 가상 주문·조직·담당자 모델입니다.
| 합성 그래프의 조건 | A: 최종 값 검사 | B: 조직별 검사 | 인수 때 해석할 차이 |
|---|---|---|---|
| Department 조직에 Person 담당자 연결 | 통과 | 통과 | 두 규칙의 정상 기준 |
| 중간 노드가 ExternalUnit이며 Person 담당자는 있음 | 통과 | 위반 | A는 중간 노드의 Department 소속을 검사하지 않음 |
| Department 조직 둘 중 한 곳만 Person 담당자가 있음 | 통과 | 위반 | 전체 경로에는 값이 있어도 조직별 누락은 남음 |
| 연결된 조직에 담당자가 전혀 없음 | 위반 | 위반 | A는 최종 값 부족, B는 해당 조직의 owner 부족 |
| 담당자가 Person이 아닌 Robot에만 속함 | 위반 | 위반 | 최종 값의 클래스 조건 불충족 |
| 주문에 unit 연결이 없음 | 위반 | 위반 | A와 B가 각각 둔 최소 개수 조건 불충족 |
| 정상 조직 둘이 같은 Person 담당자를 공유 | 통과 | 통과 | 조직별 존재 조건과 서로 다른 담당자 요구는 별개 |
일부 누락 행에서 A의 minCount를 늘리는 것만으로 각 조직의 담당자를 보장할 수는 없습니다. 다른 정상 조직에 담당자를 추가하면 최종 값 수는 늘어날 수 있기 때문입니다. 조직별 의무는 그 조직을 검사 대상으로 삼는 규칙으로 표현합니다.
각 중간 조직에는 어떤 규칙을 붙이나요?#
주문의 unit 값을 검사한 뒤, 각 unit에 조직용 노드 셰이프를 적용합니다. 그 안에서 owner 존재와 클래스를 검사하면 담당자가 없는 조직을 특정할 수 있습니다. 주문에 unit이 하나도 없는 경우는 별도의 최소 개수 조건으로 막습니다.
아래는 대조표에 사용한 두 규칙입니다. 실험에서는 공통 prefix와 A, 공통 prefix와 B를 각각 별도 셰이프 그래프로 실행했습니다. 코드의 이름·관계는 설계 예시이며 특정 업무의 승인 체계를 재현하지 않습니다.
@prefix ex: <https://example.org/path/> .
@prefix sh: <http://www.w3.org/ns/shacl#> .
ex:ChainShape a sh:NodeShape ;
sh:targetNode ex:order ;
sh:property [
sh:path ( ex:unit ex:owner ) ;
sh:minCount 1 ;
sh:class ex:Person
] .
ex:HopShape a sh:NodeShape ;
sh:targetNode ex:order ;
sh:property [
sh:path ex:unit ;
sh:minCount 1 ;
sh:class ex:Department ;
sh:node ex:UnitShape
] .
ex:UnitShape a sh:NodeShape ;
sh:property [
sh:path ex:owner ;
sh:minCount 1 ;
sh:class ex:Person
] .W3C의 sh:node 정의는 각 값 노드가 지정된 노드 셰이프에 적합할 것을 요구합니다. B에서는 unit 값인 각 조직이 UnitShape를 통과해야 합니다. 이 설명과 예제는 2017-07-20 권고안을 2026-11-06 확인해 작성했습니다.
상위 보고서에 NodeConstraintComponent 위반이 나타나면 해당 unit과 하위 owner 조건을 함께 추적합니다. 위반 건수만 비교하면 누락과 클래스 오류를 혼동할 수 있습니다. 보고서의 focus node·value·경로와 적용한 셰이프를 원천 샘플에 연결해 확인합니다.
조직별 검사를 넣으면 관계가 완전해지나요?#
아닙니다. B가 검사하는 것은 제공된 그래프에서 unit이 존재하고, 각 unit이 Department이며, 각 owner가 존재하고 Person에 속하는 조건입니다. 실제 담당자의 권한, 관계의 유효 시점, 원천에서 빠진 다른 조직까지 보장하지 않습니다.
예제에는 단일 조직이나 단일 담당자를 강제하는 상한이 없습니다. 두 조직이 같은 담당자를 공유해도 표의 규칙은 통과합니다. 서로 다른 책임자나 승인 권한이 업무 요구라면 별도 규칙과 검수 근거를 합의해야 합니다. 업무 지표의 중복 합계는 온톨로지 조인 집계 검수의 다른 문제입니다.
최신 사양의 지위도 구분합니다. 2026-11-06 확인한 SHACL 1.2 Core의 2026-11-02 문서는 Working Draft입니다. 이번 실험은 2017 방식의 경로·노드 제약에 한정하며, 새 초안의 모든 기능을 사용 엔진이 지원한다는 증거로 제시하지 않습니다.
인수표에는 최종 값 목록, 검사할 중간 노드 목록, 단계별 의무, 누락을 드러내는 표본과 기대 위반을 적습니다. 데이터·셰이프·실행 옵션을 고정하고 원고의 표본 결과를 재현할 수 있어야 합니다. 경로가 바뀌거나 중간 노드 의무가 추가되면 같은 표본에 새 실패 조건을 더해 다시 확인합니다.
SHACL 복합 경로 검수 FAQ#
복합 경로가 통과하면 중간 노드의 클래스도 정상인가요?
해당 속성 셰이프의 클래스 제약만으로는 보장하지 않습니다. 제약이 적용되는 최종 값과 중간 노드를 구분해야 합니다. 중간 조직의 소속이 요구라면 그 조직에 적용할 클래스 조건을 따로 둡니다.
경로에 minCount 1을 쓰면 모든 조직에 담당자가 있나요?
전체 경로에서 얻는 최종 값이 최소 하나 있어야 한다는 조건입니다. 일부 조직의 담당자가 없더라도 다른 조직에서 값에 도달하면 통과할 수 있습니다. 조직마다 담당자가 필요하면 조직별 노드 셰이프 안에 owner의 최소 개수를 둡니다.
sh:node만 추가하면 unit이 없는 주문도 막나요?
값이 없는 경우까지 막으려면 unit의 최소 개수 조건이 필요합니다. 예제 B는 주문의 unit에 minCount 1을 함께 둡니다. 조직 내부에서도 담당자 누락을 막기 위해 owner에 최소 개수를 둡니다.
두 조직이 같은 담당자를 공유하면 위반인가요?
이 글의 A·B 규칙에서는 위반이 아닙니다. 조직별 담당자 존재와 담당자 간 구별은 서로 다른 요구입니다. 단일성·서로 다른 책임자·권한 조건은 업무 정책에 따라 별도로 정의합니다.
SHACL 1.2 초안으로 바로 운영 규칙을 바꿔도 되나요?
문서 지위와 사용 엔진의 지원 범위를 먼저 확인합니다. 이 글에서 확인한 2026-11-02 문서는 Working Draft이며 이번 합성 실험은 2017 방식에 한정합니다. 초안 기능을 도입하려면 해당 기능의 지원과 기존 데이터·규칙에 대한 회귀 검수를 추가합니다.
경로 인수표 초안 협의#
알파카랩스의 온톨로지 구축 서비스는 개념·관계·제약, 원천 매핑과 운영 인수 범위를 협의하는 제공 방식을 설명합니다. 자사 공개 설명이며 이번 예제를 과거 고객에게 납품한 성과로 제시하지 않습니다. 비식별 관계 샘플과 중간 노드의 의무·예상 위반을 주시면 경로 인수표 초안을 협의합니다. 소요 시간은 자료와 규칙 범위를 확인한 뒤 정합니다.
중간 노드까지 경로 인수 조건을 정합니다
비식별 관계 샘플과 중간 노드 의무로 경로 인수표 초안을 협의합니다. 소요 시간은 자료와 규칙 범위를 확인한 뒤 정합니다.
경로 인수표 초안 협의