G·Graph Daily Lab
DAY 63 / 100
내 학습 기록
DAY 63개념·실험온톨로지 공학

SHACL로 데이터 검증하기

RDFS·OWL이 새 사실을 이끌어 낸다면, 지금 있는 데이터가 규칙을 지키는지는 누가 검사할까요? W3C 표준 SHACL로 형태를 정의하고 검증 보고서를 읽어 봅니다.

약 20분조작형 실험 확인 퀴즈
A SMALL DETOUR

이번 회차, 내 속도로.

기초를 더 짚거나 궁금한 주제로 잠깐 넓혀 보세요. 최대 3단계를 거쳐 DAY 63로 돌아옵니다.

난이도·관심 주제 고르기
이번 회차는 어느 속도로 볼까요?
더 살펴볼 주제 1~2개 선택

1/2개 선택 · 새 보충·심화 수업과 본과정 다시 읽기를 선택할 수 있어요.

이렇게 다녀와요 1단계 · 약 12분

  1. 출발 · DAY 63SHACL 형태 제약
  2. 1. 관심 주제명명 규칙·레이블·정의문추가 25 · 새 추가 수업
  3. 복귀 · DAY 63원래 회차 이어가기
  • 명명 규칙·레이블·정의문 · DAY 62의 7단계로 클래스와 슬롯을 만들었다면, 그 이름과 설명을 다른 사람이 오해하지 않도록 다듬는 방법을 봅니다.

선택과 경로 기록은 이 브라우저에 저장됩니다. 본과정의 회차 완료와는 별도입니다.

복귀: DAY 63 → 본과정 다음 회차: DAY 64

핵심 개념

SHACL(Shapes Constraint Language)은 2017년 7월 W3C 권고안이 된 RDF 검증 언어입니다. 검증 조건을 담은 형태 그래프(shapes graph)로 데이터 그래프(data graph)를 검사합니다. 노드 형태(sh:NodeShape)는 sh:targetClass로 검사 대상을 정하고, 대상 노드 하나하나가 초점 노드(focus node)가 됩니다. sh:property에는 sh:path로 속성을 지정한 속성 형태(property shape)와 제약을 적습니다.

사람 형태는 이렇게 씁니다. :PersonShape a sh:NodeShape ; sh:targetClass :Person ; sh:property [ sh:path :name ; sh:minCount 1 ] ; sh:property [ sh:path :age ; sh:datatype xsd:integer ] ; sh:property [ sh:path :worksAt ; sh:class :Org ] . sh:minCount는 최소 개수, sh:datatype은 리터럴의 데이터 타입, sh:class는 값 노드가 그 클래스(또는 하위 클래스)의 rdf:type을 데이터 그래프에 갖고 있는지를 봅니다.

검증 결과는 sh:ValidationReport로 나옵니다. sh:conforms가 true이면 통과, false이면 위반마다 sh:ValidationResult가 붙습니다. 결과에는 sh:focusNode(어느 노드), sh:resultPath(어느 속성), sh:value(문제의 값), sh:sourceConstraintComponent(예: sh:MinCountConstraintComponent), sh:resultSeverity(기본 sh:Violation)가 들어 있습니다. 이 표를 그대로 데이터 정제 작업 목록으로 쓸 수 있습니다.

SHACL은 지금 있는 데이터만 보는 닫힌 세계식 검사입니다. name 트리플이 없으면 ‘모름’이 아니라 위반입니다. 반면 RDFS·OWL은 새 사실을 만드는 열린 세계 추론이라 역할이 다릅니다. 둘을 함께 쓸 때는 순서가 결과를 바꿉니다. 추론 뒤에 검증하면 rdfs:range가 만든 :서울 a :Org 때문에 sh:class :Org 검사가 통과될 수 있습니다. SHACL 명세는 RDFS 추론을 요구하지 않지만, 함의를 포함한 그래프에서 실행하는 것도 허용합니다.

SHACL은 형태 제약으로 현재 데이터를 닫힌 세계식으로 검사해 위반 보고서를 내며, 새 사실을 만드는 OWL·RDFS 추론과 역할이 다릅니다.

작은 예제로 따라가기

01

:민수 a :Person ; :name "민수" ; :age 29 ; :worksAt :A연구소 .와 :A연구소 a :Org .는 세 규칙을 모두 지켜 위반이 없습니다.

02

:지아 a :Person ; :age "스물" .은 name이 없어 MinCount 위반 1건, age가 정수가 아니라 Datatype 위반 1건이 나옵니다.

03

:서준 a :Person ; :name "서준" ; :worksAt :서울 .이고 :서울 a :City만 있으면 Class 위반 1건이 나옵니다. 보고서는 sh:conforms false, 결과 3건입니다.

직접 실험해 보기

세 규칙(name 최소 1개, age 정수, worksAt 값이 Org)을 하나씩 켜기 전에 검증 보고서에 어떤 focus node와 path가 나올지 예측하고, 켠 뒤 실제 보고서 행과 비교하세요.

LIVE EXPERIMENT · SHACL VALIDATION

SHACL shape로 데이터를 검증해 위반 보고서 받기

@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix : <http://example.org/> .

:PersonShape a sh:NodeShape ;
  sh:targetClass :Person ;
  sh:property [
    sh:path :name ;
    sh:minCount 1
  ] ;
  sh:property [
    sh:path :age ;
    sh:datatype xsd:integer
  ] ;
  sh:property [
    sh:path :worksAt ;
    sh:class :Org
  ] .
worksAtworksAtworksAt민수지아서준하린한빛서울

주황 = 위반 노드 · 연두 = 통과 · 한빛 = :한빛연구소 · 사람 노드를 눌러 상세 보기

지아: 위반 2건:name 값이 0개 — 최소 1개 필요 · "스물다섯"는 xsd:integer가 아님
데이터 고치기
검증 보고서 · sh:conforms false · 위반 3건
focus nodepath제약메시지
지아:namesh:minCount:name 값이 0개 — 최소 1개 필요
지아:agesh:datatype"스물다섯"는 xsd:integer가 아님
서준:worksAtsh:class:서울는 :Org의 인스턴스가 아님

하린은 :worksAt이 없지만 sh:class는 있는 값만 검사하므로 통과합니다. 값이 꼭 있어야 하면 sh:minCount를 더합니다.

OWL의 range는 :서울을 :Org로 ‘추론’했지만(DAY 57), SHACL은 같은 데이터를 닫힌 세계처럼 검사해 위반으로 보고합니다.

이번에는 직접 풀어 보세요

정답을 보기 전에 계산과 이유를 적어 보세요. 해설과 비교하고 확인 표시를 남기면 완료할 수 있습니다.

문제 1
힌트 보기

정확히 1개는 sh:minCount 1과 sh:maxCount 1을 함께 씁니다.

풀이와 비교하기

:ShipmentShape a sh:NodeShape ; sh:targetClass :Shipment ; sh:property [ sh:path :trackingId ; sh:minCount 1 ; sh:maxCount 1 ; sh:datatype xsd:string ] ; sh:property [ sh:path :destination ; sh:minCount 1 ; sh:class :Warehouse ] . trackingId가 두 개인 배송은 MaxCount 위반, 목적지에 Warehouse 타입이 없는 배송은 Class 위반으로 보고됩니다.

풀이와 확인 표시는 이 브라우저에 저장됩니다.

YOUR NOTES

오늘 이해한 것과 다시 볼 것

계산이 달라진 이유, 헷갈린 개념, 다음에 확인할 질문을 남겨 보세요.

메모는 이 브라우저에 저장됩니다. 홈에서 전체 기록을 내려받을 수 있습니다.

오늘의 이해 확인

sh:path :name ; sh:minCount 1이 걸린 사람 노드에 name 트리플이 하나도 없으면?

완료 조건: 확인 퀴즈 정답 · / 직접 풀기 0/1

FURTHER READING

더 깊이 읽기

예제와 실험 데이터는 이 과정을 위해 만든 것입니다. 원문은 선택 자료이며, 강의와 직접 풀기만으로도 다음 회차를 이어갈 수 있습니다.

Shapes Constraint Language (SHACL)W3C

이 자료는 개념 학습용입니다. 실제 데이터베이스·라이브러리·플랫폼의 동작과 설정은 제품과 버전마다 다를 수 있습니다.