簡體   English   中英

在python中使用RDFlib進行容錯RDF解析

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM