RDF Graph는 RDF 트리플의 한 세트를 말합니다. RDFLib에서 정확하게 미러링하려고 시도하고 그래프는 컨테이너 유형을 모방하려고 시도합니다.
반복자로서의 그래프(Graphs as lterators)
RDFLib Graphs는 내부의 트리플에 대한 반복을 지원하는 순서에 따라 __iter__()로 덧씌워집니다.
for subject, predicate, obj in someGraph:
if not (subject, predicate, obj) in someGraph :
raise Exception("Iterator/container protocols are Broken!!")
존재 확인(Contains Check)
Graph에서 __contains__()를 실행하면, 그래프에 트리플이 있는지를 확인할 수 있습니다.
from rdflib import URIRef
from rdflib.namespace import RDF
bob = URIRef("http://example.org/people/bob")
if ( bob, RDF.type, FOAF.Person ) in graph:
print "This graph knows that Bob is a person!"
이 트리플들은 완벽하게 바운드될 필요는 없습니다.
if (bob, None, None) in graph:
print "This graph contains triples about Bob!"
RDF Graphs에서 SET 기능 (Ser Operations on RDFLib Graphs)
Graphs는 몇개의 파이썬 연산자에 덧씌워집니다. (__iadd__(), __isub__() 등 ) 이것은 더하기, 빼기, 그외 다른 그래프의 set 기능을 지원합니다.
operation | effect |
---|---|
G1 + G2 | 합집합으로 새로운 그래프 |
G1 += G1 | 합집합이나, 더하기로 그래프 대체하기 |
G1 - G2 | 차집합으로 새로운 그래프 |
G1 -= G2 | 차집합으로 그래프 대체하기 |
G1 & G2 | 교집합 |
G1 ^ G2 | xor 대칭차집합(합집합-교집합) |
기본 Triple 매칭
모든 트리플들을 반복하는 대신에, RDFLib graphs 들은 triples() 함수를 이용해 기본 트리플 패턴 매칭을 지원합니다. 이 함수는 인수로 주어든 패턴에 매칭되는 트리플을 발생시킵니다. 이 인수들은 반환되는 트리플을 제한하는 RDF 용어입니다. None은 와일드카드로 이용됩니다.
g.load("some_foaf.rdf")
for s,p,o in g.triples( (None, RDF.type, FOAF.Person) ):
print ("%s is a person"%s)
for s,p,o in g.triples( (None, RDF.type, None) ):
print ("%s is a %s"%(s,o))
bobgraph = Graph()
bobgraph += g.triples( (bob, None, None) )
만약에 당신이 전체 트리플에 관심이 없다면 object(), subjects(), predicates(), predicates_objects() 등을 이용해 원하는 부분만 가져올 수도 있습니다. 각각은 제약조건에 대한 트리플 구성요소에 대한 매개변수를 가집니다.
for person in g.subjects(RDF.type, FOAF.Person):
print "%s is a person"%person
결국 어떤 속성에 대해, 리소스 당 하나의 값이 있는 경우 이용할 수 있고, 또는 최대 튜플의 갯수를 가집니다. 그 value() 메소드는 이것을 위해 사용되며, 값은 하나의 노드로 반환됩니다.
name = g.value(bob, FOAF.name) # get any name of bob
# get the one person that knows bob and raise an exception if more are found
mbox = g.value(predicate=FOAF.name, object=bob, any=False)
트리플에 접근하기 위한 Graph 메소드
그래프에 쿼리하기 위한 간편한 메소드들이 있습니다.
- Graph.lable() : 노드의 라벨값을 반환합니다.
- Graph.preferredLable() : SKOS에서 제공하는 대표이름 관계를 가진 preferredLable 값을 반환합니다.
- Graph.triples() : 트리플 스토어를 발생시켜, 입력된 패턴에 맞는 트리플을 모두 반환합니다.
- Graph.value() : 두쌍의 인수로 이루어지며, 보통은 subject와 predicate(서술/관계)가 명시되고, object에 None이 입력됩니다.
- Graph.subjects(predicate=None, object=None) : 주어진 조건에 대한 subject를 반환합니다.
- Graph.objects(subject=None, predicate=None) : 주어진 조건에 대한 object를 반환합니다.
- Graph.predicates(subject=None, object=None) : 주어진 조건에 대한 predicates를 반환합니다.
- Graph.subject_objects(predicate=None) : 주어진 predicate를 가진 subject와 object를 반환합니다.
- Graph.subject_predicates(object=None) : 주어진 object를 가진 subject와 predicate를 반환합니다.
- Graph.predicate_objects(subject=None) : 주어진 subject를 가진 predicate와 object를 반환합니다.