본문 바로가기

개발자 가이드

목차

  1. LOD 플랫폼 소개

    1. URI 체계
    2. 온톨로지 스키마
    3. OWL Docs
  2. 온톨로지 용어

    1. Linked Data
    2. Namespace
    3. 온톨로지 개념 요소
  3. SPARQL Endpoint

    1. SPARQL Endpoint API
    2. SPARQL 편집기
  4. SPARQL 질의 예시

    1. PREFIX 정의
    2. COUNT 쿼리 예시
    3. FILTER 쿼리 예시
    4. SELECT 쿼리 예시
LOD 플랫폼 소개
  1. 법제처에서 제공하는 링크드 오픈 데이터 서비스 플랫폼은 복잡한 법령정보를 더 쉽게 검색, 분석, 활용할 수 있도록 구조화된 데이터를 제공하고 다양한 데이터 간의 관계를 통해 법령 정보의 의미를 효율적으로 파악할 수 있습니다
    1. URI 체계

      법제처 링크드 오픈 데이터 서비스 플랫폼에서 활용되는 온톨로지 모델의 개념을 표현하는 URI 체계에 대해 설명합니다.
      개념구분 URI예시
      인스턴스 http://lod.law.go.kr/resource/ {법령ID}
      클래스 http://lod.law.go.kr/Class/ {Class 명}
      속성 http://lod.law.go.kr/property/ {속성명}
      실 적용 예 http://lod.law.go.kr/resource/LSI259471(도로교통법)

      ※ 위 표에 작성된 실 적용예 데이터는, 데이터 갱신시 변경될 수 있습니다.

    2. 온톨로지 스키마

      법제처 LOD 플랫폼에서 사용되는 개념, 개체, 속성, 관계 등을 정의한 구조적 틀인 온톨로지 스키마에 대해 설명합니다. 온톨로지 스키마는 데이터와 데이터간의 관계를 형식적으로 표현하는 지식 표현 모델로서, 법제처 LOD 플랫폼에서 활용되는 온톨로지 모델의 뼈대를 제공하며 데이터의 구조에 대해 파악 할 수 있습니다. 온톨로지 클래스

      ※ 위 이미지는 법제처 LOD 온톨로지 요소 중 Class에 해당하는 내역입니다.

    3. OWL Docs

      OWL Docs 란 OWL(Ontology Web Language)로 작성된 온톨로지(ontology)를 설명하고 관리하기 위한 문서화 도구나 가이드 라인입니다. 온톨로지의 내용을 명확하게 문서화하고 해석하는 역할로서, 지식 기반과 데이터의 의미적 관계에 중점을 두어 온톨로지의 개념들에 대한 설명 및 관계에 대한 사용자의 이해를 쉽게 도와줍니다.
온톨로지 용어
  1. 법제처에서 제공하는 링크드 오픈 데이터 서비스 플랫폼에서 구축한 온톨로지 용어에 대해 설명합니다. 온톨로지 용어는 특정 도메인의 데이터 간 관계와 개념을 명확하게 정의하기 위한 용어 체계입니다.
    1. Linked Data

      링크드 데이터

      링크드 데이터(linked data)는 웹 상에 존재하는 데이터를 개별 URI(Uniform Resource Identifier)로 식별하고, 각 URI에 링크 정보를 부여함으로써 상호 연결된 웹을 지향하는 모형이다. 링크 기능이 강조된 시맨틱웹의 모형에 속한다고 볼 수 있으며 팀 버너스 리의 W3C를 중심으로 발전하고 있다.

      ※ 출처 : https://ko.wikipedia.org/wiki/링크드_데이터

    2. Namespace

      Namespace는 온톨로지 내에 구축된 다양한 개체와 관계에 대한 식별자를 구분하기 위해 사용하는 URI 공간입니다. 일반적으로 온톨로지의 용어와 개념을 서로 다른 온톨로지나 데이터와 충돌 없이 사용할 수 있도록 참조에 용이합니다. 아래는 온톨로지 내에서 많이 사용되고 있는 Namespace 예시입니다.
      									  
      										
      										@PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema# >
      										@PREFIX rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#
      										@PREFIX dc: <http://purl.org/dc/elements/1.1/ >
      									  
      									

      ※ 참고 : Dublin Core(https://www.dublincore.org/)

    3. 온톨로지 개념 요소

      개념구분 내용
      인스턴스(Instance) 인스턴스는 사물이나 개념의 구체물이나 사건 등의 실질적인 형태로 나타난 그 자체를 의미한다. 즉, "LG전자 ST-500 울트라슬림 키보드", "삼성 싱크마스터 Wide LCD 모니터", "로미오와 줄리엣의 사랑"은 일반적으로 인스턴스라 볼 수 있다. 이와 같은 클래스와 인스턴스의 구분은 응용과 사용목적에 따라서 매우 달라질 수 있다. 즉, 같은 표현의 개체가 어떠한 경우에는 클래스가 되었다가 다른 경우에는 인스턴스가 될 수 있다.
      클래스(Class) 클래스는 일반적으로 우리가 사물이나 개념 등에 붙이는 이름을 말한다고 설명할 수 있다. "키보드", "모니터", "사랑"과 같은 것은 모두 클래스라고 할 수 있다.
      속성(Property) 속성은 클래스나 인스턴스의 특정한 성질, 성향 등을 나타내기 위하여 클래스나 인스턴스를 특정한 값(value)과 연결시킨 것이다.
      관계(Relation) 관계는 클래스, 인스턴스 간에 존재하는 관계들을 칭하며, 일반적으로 taxonomic relation과 non-taxonomic relation으로 구분할 수 있다. * Taxonomic Relation은 클래스, 인스턴스들의 개념분류를 위하여 보다 폭넓은 개념과 구체적인 개념들로 구분하여 계층적으로 표현하는 관계이다. * Non-taxonomic relation은 Taxonomic Relation이 아닌 관계를 말한다. 예를 들어, "운동으로 인해 건강해진다"는 것은 "cause" 관계(인과관계)를 이용하여 표현한다.

      ※ 출처 : https://ko.wikipedia.org/wiki/링크드_데이터

SPARQL Endpoint
  1. 법제처에서 제공하는 링크드 오픈 데이터 서비스 플랫폼의 SPARQL Endpoint 주소는 https://lod.law.go.kr/DRF/lod/sparql.do 입니다. REST URL을 통해서 SPARQL 쿼리에 대해 접근할 수 있으며, 텍스트 형식의 SPARQL 편집기를 통해서 자유롭게 SPARQL 쿼리를 작성할 수 있습니다.
    1. SPARQL Enpoint API

      SPARQL Endpoint API는 온톨로지와 시멘틱 웹 데이터를 효율적으로 검색하고 관리할 수 있는 도구입니다. SPARQL 은 RDF 데이터를 질의하기 위한 표준화된 쿼리 언어로서, 구조화된 데이터를 정확하고 빠르게 검색할 수 있습니다.
      * API 파라미터
      파라미터 필요여부 설명
      query 필수 URL인코딩된 질의언어 (SELECT, ASK, DESCRIBE, CONSTRUCT)
      Format 선택 질의 결과에 대한 포맷 (HTML, JSON, XML)
      * HTTP 요청 메소드 (Request Methods)
      									  
      										// SPARQL Endpoint API GET방식 예시
      										https://lod.law.go.kr/DRF/lod/sparql.do?query=select *{?s ?p ?o} limit 5  
      									  
      									
      * 응답형식(Response Formats)
      SPARQL Endpoint는 사용자가 요청한 SPARQL 질의에 대하여 아래와 같이 지원하고 있습니다. 응답형식 선택은 HTTP Accept 헤더를 이용하며, 아래 표와 같이 다양한 형식의 SPARQL 질의와 Accept, 반환 파라미터를 참조하시기 바랍니다.

      ※ SELECT 쿼리는 기본적으로 HTML 포맷으로 반환됩니다.
      ※ DESCRIBE와 CONSTRUCT는 RDF graph이므로 기본적으로 application/rdf+xml 형식으로 반환됩니다.

      질의형식 Accept 헤더 반환포맷 명세
      SELECT, ASK application/rdf+xml xml SPARQL XML Results Format
      SELECT, ASK application/rdf+json json SPARQL JSON Results Format
      SELECT text/html html HTML
      CONSTRUCT, DESCRIBE application/rdf+xml rdf RDF/XML
      CONSTRUCT, DESCRIBE application/rdf+json Json RDF/JSON
    2. SPARQL 편집기

      법제처에서 제공하는 링크드 오픈 데이터 서비스 플랫폼의 데이터를 직접 질의할 수 있는 텍스트 형식의 질의 작성기입니다. 사용자가 작성한 다양한 질의를 작성하여 결과를 얻을 수 있습니다. 질의 결과 포맷으로는 HTML, RDF/XML, RDF/JSON과 같은 형식으로 받을 수 있으며, 어플리케이션 활용에 맞게 형식을 선택하여 사용할 수 있습니다.

      ※ 위 이미지 클릭 시 SPARQL Endpoint 화면으로 이동합니다.

SPARQL 질의 예시
  1. 법제처에서 제공하는 링크드 오픈 데이터 서비스 플랫폼의 구축 데이터에 대한 질의 예시 내역을 제공합니다. SPARQL 쿼리의 기본적인 구조에서부터 다소 복잡한 질의 작성 방법을 제공하여, 온톨로지 데이터에 대한 다양한 탐색 및 검색 방법을 제공합니다.
    1. PREFIX 정의

      네임스페이스는 리소스(Resource)가 가지는 URI 식별주소로써, SPARQL 쿼리의 최상단에 정의하고 SPARQL 본문 내부에 정의한 PREFIX를 사용할 수 있습니다. 아래는 법제처에서 제공하는 링크드 오픈 데이터 서비스 플랫폼에서 사용하는PREFIX 내역입니다.
      									  
      										PREFIX dc: <http://purl.org/dc/elements/1.1/ > 
      										PREFIX foaf: <http://xmlns.com/foaf/0.1/ > 
      										PREFIX gn: <http://www.geonames.org/ontology# >
      										PREFIX ldc: <http://lod.law.go.kr/Class/ >
      										PREFIX ldp: <http://lod.law.go.kr/property/ >
      										PREFIX ldr: <http://lod.law.go.kr/resource/ > 
      										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 skos: <http://www.w3.org/2004/02/skos/core# > 
      										PREFIX wgs: <http://www.w3.org/2003/01/geo/wgs84_pos# >
      										PREFIX xsd: <http://www.w3.org/2001/XMLSchema# >
      									   
      									
    2. COUNT 쿼리 예시

      COUNT 함수는 조회하고자 하는 데이터의 개수를 확인하기 위해 사용하는 함수입니다. 아래 예시와 같은 쿼리들을 활용하여 다양하게 COUNT 함수를 작성하여 쉽고 효율적으로 필요에 맞는 온톨로지 데이터를 조회할 수 있습니다.
      * 현행법령의 인스턴스 수 조회
      									  
      										PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
      										PREFIX ldc: <http://lod.law.go.kr/Class/>
      										PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
      										SELECT (COUNT(?resource) as ?res) {
      										?resource ?property ?object .
      										?resource rdf:type ?type.
      										filter(?type = ldc:KoreanLegislation)
      										}
      									   
      									
      * 서울특별시에서 제정한 자치법규 수 조회
      									  
      										PREFIX ldp: <http://lod.law.go.kr/property/ >
      										PREFIX ldr: <http://lod.law.go.kr/resource/ >
      										SELECT (COUNT(?자치법규) as ?자치법규수){
      										  ?자치법규 ldp:hasKoreanLocalGovernmentCategory ?지자체 .
      										  filter(?지자체 = ldr:koreanLocalGovernmentClassification_6110000)
      										}
      									  
      									
      * 행정안전부가 소관부처인 법령과 행정규칙의 인스턴스 수 조회
      									  
      										PREFIX ldr: <http://lod.law.go.kr/resource/> 
      										PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
      										PREFIX ldc: <http://lod.law.go.kr/Class/> 
      										PREFIX ldp: <http://lod.law.go.kr/property/> 
      										select ?법령유형명 (CONCAT( str(COUNT(?인스턴스)) , " 건") as ?법령){
      										?인스턴스 ldp:hasKoreanAdminAgencyCategory ?소관부처 . 
      										?인스턴스 a ?법령유형 .
      										?법령유형 rdfs:label ?법령유형명.
      										filter(?법령유형 != ldc:KoreanLegislationNorms)
      										filter(?소관부처 = ldr:koreanAdminAgencyClassification_1741000)
      										filter(lang(?법령유형명) = 'ko')
      										} group by ?법령유형 ?법령유형명
      									  
      									
    3. FILTER 쿼리 예시

      FILTER 함수는 RDB에서 데이터를 조회할 때, WHERE과 같이 조건절의 기능을 합니다. 아래 예시와 같은 쿼리들을 활용하여 다양하게 FILTER 함수를 작성하여 쉽고 효율적으로 필요에 맞는 온톨로지 데이터를 조회할 수 있습니다.
      * 강원대학교의 규정 조회
      									  
      										PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
      										PREFIX ldp: <http://lod.law.go.kr/property/>
      										select ?법령 ?법령명 {
      										 ?법령 ldp:hasKoreanUniversityCategory ?scpb .
      										 ?법령 ldp:lawName ?법령명 .
      										 ?scpb rdfs:label ?대학교명 .
      										 filter(contains(str(?대학교명), '강원대학교'))
      										}
      									  
      									
      * 2024년 1월 1일부터 시행된 현행법령 조회
      									  
      										PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
      										PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
      										PREFIX ldp: <http://lod.law.go.kr/property/>
      										PREFIX ldc: <http://lod.law.go.kr/Class/>
      										select distinct ?법령 ?법령명 ?시행일 {
      										 ?법령 ldp:enforceDate ?시행일 .
      										 ?법령 rdf:type ?법령유형 .
      										 ?법령 ldp:lawName ?법령명 .
      										 filter(?시행일 >= "2024-01-01"^^xsd:dateTime)
      										 filter(?법령유형 = ldc:KoreanLegislation)
      										}
      									  
      									
      * 국민권익위원회와 관련된 법령 유형별 법령 갯수 조회
      									  
      										PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
      										PREFIX ldp: <http://lod.law.go.kr/property/>
      										PREFIX ldc: <http://lod.law.go.kr/Class/>
      										select ?법령 ?법령명 {
      										 ?법령 ldp:hasReformCategory ?개정유형.
      										 ?법령 a ?type .
      										 ?법령 ldp:lawName ?법령명 .
      										 ?개정유형 rdfs:label ?label .
      										 ?개정유형 ldp:reformCode ?개정코드
      										 filter(?개정코드 = 200403)
      										 filter(?type = ldc:KoreanAdministrativeRules)
      										}
      
      									  
      									
    4. SELECT 쿼리 예시

      트리플 패턴으로 원하는 데이터의 정보를 조회할 수 있는 SELECT 쿼리입니다. “?변수”와 같은 형태로, 조회하고자 하는 데이터의 변수를 지정할 수 있습니다. 같은 쿼리들을 활용하여 다양하게 SELECT 함수를 작성하여 쉽고 효율적으로 필요에 맞는 온톨로지 데이터를 조회할 수 있습니다.
      * 현행법령의 법령명 100개 조회하기
      									  
      										PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
      										PREFIX ldc: <http://lod.law.go.kr/Class/>
      										PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
      										SELECT DISTINCT * WHERE {
      										  ?현행법령 a ldc:KoreanLegislation .
      										  rdfs:label ?법령명
      										} ORDER BY ?법령명 LIMIT 100
      
      									  
      									
      * 서울특별시에 해당하는 지자체 지역명 조회
      									  
      										PREFIX ldp: <http://lod.law.go.kr/property/>
      										PREFIX ldr: <http://lod.law.go.kr/resource/>
      										SELECT (COUNT(?자치법규) as ?자치법규수){
      										 ?자치법규 ldp:hasKoreanLocalGovernmentCategory ?지자체 .
      										 filter(?지자체 = ldr:koreanLocalGovernmentClassification_6110000)
      										}
      									  
      									
      * 현행법령, 행정규칙, 자치법규들의 법령명과 시행일 조회
      									  
      										PREFIX ldp: <http://lod.law.go.kr/property/>
      										PREFIX ldc: <http://lod.law.go.kr/Class/>
      										PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
      										SELECT DISTINCT ?법령 ?법령명 ?시행일 {
      										 {
      										  ?법령 ldp:enforceDate ?시행일 .
      										  ?법령 ldp:lawName ?법령명 .
      										  ?법령 rdf:type ?type .
      										  filter(?type = ldc:KoreanLegislation)
      										  } UNION {
      										  ?법령 ldp:enforceDate ?시행일 .
      										  ?법령 ldp:lawName ?법령명 .
      										  ?법령 rdf:type ?type .
      										  filter(?type = ldc:KoreanAdministrativeRules)
      										 } UNION {
      										  ?법령 ldp:enforceDate ?시행일 .
      										  ?법령ldp:lawName ?법령명 .
      										  ?법령 rdf:type ?type .
      										  filter(?type = ldc:KoreanOrdinance)
      										 }
      										}