Разбор черепахи с python / rdflib, не могу указать префикс IRI - PullRequest
1 голос
/ 15 марта 2019

Я пытаюсь проанализировать файл данных в формате turtle, используя 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')

Но нет радости. Если это полезно, вот заголовок и один образец черепахи из файла, который описывает различные валюты, взятые из проекта *1000* 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, является неотъемлемой частью спецификации Turtle грамматики . Интересно, возможно ли явно объявить, что это необязательно в некоторых реализациях?

1 Ответ

1 голос
/ 15 марта 2019

Нет, размещенный вами фрагмент черепахи недействителен.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

...