2011-03-02 7 views
4

RDFLIB를 사용하여 ntriples이있는 3 개의 데이터 세트 (A, B, C) 사이에 그래프를 작성합니다.주제 또는 다른 방법을 알고있는 rdf 객체를 찾는 방법은 무엇입니까?

목표 : 그래프에는 A -> B, B -> C 및 C -> A의 데이터 세트 사이에 링크가 포함되어 있습니다. A에서 나가는 링크가 동일한 것을 다시 참조하는지 확인하여 링크의 일관성을 확인하고 싶습니다. A에서 B까지의 링크를 반복하면 B-> C에서 해당 항목을 검색 할 수 있습니다 (두 개 이상일 수 있음). C- > A, 모든 항목을 반복하지 않고 제목을 알면 개체를 찾는 방법이 있습니까?

답변

5

모든 항목을 반복하지 않고 제목을 알면 개체를 찾는 방법이 있습니까?

대답은 예입니다. 그리고 당신은 다른 메커니즘에 사용할 수 있습니다 : (a) 제한과 반복; 또는 (b) SPARQL 쿼리를 발행하십시오.

는 (a)의 그래프에 제약이 용액 그래프 오브젝트 위에 RDFLib triples 함수를 사용

반복. this reference을 참조하십시오.

#Parse the file 
g = rdflib.Graph() 
g.parse("yourdata.nquads") 
subject = article = rdflib.term.URIRef("http://www.someuri.org/for/your/subject") 

# (subject,None,None) represents a constrain to iterate over the graph. By setting 
# any of the three elements in the triple you constrain by any combination of subject, 
# predicate or object. In this case we only constrain by subject. 
for triple in g.triples((subject,None,None)): 
    print triple 

(b)는 SPARQL 쿼리

에게 SPARQL standard를 사용하여보다 표준 용액을 실행.

rdflib.plugin.register('sparql', rdflib.query.Processor, 
         'rdfextras.sparql.processor', 'Processor') 
rdflib.plugin.register('sparql', rdflib.query.Result, 
         'rdfextras.sparql.query', 'SPARQLQueryResult') 

#Parse the file 
g = rdflib.Graph() 
g.parse("yourdata.nquads") 

query = """ 
    SELECT ?pred ?obj WHERE { 
     <http://www.someuri.org/for/your/subject> ?pred ?obj 
    } 
    """ 
for row in g.query(query): 
    print "Predicate:%s Object:%s"%(row[0],row[1]) 
+0

감사합니다. 첫 번째 옵션을 매우 간결하게 선택했지만 SPARQLE을 다른 용도로 사용할 것이므로 매우 유용한 답입니다 – user52028778