logo

SHACL

SHACL이란 무엇입니까

SHACL(Shapes Constraint Language)은 RDF 그래프가 정해진 조건을 만족하는지 검증하기 위한 표준입니다. OWL이 의미와 추론에 초점을 둔다면 SHACL은 데이터 품질 검사에 초점을 둡니다.

예를 들어 고객에게 이름이 반드시 있어야 하고, 상품 가격은 숫자여야 하며, 주문에는 구매자와 상품이 있어야 한다는 조건을 검사할 수 있습니다.

모양과 대상

SHACL의 핵심은 모양(shape)입니다. 모양은 특정 데이터가 가져야 하는 구조와 제약을 정의합니다. 대상(target)은 어떤 노드에 그 모양을 적용할지 정합니다.

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

ex:CustomerShape a sh:NodeShape ;
    sh:targetClass ex:Customer ;
    sh:property [
        sh:path ex:name ;
        sh:minCount 1
    ] .

이 규칙은 ex:Customer 클래스에 속한 모든 노드가 ex:name 값을 적어도 하나 가져야 한다는 뜻입니다.

자료형 검증

값의 자료형도 검증할 수 있습니다.

@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

ex:ProductShape a sh:NodeShape ;
    sh:targetClass ex:Product ;
    sh:property [
        sh:path ex:price ;
        sh:datatype xsd:integer ;
        sh:minInclusive 0
    ] .

이 모양은 상품 가격이 정수이고 0 이상이어야 한다고 검사합니다.

개수 제약

필수값, 최대 개수, 정확한 개수도 표현할 수 있습니다.

ex:OrderShape a sh:NodeShape ;
    sh:targetClass ex:Order ;
    sh:property [
        sh:path ex:buyer ;
        sh:minCount 1 ;
        sh:maxCount 1
    ] ;
    sh:property [
        sh:path ex:item ;
        sh:minCount 1
    ] .

이 규칙은 주문마다 구매자가 정확히 한 명 있어야 하고, 상품은 적어도 하나 있어야 한다는 뜻입니다.

값 범위와 선택지

허용되는 값의 목록도 제한할 수 있습니다.

ex:OrderShape sh:property [
    sh:path ex:status ;
    sh:in ("주문" "결제" "배송" "완료")
] .

이 제약은 주문 상태가 네 가지 값 중 하나여야 한다는 뜻입니다.

검증 결과

SHACL 검증은 보통 데이터 그래프와 모양 그래프를 입력으로 받아 검증 보고서를 출력합니다. 보고서에는 어떤 노드가 어떤 제약을 위반했는지 들어 있습니다.

파이썬에서는 pyshacl을 사용할 수 있습니다.

from pyshacl import validate

conforms, report_graph, report_text = validate(
    data_graph="data.ttl",
    shacl_graph="shapes.ttl",
    inference="rdfs"
)

print(conforms)
print(report_text)

conforms가 참이면 데이터가 모양을 만족한다는 뜻입니다.

검증 과정은 데이터 그래프와 모양 그래프를 함께 넣고, 위반 여부를 보고서로 받는 구조입니다.

flowchart LR
    data["데이터 그래프<br/>data.ttl"]
    shapes["모양 그래프<br/>shapes.ttl"]
    validator["SHACL 검증기"]
    report["검증 보고서"]
    ok["만족<br/>conforms = true"]
    violations["위반 노드와 제약"]

    data --> validator
    shapes --> validator
    validator --> report
    report --> ok
    report --> violations

SHACL과 OWL의 차이

OWL은 열린 세계 가정을 따르기 때문에 정보가 없다고 해서 오류라고 보지 않습니다. SHACL은 검증 목적이므로 필요한 값이 없으면 위반으로 판단할 수 있습니다.

예를 들어 "고객에게 이름이 하나 이상 있어야 합니다"는 OWL보다 SHACL로 표현하는 것이 자연스럽습니다. 반대로 "고객은 사람의 하위 클래스입니다"처럼 의미 계층을 표현하는 것은 OWL이나 RDFS가 더 자연스럽습니다.

정리

SHACL은 RDF 데이터의 품질과 구조를 검증하기 위한 표준입니다. 필수 속성, 자료형, 값 범위, 개수 제약을 표현할 수 있으며, 운영 환경에서 지식 그래프의 데이터 오류를 찾는 데 중요합니다.

Previous
SWRL