使用 python / rdflib 解析 turtle,无法指定 IRI 前缀

Parsing turtle with python / rdflib, can't specify IRI prefix

我正在尝试使用 Python v3.6.5 中的 RDFlib v4.2.2、OS X 10.14.3 Mojave 中的 运行 解析 turtle-formatted 数据文件.根据最初的错误消息,我发现 turtle 文件缺少词汇 URI 前缀:@prefix xsd: <http://www.w3.org/2001/XMLSchema#>.

如果我将这一行添加到文件的 header 中,它会按预期工作。但如果不编辑数据文件就可以完成此操作,因为它可以由源不时更新。作为 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')

但是,没有快乐。如果有帮助,这里是文件中的 header 和一只海龟样本,它描述了不同的货币,取自 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" .

是否可以补充 turtle 文件中包含的前缀 URI,如果可以,如何补充?

我注意到缺少的词汇表 XSD 是 Turtle grammar 规范的组成部分。我想知道在某些实现中是否明确声明它可能是可选的?

不,您发布的海龟片段无效。 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