dotNetRDF не анализирует LinkedMovie.nt (исключение VDS.RDF.Parsing.RdfParseException)

#dotnetrdf

#dotnetrdf

Вопрос:

Я протестировал linkedmdb-18-05-2009- dump.nt на Java Apache Jena, но на dotNetRDF выдает исключение как

 VDS.RDF.Parsing.RdfParseException
HResult=0x80131500
Message=Invalid URI encountered, see inner exception for details
Source=dotNetRDF
StackTrace:
  at VDS.RDF.Parsing.NTriplesParser.TryParseUri(TokenisingParserContext context, String uri)
  at VDS.RDF.Parsing.NTriplesParser.TryParseTriple(TokenisingParserContext context)
  at VDS.RDF.Parsing.NTriplesParser.Parse(TokenisingParserContext context)
  at VDS.RDF.Parsing.NTriplesParser.Load(IRdfHandler handler, TextReader input)
  at ConsoleApp2_RDFWALKTHROUGH.Program.Main(String[] args) in 

This exception was originally thrown at this call stack:
[External Code]

Inner Exception 1:
UriFormatException: Invalid URI: The hostname could not be parsed.
  

мой код на c # выглядит следующим образом:

 String inputFile = "D:/linkedmdb-18-05-2009-dump.nt";

IGraph g = new Graph();
NTriplesParser parser = new NTriplesParser(NTriplesSyntax.Original);

Console.WriteLine("RDF DS-1 Loading Started:");

parser.Load(g, new StreamReader(inputFile));

Console.WriteLine("RDF DS-1 Loading Finished:");

Console.WriteLine(new DateTime(loadingTime).ToShortTimeString());
Console.ReadLine();
  

Пожалуйста, укажите мне, где я ошибаюсь, потому что очень запутанно, что один и тот же файл работает на Java, но не анализируется на dotNetRDF.

Ответ №1:

Проблема в том, что дамп содержит недопустимый IRI. В строке 3104575 в дампе, который я загрузил сhttps://www.cs.toronto.edu /~oktie/linkedmdb/ существует следующее:

 <http://data.linkedmdb.org/film/9995> <http://xmlns.com/foaf/0.1/page> <http://?> .
  

Последний IRI в этой строке — это тот, который вызывает блокировку синтаксического анализатора, поскольку ? в этой позиции в IRI недопустимый символ.

Комментарии:

1. Спасибо, но как я мог удалить его или запретить dotNetRDF читать его, я совершенно новичок в этом

2. К сожалению, нет способа заставить dotNetRDF пропускать строки, которые неправильно анализируются, поэтому каждая строка в файле должна быть правильной. Я думаю, что самый быстрый способ исправить это — просто зайти в файл дампа и удалить ошибку. Поскольку используемый формат (n троек) ориентирован на строку, безопасно просто удалить всю строку.

3. Спасибо, Кал; программа успешно запустилась после удаления недопустимой строки IRI из дампа.