SHACL 심각도 검수, 경고만 있어도 왜 부적합일까
2026년 11월 기준, SHACL 2017에서는 경고만 있어도 부적합입니다. 가상 그래프로 심각도와 검증기 설정을 대조하고, 운영 반영 기준을 따로 정리합니다.
이 글을 쓴 알파카랩스카카오·네이버·쿠팡 출신, 재하청 0%, 대기업·공공기관 등 18개사+ 레퍼런스
2026년 11월 기준, SHACL 2017에서는 경고만 있어도 부적합입니다. 운영 반영은 결과별 심각도와 별도 승인 기준으로 판단합니다.
자산의 식별 코드가 없으면 다른 시스템의 자산과 연결하기 어렵습니다. 표시명만 없으면 코드는 유지한 채 담당자가 이름을 채울 수 있습니다. 두 결과가 같은 부적합으로 표시될 때, 검수 담당자는 보고서의 적합 값과 각 결과의 심각도를 함께 봐야 대응을 나눌 수 있습니다.
경고만 있어도 기본 검증이 부적합인 이유는 무엇인가요?#
2017년 W3C 권고에서는 정상 완료한 검증에서 결과가 하나라도 생기면 보고서의 sh:conforms가 false입니다. 셰이프의 sh:severity는 결과의 심각도를 정하고, 보고서의 sh:resultSeverity에 그 값이 붙습니다. 심각도를 생략하면 기본값은 sh:Violation입니다. 2017년 SHACL 심각도 정의 · 검증 보고서의 적합 값
아래 가상 셰이프는 같은 자산에 코드·표시명·설명 메모가 각각 있는지 봅니다. 코드 제약은 심각도를 생략했고, 표시명에는 Warning, 메모에는 Info를 붙였습니다. 이 셰이프에서 표시명만 빠지면 경고 결과가 생깁니다.
@prefix ex: <https://example.invalid/shacl/> .
@prefix sh: <http://www.w3.org/ns/shacl#> .
ex:AssetShape a sh:NodeShape ;
sh:targetNode ex:asset-a ;
sh:property [ sh:path ex:code ; sh:minCount 1 ] ;
sh:property [
sh:path ex:label ; sh:minCount 1 ;
sh:severity sh:Warning
] ;
sh:property [
sh:path ex:note ; sh:minCount 1 ;
sh:severity sh:Info
] .검증기에서 경고를 허용하면 무엇이 바뀌나요?#
합성 표본에서는 경고 허용 설정이 적합 값을 바꿨고, 보고서에는 경고 결과가 남았습니다. 같은 셰이프를 기본 설정, 정보 허용, 경고 허용으로 각각 실행해 비교했습니다. 결과 목록과 적합 값은 모두 RDF 보고서에서 읽었습니다.
pySHACL에서 allow_infos는 Info가 부적합의 원인이 되지 않도록 합니다. allow_warnings는 Warning과 Info를 모두 부적합 원인에서 제외합니다. 표의 경고 허용 열은 allow_infos를 별도로 켜지 않고 allow_warnings만 켠 실행입니다. pySHACL v0.40.2 옵션 설명
| 가상 자산의 누락 | 보고서에 남은 결과 | 기본 / 정보 허용 / 경고 허용 |
|---|---|---|
| 누락 없음 | 없음 | true / true / true |
| 설명 메모만 누락 | Info | false / true / true |
| 표시명만 누락 | Warning | false / false / true |
| 식별 코드만 누락 | Violation | false / false / false |
| 코드·표시명·메모 누락 | Violation, Warning, Info | false / false / false |
실행 버전은 pySHACL 0.40.2와 RDFLib 7.6.0입니다. 추론과 고급 기능을 끄고 첫 오류에서 멈추지 않도록 실행했습니다. 모든 검증기의 보고서가 같은 방식으로 작성된다고 가정하기 전에 실제 도구와 설정으로 같은 표본을 대조합니다.
운영 반영 여부는 어떻게 정하나요?#
운영 반영 승인 값은 검증기의 적합 값과 별도로 남깁니다. 모든 결과를 차단하는 팀은 기본 보고서의 기준을 그대로 쓸 수 있습니다. 경고를 일부 허용하는 팀은 승인할 제약 목록과 조건, 수정 담당자를 먼저 합의합니다.
이 예시의 반영 규칙에서는 식별 코드 위반을 차단하고, 표시명 경고는 허용 목록과 담당자가 있을 때만 검토합니다. 정보 결과는 정한 기준에 따라 기록합니다. 검증이 실패해 결과를 읽을 수 없거나 심각도를 판정할 규칙이 없으면 반영을 보류합니다. 기본 보고서를 보관하고 검증기 버전·설정·개별 결과·승인 근거를 같은 작업 기록으로 연결합니다.
실제로 검사한 대상 범위는 SHACL 검증 대상 누락 확인, 두 속성값의 명단 대사는 SHACL 값 집합 일치 검수, 경고를 넘겨받는 역할은 온톨로지 사람 검수 워크플로에서 다룹니다.
근거와 확인일#
W3C SHACL 권고는 2017년 7월 20일 공개됐고 pySHACL 0.40.2 릴리스는 2026년 10월 28일 UTC에 공개됐습니다. 이 글에서 사용한 원문과 가상 실행 결과는 2026년 11월 8일 확인했습니다. W3C 2017 권고 · pySHACL v0.40.2 릴리스
2026년 11월 2일 SHACL 1.2 Core 작업 초안은 기본 부적합 심각도 집합을 Violation·Warning·Info로 정합니다. 엔진이 기본과 다른 집합을 사용했다면 보고서에 sh:conformanceDisallows로 그 집합을 표시하도록 규정합니다. 위 표는 pySHACL 옵션을 시험한 결과이며, 1.2 작업 초안의 전체 적합성은 시험 범위 밖입니다. SHACL 1.2 Core 작업 초안
알파카랩스는 원천 매핑, 사람 검수, 조회 권한과 운영 인수 범위를 공개 서비스에서 안내합니다. 2026년 11월 8일 확인한 자사 서비스 설명입니다. 온톨로지 구축·컨설팅 서비스
SHACL 심각도 검수 FAQ#
sh:severity를 Warning으로 바꾸면 규칙을 건너뛰나요?
제약은 실행되고 결과가 생기면 심각도가 Warning으로 표시됩니다. 2017 권고의 보고서에서는 경고 결과도 적합 값을 false로 만드는 결과에 포함됩니다.
pySHACL에서 정보만 허용하면 경고도 허용되나요?
allow_infos는 Info만 허용합니다. 가상 표본에서 Warning이 하나 남으면 이 설정의 적합 값은 false였습니다. Warning과 Info를 함께 허용하는 옵션은 allow_warnings입니다.
경고 허용 모드에서 true가 나오면 경고를 지워도 되나요?
이 표본에서는 true가 나와도 Warning이 보고서에 남았습니다. 개별 결과와 검증 설정을 보존하고, 팀이 합의한 허용 목록과 승인 조건으로 운영 반영을 결정합니다.
심각도를 쓰지 않으면 어떤 값이 붙나요?
2017 권고의 기본값은 sh:Violation입니다. 가상 셰이프에서 심각도를 생략한 코드 제약도 코드가 빠졌을 때 Violation으로 보고됐습니다.
보고서가 없으면 결과가 없는 것으로 볼 수 있나요?
검증 실패나 보고서 누락은 정상 완료한 빈 결과와 구분합니다. 검사 대상과 보고서를 확인할 수 있을 때까지 반영을 보류합니다.
SHACL 심각도 인수표 초안 협의#
첫 범위 협의에서 비식별 셰이프와 보고서로 심각도·적합 값·운영 승인 조건을 초안에 정리합니다. 소요 시간은 자료와 검수 범위를 확인한 뒤 협의합니다.
심각도와 운영 승인 기준을 대조합니다
첫 범위 협의에서 비식별 보고서로 심각도와 반영 승인 조건을 정리합니다. 소요 시간은 자료와 검수 범위를 확인한 뒤 협의합니다.
SHACL 심각도 인수표 초안 협의