매핑 설계도

Raw CSV → Entity → Rule → Action 의 4단 추상화

기준 시나리오: ruledata.cloud5.socialbrain.co.kr/#how 장소: 무안 한옥마을 #B-3021 트리거: 2024-03-15 15:14:23 · fireRisk = 0.85
📍 추적 대상: Building #B-3021 · 한옥마을 21호 (김씨고가) · 1923년 일반목구조 한식기와
LAYER 0 RAW · CSV 한 행 buildings.csv:2
컬럼 CSV 값 → 매핑 결정
bldg_id#B-3021URI :Building/B-3021
name한옥마을 21호 (김씨고가)rdfs:label
typeTraditionalClusterrdf:type :TraditionalClusterMember (subclass)
sub_type한옥:subType :BldgSubType/한옥
year1923:builtYear "1923"^^xsd:gYear
structure일반목구조:structure :StructureCode/... (URI 정규화)
fire_risk_current0.85:fireRisk "0.85"^^xsd:decimal
cluster_idCL-01:memberOf :Cluster/CL-01 (FK→URI)
location_addr전남 무안군 몽탄면 한옥마을길 21분해 → 시도/시군구/읍면동/도로명/번호
매핑 결정 포인트 ① · type=TraditionalCluster를 *literal value*로 둘지 *클래스 멤버십*으로 끌어올릴지 — 후자 선택. :Building의 subclass :TraditionalClusterMember로 표현하면 RULE-002의 type == TraditionalCluster 조건이 OWL subsumption으로 평가 가능.
LAYER 1 ENTITY · RDF Triples .ttl (Turtle)
@prefix :    <http://patos.example/ontology#> .
@prefix rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd:  <http://www.w3.org/2001/XMLSchema#> .

# --- 클래스 계층 (정적 어휘, OWL/RDFS) ---
:TraditionalClusterMember rdfs:subClassOf :Building .
:Hanok                    rdfs:subClassOf :TraditionalClusterMember .

# --- 인스턴스: 한 행이 entity가 됨 ---
:Building/B-3021
    rdf:type           :Hanok ;
    rdfs:label         "한옥마을 21호 (김씨고가)" ;
    :builtYear         "1923"^^xsd:gYear ;
    :structure         :StructureCode/일반목구조 ;
    :roof              :RoofCode/한식기와 ;
    :totalArea         "158.4"^^xsd:decimal ;
    :fireRisk          "0.85"^^xsd:decimal ;
    :status            :Status/경보 ;
    :memberOf          :Cluster/CL-01 ;
    :address           [ :sido       :Region/전라남도 ;
                         :sigungu    :Region/무안군 ;
                         :eupmyundong :Region/몽탄면 ;
                         :roadName   "한옥마을길" ;
                         :buildingNo "21" ] ;
    :ownerRole         "보존회 위탁운영" ;
    :adjacentTo        :Building/B-3019 ,
                       :Building/B-3022 ,
                       :Building/B-3025 ,
                       :Building/B-3018 ,
                       :Building/B-3027 .

# --- subsumption으로 자동 도출 (reasoner 또는 query expansion) ---
:Building/B-3021 rdf:type :TraditionalClusterMember .  # via :Hanok subclass
:Building/B-3021 rdf:type :Building .                  # via :TraditionalClusterMember subclass
LAYER 2 RULE EVALUATION · 4개 룰 평가 rules.yaml
RULE-001 건물 화재위험 임계 초과 FIRED · T+0ms
when: Building.fireRisk > 0.70
eval: 0.85 > 0.70 → true
action: create :Incident/INC-882 (severity=HIGH)
RULE-002 전통건축물 자원 매칭 FIRED · T+78ms
when: incident.building.type == TraditionalCluster
eval: :B-3021 a :Hanok ⊑ :TraditionalClusterMember → true (subsumption)
match: 폼차×2 + 전통건축팀×1, exclude 화학소방차
→ 자원: VEH-117, VEH-203, TEAM-T1
RULE-003 인접 건물 선제 경보 FIRED · T+112ms
when: incident.severity == HIGH
collect: :B-3021 :adjacentTo ?b WHERE distance < 100
→ 매칭: #B-3019(42m) #B-3022(68m) #B-3025(93m)
→ 제외: #B-3018(135m), #B-3027(210m)
RULE-004 외부 기관 통보 FIRED · T+156ms
when: incident.building.type == TraditionalCluster → true
notify: 무안소방서(AG-01) + 국가유산청(AG-02) + 보존회장(AG-03)
매핑 결정 포인트 ② · 룰 4개 중 RULE-001은 임계비교 (산술), RULE-002는 클래스 멤버십 (OWL subsumption), RULE-003은 그래프 traversal + 거리 필터 (SPARQL/SHACL/외부 룰), RULE-004는 다중 entity 조회 + 통지. 같은 yaml 파일 안에 4가지 *서로 다른 종류의 추론*이 섞여 있음. → 룰 엔진은 이 모든 걸 통일된 인터페이스로 처리. OWL DL reasoner는 RULE-002만 처리 가능.
LAYER 3 TRIGGER + ACTION · 200ms 시퀀스 의미 → 행동
5 Dispatches
VEH-1174min
폼차 · 무안소방서
VEH-2036min
폼차 · 일로119
TEAM-T18min
전통건축팀 · 임시거점
AMB-092min
구급차 · 무안소방서
CMD-015min
지휘차 · 무안소방서
6 Notifications
RULE-003 인접 (3건)
#B-3019, #B-3022, #B-3025
"선제대피 권고" · SMS+APP
RULE-004 외부 기관 (3건)
무안소방서 · 국가유산청 · 보존회장
API + SMS + 이메일
200ms 시퀀스 (시스템 시각)
15:14:23.001  RULE-001 fires      → Incident INC-882 created
15:14:23.045  graph traversal     → cluster, residents, adjacentTo
15:14:23.078  RULE-002 fires      → 자원 매칭: VEH-117, VEH-203, TEAM-T1
15:14:23.112  RULE-003 fires      → 인접 3건 통보
15:14:23.156  RULE-004 fires      → 외부 기관 3건 통보
15:14:23.201  dispatch 실행       → 5 vehicles + 6 notifications
이 4단 추상화가 ruledata #how의 200ms 트리거 시퀀스와 1:1 대응합니다.
단계별 RDF 변환 상세는 abstraction_steps.md 참조.