我正在尝试使用在OS X 10.14.3 Mojave上运行的Python v3.6.5中的RDFlib v4.2.2解析乌龟格式的数据文件。根据最初的错误消息,我发现乌龟文件缺少词汇表URI前缀:@prefix xsd: <http://www.w3.org/2001/XMLSchema#>
。
如果我将这一行添加到文件的标题中,它将按预期工作。但是最好不编辑数据文件即可完成此操作,因为它可以由源不时更新。作为RDF和Turtle的新手,我扫描了RDFlib documentation,并决定绑定前缀是我想要的:
from rdflib import Graph
g = Graph()
g.namespace_manager.bind('prefix', 'xsd:http://www.w3.org/2001/XMLSchema#')
g.parse( 'currency.ttl', format='turtle')
但是,没有喜悦。如果有帮助,请参见以下文件的标题和一个示例乌龟,该文件描述了从Thomson Reuters Open PermID project提取的不同货币:
@prefix tr-common: <http://permid.org/ontology/common/> .
@prefix tr-currency: <http://permid.org/ontology/currency/> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
<https://permid.org/1-500191>
a tr-currency:Currency ;
tr-common:hasPermId "500191"^^xsd:string ;
tr-currency:decimalPlaces "0"^^xsd:decimal ;
tr-currency:isCurrencyOf <http://sws.geonames.org/1835841> ;
tr-currency:isISOHistorical false ;
tr-currency:isPrimaryCurrencyOf <http://sws.geonames.org/1835841> ;
tr-currency:iso4217 "KRW"^^xsd:string ;
tr-currency:iso4217Numeric "410"^^xsd:string ;
skos:prefLabel "Korean (South) Won" .
是否可以补充乌龟文件中包含的前缀URI,如果可以,怎么办?
我注意到缺少的词汇表XSD是Turtle grammar规范的组成部分。我想知道是否明确声明在某些实现中它是否是可选的?
答案 0 :(得分:1)
否,您发布的乌龟代码段无效。 XSD需要明确声明。
您可以以字符串形式读取文件,并在xsd前缀之前添加,然后使用RDFLib进行解析,例如:
with open('currency.ttl') as in_file:
ttl_str = '@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .' + in_file.read()
g.parse(data=ttl_str, format='turtle')
假设您正在解析有效的turtle,则绑定xsd前缀的方式存在错误。您想要:
from rdflib import Graph
g = Graph()
g.namespace_manager.bind('xsd', 'http://www.w3.org/2001/XMLSchema#')
g.parse( 'currency.ttl', format='turtle')
我建议看看有关命名空间管理的RDFLib documentation。
XSD名称空间包含在RDFLib中。导入为:
from rdflib.namespace import XSD