Я пытаюсь проанализировать файл данных в формате черепахи, используя RDFlib v4.2.2 в Python v3.6.5, работающий на OS X 10.14.3 Mojave. Основываясь на первоначальных сообщениях об ошибках, я понял, что в файле черепахи отсутствует префикс URI словаря: @prefix xsd: <http://www.w3.org/2001/XMLSchema#>.
Если я добавлю эту строку в заголовок файла, она будет работать, как и ожидалось. Но было бы неплохо сделать это без редактирования файла данных, так как он может время от времени обновляться источником. Будучи новичком в RDF и Turtle, я просмотрел Документация RDFlib и решил, что мне нужна привязка префикса:
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:
@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 является неотъемлемой частью спецификации Грамматика черепахи. Интересно, возможно ли явное объявление этого параметра в некоторых реализациях?






Нет, фрагмент черепахи, который вы разместили, недействителен. 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')
Предполагая, что вы анализируете действительную черепаху, есть ошибка в том, как вы привязываете префикс 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 относительно управления пространством имен.
Пространство имен XSD включено в RDFlib. Он импортируется как:
from rdflib.namespace import XSD
Да, без строки префикса XSD файл черепахи не может быть проанализирован. В вашем фрагменте в этом случае нет цели или привязки префикса XSD. Я включил его, потому что он был в вашем исходном фрагменте, и я хотел показать, как правильно его связать.
Мне нравится предложенный вами подход к добавлению недостающей строки. Вы хотите сказать, что если в моем файле черепахи нет строки префикса XSD, RDFlib не может проанализировать его как есть? Но если это так, то какова цель ручной привязки словаря URI?