왜 AKN인가
kr2akn은 법제처 eflaw XML과 판례 XML을 OASIS Akoma Ntoso(AKN)로 바꾼다.
이 페이지는 “왜 굳이 바꾸는가”를 먼저 설명하고, 상세 예시는 뒤 페이지로
연결한다.
5분 요약
| 질문 | 짧은 답 |
|---|---|
| 법제처 XML은 무엇에 강한가? | 한 문서를 정확히 전달하고 원문을 보존하는 데 강하다. |
| AKN은 무엇에 강한가? | 문서 간 인용, 계층, 식별자, 버전/시간, 표 구조를 기계가 바로 해석하게 한다. |
kr2akn은 무엇을 하나? |
표시용 텍스트를 AKN 구조로 옮기고, 한국 특유 필드는 kr: 확장으로 보존한다. |
| 가장 큰 변화는? | 제2조(신의성실) 같은 문자열이 <article><num>제2조</num><heading>신의성실</heading>...로 바뀐다. |
| 왜 중요한가? | 인용이 안정적인 URI가 되고, 표가 데이터가 되고, emit → decode → emit 검증이 가능해진다. |
법제처 XML의 강점과 한계
법제처 eflaw XML은 한 문서를 있는 그대로 전달하는 데 최적화되어 있다. 사람이 읽는 순서, 원문 표시, 공포/시행 정보가 잘 들어 있다.
하지만 여러 문서를 연결하거나, 표를 데이터로 쓰거나, 버전을 비교하려면 한 단계 더 해석해야 한다.
제2조(신의성실)은 제목과 번호가 한 문자열 안에 섞여 있다.①,②는<항번호>와<항내용>에 나뉘어 있지만, 계층은 태그 중첩으로만 표현된다.- 다른 조문을 가리키는
제9조제2항은 그냥 텍스트다. 안정적인 대상 ID가 없다. - 별표의 표는
<별표내용>안의 box-drawing 문자로 들어 있다. - 판례의
참조조문/참조판례도 사람이 읽는 문자열 목록이다.
AKN이 바꾸는 것
| 법제처 XML | AKN | 효과 |
|---|---|---|
법령ID |
FRBRWork URI |
문서를 안정적으로 식별 |
조문번호 + 조문제목 |
article/num + article/heading |
번호/제목 검색·비교 |
항/호/목 |
paragraph/point/indent |
계층 경로로 조회 |
제9조제2항 |
<ref href="#..."> |
인용 그래프 |
별표내용 |
<table><tr><th rowspan colspan> |
표 데이터 |
공포일자/시행일자 |
lifecycle/temporalData |
버전/시간 |
| raw 필드 | kr:lawMeta/kr:caseMeta |
한국 특유 정보 보존 |
법제처 XML을 그대로 쓰면 “한 문서를 읽는 것”은 잘 되지만, “여러 문서를 연결하는 것”은 어렵다. 인용은 문자열이라 대상이 바뀌어도 자동으로 따라가지 않고, 표는 문자열이라 조건 검색이 안 되고, 문서 버전은 파일 단위로만 구분된다. AKN은 이 세 가지를 구조로 바꾼다.
1. 인용이 문자열에서 링크로 바뀐다
법제처 XML에서는 제9조제2항이 그냥 글자다. AKN에서는
<ref href="#part_1__chp_2__sec_1__art_9__para_2">가 된다.
- “이 조문을 인용한 다른 조문”을 찾을 수 있다.
- 인용 대상이 개정되면 어떤 문서가 영향을 받는지 추적할 수 있다.
urn:kr:law-name:...,urn:kr:case:...로 문서 간 그래프를 만들 수 있다.
2. 표가 검색 가능한 데이터가 된다
box-drawing 표는 사람에게는 읽히지만, 기계에게는 그냥 긴 문자열이다.
AKN의 <table>은 행/열/병합을 명시하므로:
- “1차 위반 과태료가 100만원인 항목”을 조건으로 찾을 수 있고,
- 표를 CSV/JSON으로 변환할 수 있으며,
- rowspan/colspan을 유지한 채 다시 표로 렌더링할 수 있다.
3. 버전과 시간을 다룰 수 있다
법령은 시행일이 바뀌고, 조문별 시행일이 다를 수 있다.
AKN의 FRBRExpression, lifecycle, temporalData, period는
“어느 시점의 문서인가”를 구조로 표현한다.
kr2akn은 현재 시행일을 기본으로 하되, 조문별 조문시행일자가 다르면
별도 temporalGroup을 만든다. 종료일/폐지일이 있는 raw 필드가 오면
timeInterval end와 eventRef type="repeal"로 표현한다.
4. 검증과 왕복이 가능하다
AKN은 OASIS XSD가 있다. kr2akn은 --validate로 출력을 XSD 검증하고,
emit → akn2kr → emit이 canonical equality를 만족하는지 확인한다.
kr2akn validate --input ../data/akn/001706.akn.xml
kr2akn roundtrip --law-id 001706 --data-dir ../data --strict-model
이 왕복 검증이 중요한 이유는, 변환이 예쁘게 보이는 것이 아니라 내용을 잃지 않는 것을 목표로 하기 때문이다.
5. 한국 특유의 정보를 버리지 않는다
AKN은 국제 표준이라 한국의 모든 필드를 담는 요소가 없다.
kr2akn은 kr: 확장으로 다음을 보존한다.
kr:lawMeta: 법령키, 법종, 소관부처, 공포번호, raw SHA-256kr:caseMeta: 사건 ID, 사건번호, 법원, 선고일, 사건종류kr:caseHeader: 43-bit packed header, N/M, registry versionkr:revisionType,kr:changed,kr:effectiveDatekr:promulgationDate,kr:promulgationNo(부칙)kr:refType="amendment"(부칙/개정문 인용)
즉, AKN 표준을 따르되 한국 법령 데이터의 맥락을 잃지 않는 절충이다.
이 위키의 읽기 순서
- 스키마 비교 — 필드와 트리를 눈으로 비교
- 민법 제2조 — 가장 단순한 변환
- 부동산등기법 제84조의2 — 계층과 인용
- 부칙 — amendment-scoped citation
- 별표 — box-drawing 표
- 판례 — 사건번호에서 FRBR까지
- 코퍼스와 한계 — 현재 범위
- 직접 확인하기 — CLI와 테스트