[Knowledge Graph] 5. RDFa란?

이 글은 Linked Data(공존의 미학, 단행본)과 W3C의 RDFa 1.1 Primer을 기반으로 작성된 포스트이다. 정확한 내용은 책을 확인하길 바라고, 언제든 댓글은 환영한다🤚

  • 지식 표현 연구 시리즈
  1. What is RDF? RDF란 무엇인가?
  2. From XML to RDF (XML에서 RDF로)
  3. RDF Schema
  4. SPARQL
  5. 🤚 RDFa란?

1. RDFa란? HTML 내 RDF

Schema.org를 들락날락 하다 보면 자주 보게되는 말이 있다.

Schema.org vocabulary can be used with many different encodings, including RDFa, Microdata and JSON-LD.

Schema.org 어휘는 RDFa와 마이크로데이터, JSON-LD를 포함한 다양한 인코딩 방식으로 사용된다는 것이다. Schema.org는 웹 문서 속의 단순한 텍스트로 표현된 정보의 일부(e.g., 사람 이름, 이메일, 전화번호, 주소 등)를 쉽게 RDF로 표현할 수 있도록 해준다.

RDFa는 HTML 내 RDF로, 웹 페이지의 요소를 마크업해 구조화해야 할 데이터를 표현할 수 있도록 하는 단순한 HTML이다. 웹 페이지는 구조화된 데이터가 아니라 문서로 구성된다. 이 문서 안의 전화번호, 주소, 사람 이름, 제품 설명 등의 데이터 요소를 기계가 읽고 처리할 수 있는 구조화된 데이터 형식으로 추출할 수 있도록 해주는 것이 RDFa의 역할이다. 즉, “(HTML) 속성(Attributes) 속 RDF”라는 뜻으로 RDFa라고 한다1.

2. HTML을 RDFa와 함께 발행하기

나의 HTML 문서에 RDFa 파싱을 하기 위해서는 어떻게 해야할까? HTML DOCTYPE을 선언해주면 된다. 문서 타입에 따라 HTML DOCTYPE을 선언해주는 방식이 다르다. 대표적으로 XHTML+RDFa 1.1은 아래처럼 선언하면 된다. 자세한 설명은 위키피디아의 XHTML+RDFa에 잘 설명되어 있다.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.1//EN"
    "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-2.dtd">

XHTML+RDFa의 예시 문서는 아래와 같이 표현된다.

3. 웹 페이지 속 정보를 RDFa로 표현하기

3.1 RDFa의 대표적 예시: Creative Commons License

가장 대표적으로 RDFa가 사용되는 영역은 Creative Commons 라이센스 정보다. 일반적으로 웹페이지가 Creative Commons 3.0 라이센스를 따른다고 할 때, 문서의 footer에 아래와 같이 표기된다.

<p>All content on this site is licensed under
   <a href="http://creativecommons.org/licenses/by/3.0/">
     a Creative Commons License</a>. ©2011 Alice Birpemswick.</p>

인간은 위의 태그를 읽고 홈페이지가 Creative Commons 라이센스를 따른다고 해석할 수 있지만, 안타깝게도 기계는 href 링크를 단순한 링크로 인식한다. 따라서 해당 링크를 기계가 라이센스라고 읽고 처리하도록 하려면, 아래와 같이 property로 표현하면 된다. 간단히 속성만 부여하는 방식은 RDFa Lite 방식이다.

3.2 Contant Information 표현하기

개인의 이름, 이메일, 연락처도 RDFa로 많이 표현되는 요소이다. 개인정보는 html 태그로 아래와 같이 표현될 것이다.

<div>
  <p>
     Alice Birpemswick, 
     Email: <a href="mailto:alice@example.com">alice@example.com</a>,
     Phone: <a href="tel:+1-617-555-7332">+1 617.555.7332</a>
  </p>
</div>

이 또한 인간만 해석할 수 있는 태그이므로, 기계도 이해할 수 있도록 RDFa로 표현해보자.

div 속의 vocab을 사용해 FOAF 어휘를 사용한다고 선언해주고, typeof를 사용해 해당 자원 유형이 사람으로 인식되게 한다. 어휘를 선언해주면, p 태그 속 속성(property)를 간단히 표현할 수 있다. 따라서 기계는 Alice Birpemswick은 사람으로 인식하고, 이름과 Email과 Phone 정보도 인식하게 된다. 그래프로 그리면, 아래와 같다.

A Blank Node: blank nodes are not identified by URL.

그런데 왜 주어(subject)가 blank node로 표현되는 것일까? 당연하게도 자원(resource)를 지정해주지 않았기 때문이다. 명확히 resource를 선언해주는 방법은 아래와 같다. div 태그 안에 resource를 넣어주면 된다.

조금의 정보를 더 추가해주면, 아래의 그림처럼 blank node가 없는 그래프가 만들어진다.

no blank node

3.3 트리플 표현하기

트리플 구조는 RDFa로 어떻게 표현할 수 있을까? 아래의 트리플 구조를 RDFa로 표현해보자.

자원(resource) 속성(Attribute) 값(Value)
dbpedia:Bonobo rdf:type dbpedia-owl:Mammal
http://dbpedia.org/resource/San_Diego_Zoo rdfs:label “San Diego Zoo”@en

첫번째 트리플은 아래와 같이 표현된다.

<span resource='http://dbpedia.org/resource/Bonobo'
typeof='http://dbpedia.org/ontology/Mammal'>
Here are some things we know about Bonobos
</span>

단순한 텍스트 값인 두번째 트리플은 아래와 같이 표현된다.

<span resource='http://dbpedia.org/resource/San_Diego_Zoo'>
  <span lang='en' property='http://www.w3.org/2000/01/rdf-schema#label'
  xml:lang="en">San Diego Zoo</span>
</span>

간단하게 웹 페이지 안의 정보를 구조화된 데이터로 표현할 수 있게 하는 RDFa에 대해 알아보았다. RDFa의 풍부한 정보는 W3C의 RDFa 1.1 Primer - Third Edition에서 확인할 수 있다.

  1. 링크드 데이터(공존의 미학) 52쪽. 

Leave a comment