@prefix crm: <http://www.cidoc-crm.org/cidoc-crm/> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix hanbok: <https://hanboklab.com/ontology/> .
@prefix hanbokc: <https://hanboklab.com/concept/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix vann: <http://purl.org/vocab/vann/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

hanbok:ActorShape a sh:NodeShape ;
    rdfs:label "소장처"@ko ;
    rdfs:isDefinedBy hanbok: ;
    sh:property [ sh:description "유물별 상세 주소가 없는 기관만. 예: https://museum.dankook.ac.kr/소장품-검색"@ko ;
            sh:maxCount 1 ;
            sh:name "소장품 검색 페이지"@ko ;
            sh:nodeKind sh:IRI ;
            sh:path rdfs:seeAlso ],
        [ sh:description "crm:E39_Actor와 함께 crm:E74_Group(기관·단체) 또는 crm:E21_Person(개인 소장자) 중 하나를 단다. 개인인지 단체인지 모르면 E39만 단다"@ko ;
            sh:name "세부 유형"@ko ;
            sh:nodeKind sh:IRI ;
            sh:path rdf:type ],
        [ sh:maxCount 1 ;
            sh:name "누리집"@ko ;
            sh:nodeKind sh:IRI ;
            sh:path foaf:homepage ],
        [ sh:datatype rdf:langString ;
            sh:description "한국어 필수, 영어 선택. 예: 메트로폴리탄 미술관@ko, The Metropolitan Museum of Art@en. 기관과 개인 소장자를 모두 담으려고 E39 Actor로 두고, 아는 경우 세부 유형을 함께 단다. 출처가 개인 소장자 이름을 가린 경우(고＊＊＊)는 가린 그대로 적는다"@ko ;
            sh:minCount 1 ;
            sh:name "기관명"@ko ;
            sh:nodeKind sh:Literal ;
            sh:path rdfs:label ],
        [ sh:description "예: 위키데이터 항목"@ko ;
            sh:name "동일 개체(외부 URI)"@ko ;
            sh:nodeKind sh:IRI ;
            sh:path owl:sameAs ] ;
    sh:targetClass crm:E39_Actor .

hanbok:ConceptSchemeShape a sh:NodeShape ;
    rdfs:label "개념체계"@ko ;
    rdfs:isDefinedBy hanbok: ;
    sh:property [ sh:datatype rdf:langString ;
            sh:description "언어당 하나(한국어 필수, 영어 선택)."@ko ;
            sh:minCount 1 ;
            sh:name "체계명"@ko ;
            sh:nodeKind sh:Literal ;
            sh:path skos:prefLabel ;
            sh:uniqueLang true ],
        [ sh:datatype rdf:langString ;
            sh:description "이 체계가 무엇을 다루고 무엇을 다루지 않는지"@ko ;
            sh:maxCount 1 ;
            sh:name "범위"@ko ;
            sh:nodeKind sh:Literal ;
            sh:path skos:scopeNote ] ;
    sh:targetClass skos:ConceptScheme .

hanbok:ConceptShape a sh:NodeShape ;
    rdfs:label "개념"@ko ;
    rdfs:isDefinedBy hanbok: ;
    sh:property [ sh:class skos:Concept ;
            sh:description "경계가 사람마다 달라 상하로 둘 수 없는 관계. 예: 조선 말기 — 19세기"@ko ;
            sh:name "관련 개념"@ko ;
            sh:nodeKind sh:IRI ;
            sh:path skos:related ],
        [ sh:description "예: 위키데이터, Getty AAT"@ko ;
            sh:name "외부 동일 개념"@ko ;
            sh:nodeKind sh:IRI ;
            sh:path skos:exactMatch ],
        [ sh:class skos:ConceptScheme ;
            sh:description "체계의 꼭대기일 때만"@ko ;
            sh:maxCount 1 ;
            sh:name "최상위 개념"@ko ;
            sh:nodeKind sh:IRI ;
            sh:path skos:topConceptOf ],
        [ sh:class skos:Concept ;
            sh:description "예: 쌍학 → 학 → 날짐승, 19세기 후반 → 19세기"@ko ;
            sh:name "상위 개념"@ko ;
            sh:nodeKind sh:IRI ;
            sh:path skos:broader ],
        [ sh:datatype rdf:langString ;
            sh:description "검색어도 여기 넣는다. 예: 쌍학문, 쌍학무늬, 雙鶴, 쌍학흉배"@ko ;
            sh:name "이칭"@ko ;
            sh:nodeKind sh:Literal ;
            sh:path skos:altLabel ],
        [ sh:datatype rdf:langString ;
            sh:description "언어당 하나(한국어 필수, 영어 선택). crm:E55_Type을 겸한다"@ko ;
            sh:minCount 1 ;
            sh:name "우선어"@ko ;
            sh:nodeKind sh:Literal ;
            sh:path skos:prefLabel ;
            sh:uniqueLang true ],
        [ sh:class skos:ConceptScheme ;
            sh:description "자료 구분 / 문양 / 국적 / 시기 / 재질 / 착용 맥락 / 이용조건 / 측정"@ko ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:name "소속 개념체계"@ko ;
            sh:nodeKind sh:IRI ;
            sh:path skos:inScheme ],
        [ sh:datatype rdf:langString ;
            sh:maxCount 1 ;
            sh:name "범위주기"@ko ;
            sh:nodeKind sh:Literal ;
            sh:path skos:scopeNote ] ;
    sh:targetClass skos:Concept .

hanbok:DimensionShape a sh:NodeShape ;
    rdfs:label "크기"@ko ;
    rdfs:isDefinedBy hanbok: ;
    sh:property [ sh:class skos:Concept ;
            sh:description "「세로」 또는 「가로」"@ko ;
            sh:name "측정 종류"@ko ;
            sh:nodeKind sh:IRI ;
            sh:path crm:P2_has_type ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:property [ sh:hasValue hanbokc:measurement ;
                            sh:path skos:inScheme ] ] ],
        [ sh:datatype xsd:decimal ;
            sh:description "소수점 한 자리. 예: 21.0"@ko ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:name "값"@ko ;
            sh:nodeKind sh:Literal ;
            sh:path crm:P90_has_value ],
        [ sh:class skos:Concept ;
            sh:description "「cm」. 인치 등 다른 단위는 cm로 환산하고 원문은 기관 레코드에 남긴다"@ko ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:name "단위"@ko ;
            sh:nodeKind sh:IRI ;
            sh:path crm:P91_has_unit ] ;
    sh:targetClass crm:E54_Dimension .

hanbok:HyungbaeShape a sh:NodeShape ;
    rdfs:label "흉배 유물"@ko ;
    rdfs:isDefinedBy hanbok: ;
    sh:property [ sh:class crm:E54_Dimension ;
            sh:description "세로·가로 각각 하나씩. 10/9 수집 시트 344건 중 220건에 크기 값 있음"@ko ;
            sh:name "크기"@ko ;
            sh:nodeKind sh:IRI ;
            sh:path crm:P43_has_dimension ],
        [ sh:class skos:Concept ;
            sh:description "착용 맥락 개념체계의 개념: 관복 / 혼례복 / 미상. 흉배를 단 복식을 어떤 자리에서 입었는지. 형태가 같은 단령이라도 혼례 때 입었으면 혼례로 적는다"@ko ;
            sh:maxCount 1 ;
            sh:name "착용 맥락"@ko ;
            sh:nodeKind sh:IRI ;
            sh:path crm:P101_had_as_general_use ],
        [ sh:datatype xsd:integer ;
            sh:description "기관이 연도를 직접 적은 경우에만. 예: 1850년 → 1850"@ko ;
            sh:maxCount 1 ;
            sh:name "시작 연도"@ko ;
            sh:nodeKind sh:Literal ;
            sh:path hanbok:beginYear ],
        [ sh:class skos:Concept ;
            sh:description "자료 구분 개념체계의 개념. 이번 범위에서는 「흉배」(hanbokc:hyungbae) 하나"@ko ;
            sh:name "자료 구분"@ko ;
            sh:nodeKind sh:IRI ;
            sh:path crm:P2_has_type ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:property [ sh:hasValue hanbokc:objectType ;
                            sh:path skos:inScheme ] ] ],
        [ sh:datatype xsd:integer ;
            sh:description "기관이 연도 범위를 직접 적은 경우에만. 단일 연도면 시작 연도와 같게"@ko ;
            sh:maxCount 1 ;
            sh:name "끝 연도"@ko ;
            sh:nodeKind sh:Literal ;
            sh:path hanbok:endYear ],
        [ sh:class skos:Concept ;
            sh:description "이용조건 개념체계의 개념(공공누리 1~4유형, CC0, NC, 확인 중 등). 소장처 이미지·기록의 이용조건이며 이 아카이브가 덧붙인 값은 CC BY 4.0"@ko ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:name "이용조건"@ko ;
            sh:nodeKind sh:IRI ;
            sh:path dcterms:license ],
        [ sh:datatype rdf:langString ;
            sh:description "한글명(@ko)·한자명(@ko-Hani)·영어명(@en)을 언어 태그를 붙여 각각 넣는다. 한글명 필수. 유물ID는 이 유물의 URI(hanboko:hb0001 …)가 맡는다 · 이윤서 그래프"@ko ;
            sh:minCount 1 ;
            sh:name "명칭"@ko ;
            sh:nodeKind sh:Literal ;
            sh:path dcterms:title ],
        [ sh:class skos:Concept ;
            sh:description "시기 개념체계의 개념. 흉배가 제작·착용된 것으로 보는 시기. 기관 기재값을 숫자로 바꾸지 않고 해당 개념에 연결만 한다. 예: late 19th century → 「19세기 후반」. 기관이 '조선'만 적었거나 미상이면 비운다"@ko ;
            sh:name "시기"@ko ;
            sh:nodeKind sh:IRI ;
            sh:path dcterms:temporal ],
        [ sh:datatype xsd:string ;
            sh:description "소장처가 붙인 번호 그대로. 예: 53.60.9, 신수11458. 출처 사이트가 제공하지 않으면 비운다('확인요망' 같은 글자를 넣지 않는다)"@ko ;
            sh:name "소장처 유물번호"@ko ;
            sh:nodeKind sh:Literal ;
            sh:path dcterms:identifier ],
        [ sh:class crm:E39_Actor ;
            sh:description "10/9 수집 시트 기준 56개 소장처"@ko ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:name "소장처"@ko ;
            sh:nodeKind sh:IRI ;
            sh:path crm:P50_has_current_keeper ],
        [ sh:class skos:Concept ;
            sh:description "문양 개념체계의 개념. 주문양 하나만 연결하고 배경 요소(운문·파도·바위·불로초)는 연결하지 않는다. 문양 미기록 건은 연구자 판독 후 채운다"@ko ;
            sh:name "문양"@ko ;
            sh:nodeKind sh:IRI ;
            sh:path crm:P2_has_type ;
            sh:qualifiedMaxCount 1 ;
            sh:qualifiedValueShape [ sh:property [ sh:hasValue hanbokc:motif ;
                            sh:path skos:inScheme ] ] ],
        [ sh:class skos:Concept ;
            sh:description "재질 개념체계의 개념. 기관 표기의 수준이 제각각(섬유 / 사직-견 / 직물 / Silk and metallic-thread embroidery …)이라 대표 재질로 묶는 작업은 추후. 그 전까지 원문은 기관 레코드에만 둔다"@ko ;
            sh:name "재질"@ko ;
            sh:nodeKind sh:IRI ;
            sh:path crm:P45_consists_of ],
        [ sh:description "이미지 파일 주소. 한 유물에 여러 장(앞·뒤 등). 공개용 데이터에는 소장처 원본 이미지 URL만 넣고 드라이브·TIFF 링크는 넣지 않는다. e뮤지엄 원본 이미지 URL은 serviceKey(API 인증키)가 들어 있어 공개 전에 키를 지운다"@ko ;
            sh:name "이미지"@ko ;
            sh:nodeKind sh:IRI ;
            sh:path foaf:depiction ],
        [ sh:class skos:Concept ;
            sh:description "국적 개념체계의 개념(한국 / 중국 등). 기관 기재값에 연결만 한다. 예: 한국 - 조선 → 「한국」, China → 「중국」. 중국 흉배·보자를 걸러 내는 데 쓴다"@ko ;
            sh:maxCount 1 ;
            sh:name "국적"@ko ;
            sh:nodeKind sh:IRI ;
            sh:path dcterms:spatial ] ;
    sh:targetClass crm:E22_Human-Made_Object .

hanbok:RecordShape a sh:NodeShape ;
    rdfs:label "기관 레코드"@ko ;
    rdfs:isDefinedBy hanbok: ;
    sh:property [ sh:description "사람이 보는 페이지가 아니라 기관 시스템이 유물 데이터를 돌려주는 주소(JSON 등)가 있을 때만. 예: 단국대 상세API"@ko ;
            sh:maxCount 1 ;
            sh:name "상세 데이터 주소"@ko ;
            sh:nodeKind sh:IRI ;
            sh:path rdfs:seeAlso ],
        [ sh:datatype xsd:string ;
            sh:description "출처 + 임시ID. 예: 국중박-1, 메트로폴리탄-YMETH001. 임시ID는 출처마다 1부터 시작하므로 출처를 붙인다"@ko ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:name "레코드 식별자"@ko ;
            sh:nodeKind sh:Literal ;
            sh:path dcterms:identifier ],
        [ sh:description "유물 한 건을 여는 주소만 넣는다. 유물별 주소가 없는 기관(예: 단국대)은 비우고, 그 기관의 소장품 검색 페이지는 소장처에 한 번만 적는다"@ko ;
            sh:maxCount 1 ;
            sh:name "유물 상세 페이지 주소"@ko ;
            sh:nodeKind sh:IRI ;
            sh:path dcterms:source ],
        [ sh:class crm:E39_Actor ;
            sh:description "레코드를 작성·공개한 기관(통합시트의 '출처'). 보통 소장처와 같고, e뮤지엄·국가유산포털·초상화DB처럼 다른 경우가 있다"@ko ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:name "작성 기관"@ko ;
            sh:nodeKind sh:IRI ;
            sh:path dcterms:publisher ],
        [ sh:class crm:E22_Human-Made_Object ;
            sh:description "대상 클래스: crm:E22_Human-Made_Object · 기관 그래프. 같은 유물이 여러 출처에 있으면(통합시트 '다른 시트에도 있음' 1,190행) 유물 하나에 기관 레코드가 여러 개 붙는다. 기관 칼럼과 값은 기관마다 달라 원문 그대로 두며, 통합 칼럼과의 대응은 SKOS 매핑으로 따로 기록한다"@ko ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:name "기술 대상 유물"@ko ;
            sh:nodeKind sh:IRI ;
            sh:path crm:P70_documents ] ;
    sh:targetClass crm:E31_Document .

hanbok: a owl:Ontology ;
    dcterms:creator "이윤서"@ko ;
    dcterms:description "흉배 아카이브 데이터의 기술규칙(SHACL). 기술규칙.dctap.csv에서 변환."@ko ;
    dcterms:license <https://creativecommons.org/licenses/by/4.0/> ;
    dcterms:modified "2026-11-03"^^xsd:date ;
    dcterms:title "한복 아카이브 기술규칙"@ko ;
    vann:preferredNamespacePrefix "hanbok" ;
    vann:preferredNamespaceUri "https://hanboklab.com/ontology/" ;
    owl:versionInfo "0.1" .

