[英]Error tolerant RDF parsing using RDFlib in python
我正在編寫一個代碼,收集有關本體的一些統計信息。 作為輸入我有一個文件夾,一些是RDF / XML,一些是烏龜或NT。 我的問題是,當我嘗試使用錯誤的格式解析文件時,下次即使我用正確的格式解析它也會失敗。 這里的測試文件是烏龜格式。 如果先用烏龜格式解析它一切都很好。 但如果我首先用錯誤的格式解析它1.錯誤是可以理解的( 文件:///測試:1:0:格式不正確(無效令牌) ),但第二個錯誤是( 未知名稱空間前綴:owl )。 就像我說的那樣,當我第一次用正確的解析時,我沒有得到命名空間錯誤。
2天后,請求幫助,我變得絕望了。
query = 'SELECT DISTINCT ?s ?o WHERE { ?s ?p owl:Ontology . ?s rdfs:comment ?o}'
data = open("test", "r")
g = rdflib.Graph("IOMemory")
try:
result = g.parse(file=data,format="xml")
relations = g.query(query)
print(( " graph has %s statements." % len(g)))
except:
print "bad1"
e = sys.exc_info()[1]
print e
try:
result = g.parse(file=data,format="turtle")
relations = g.query(query)
print(( " graph has %s statements." % len(g)))
except :
print "bad2"
e = sys.exc_info()[1]
print e
問題是g.parse
從文件輸入data
流中讀取一些部分,然后才發現它不是xml。 第二次調用(使用烏龜格式)然后在前一次嘗試停止的部分之后繼續從輸入流中讀取。 第一個解析器讀取的部分將丟失到第一個解析器。
如果您的測試文件很小,那么xml-parser可能已經全部讀過,留下了一個“空”。 看起來烏龜解析器並沒有抱怨 - 它只是一無所獲。 只有下一個語句中的查詢未能在其中找到任何類似owl的內容,因為圖形為空。 (我不得不承認我不能復制這部分,龜解析器在我的情況下抱怨,但也許我有一個不同版本的rdflib
)
要修復它,請嘗試重新打開該文件; 要么重新組織代碼,所以每次調用result = g.parse(file=data, format="(some format)")
或調用data.seek(0)
都有data = open("test", "r")
result = g.parse(file=data, format="(some format)")
,或者調用data.seek(0)
在except:
子句中,如:
for format in 'xml','turtle':
try:
print 'reading', format
result = g.parse(data, format=format)
print 'success'
break
except Exception:
print 'failed'
data.seek(0)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.