Hodustory/프로그래밍&DB

파이썬(Python) 입문 : rdflib 패키지 2 (RDF Triple 만들기)

호두밥 2018. 4. 4. 16:18

RDF 트리플 만들기 (Creating RDF Triples)


RDF는 URL 레퍼런스(클래스 : URIRef), 공백 노드(클래스 : BNode), 문자값(클래스 : Literal) 등이 포함된 그래프입니다.

URIRef와 BNode는 사람, 회사, 웹사이트 등과 같은 리소스로 여겨집니다. BNode는 URI가 없는 것이고, URIRefs는 RDF 그래프에서 속성이나 서술어(관계)를 나타내는 데 사용됩니다. Literal는 이름, 날짜, 숫자와 같은 속성 값을 말합니다. 


노드들은 노드 클래스의 구조에 따라 생성됩니다.

from rdflib import URIRef, BNode, Literal

bob = URIRef("http://example.org/people/Bob")
linda = BNode()
name = Literal('Bob')
age = Literal(24)
height = Literal(70)

같은 namespace(같은 Prefix를 가진 URI)에 여러개의 URIRef는 rdflib.namespace.Namespace 클래스를 가집니다.

from rdflib import Namespace

n = Namespace("http://example.org/people/")

n.bob # = rdflib.term.URIRef(u'http://example.org/people/bob')
n.eve # = rdflib.term.URIRef(u'http://example.org/people/eve')

이것은 같은 URI Prefix를 가진 모든 속성과 클래스에 매우 유용한 스키마입니다. RDFLib는 자주 쓰이는 RDF schema의 네임스페이스를 미리 정의해 놓고 있습니다. 

from rdflib.namespace import RDF, FOAF

pprint(RDF.type)

트리플 추가하기


이미 rdf로 로딩하고 쓰기에서 트리플을 추가할 때 쓰는 함수 parse를 보았습니다. 

add() 함수를 이용해서도 트리플을 추가할 수 있습니다.

from rdflib import URIRef, BNode, Literal
from rdflib.namespace import RDF, FOAF
from rdflib import Graph

bob = URIRef("http://example.org/people/Bob")
name = Literal('Bob') # passing a string

g=Graph()
g.add((bob, RDF.type, FOAF.Person))
g.add((bob, FOAF.name, name))
print (g.serialize(format='turtle'))

일부 속성들은 하나의 리소스 당 하나의 값만 가집니다 이럴 경우 set() 메쏘드가 유용합니다.

g.set((bob,FOAF.age,Literal(43)))
print ("bob is now", g.value(bob, FOAF.age))

rdflib.graph.Graph.value()는 속성에 해당하는 하나의 값만 반환합니다. 여러 값이 있다면 추가적인 예외가 발생합니다. 또한 graphs 전체를 합치는 것으로 트리플을 추가할 수 있습니다. 그럴 경우 여기를 참고하세요.


트리플 삭제하기


간단하게 remove() 함수를 이용해 트리플을 삭제할 수 있습니다. 만약 triple이 문맥속성을 제공하지 않으면, 모든 문맥의 트리플을 삭제합니다. 삭제를 할 때, 특정 조건에 맞는 트리플만 삭제할 수 있습니다. 조건에 none을 입력하면 모든 트리플이 삭제됩니다.

g.remove( (bob, None, None) ) # remove all triples about bob

 

-------------------------

안녕하세요. 호두입니다. 이번에 배운 파이썬 rdf triple 삭제하고 입력하기는 아무래도 loop 구문과 같이 써야 될 것 같습니다. 크롤링을 한 파일을 그래도 rdf로 변환한다던가 말이죠.

요즘 rdf 관련 공부를 해나가고 있는 중인데 너무 배워야 할 것이 많네요.

온톨로지 공부도 해야하고, 데이터 스키마도 알아야 하고, 슬슬 힘에 부칩니다. 그래도! 재미는 있으니 꾸준히 해봐야겠어요! 





반응형