Чтение URI с пробелами в Turtle с использованием Jena?

#java #rdf #jena #turtle-rdf

#java #rdf #jena #turtle-rdf

Вопрос:

Я пытаюсь прочитать RDF из файла Turtle (показано ниже), но у меня возникли две проблемы. Во-первых, есть ли проблема с пробелами в RDF или Turtle? Иногда у меня возникают проблемы с чтением URI <I/O Performance> вместо. Проблема исчезает, когда я удаляю пробелы, давая <IOPerformance> . В приведенном ниже файле у меня есть эта проблема <Standard(M1) - Small(default)> . Вот мой код для загрузки файла и перечисления субъекта, предиката и объекта каждой тройки.

   StmtIterator iter = model.listStatements();
    while (iter.hasNext()) {
        Statement stmt = iter.nextStatement();
        Resource subject = stmt.getSubject(); // sujeito

        Property predicate = stmt.getPredicate(); // predicado

        RDFNode object = stmt.getObject(); // objeto

        System.out.println((subject.getLocalName());
        System.out.println((predicate.getLocalName().toString()); 

        System.out.println(StringUtils.substringBetween(object.toString(),"", "^"));

   }
 
 @prefix dc:      <http://purl.org/dc/elements/1.1/> .
@prefix legal:   <http://www.linked-usdl.org/ns/usdl-legal#> .
@prefix foaf:    <http://xmlns.com/foaf/0.1/> .
@prefix vann:    <http://purl.org/vocab/vann/> .
@prefix org:     <http://www.w3.org/ns/org#> .
@prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#> .
@prefix price:   <http://www.linked-usdl.org/ns/usdl-price#> .
@prefix usdl:    <http://www.linked-usdl.org/ns/usdl#> .
@prefix xsd:     <http://www.w3.org/2001/XMLSchema#> .
@prefix owl:     <http://www.w3.org/2002/07/owl#> .
@prefix rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix dei:     <http://dei.uc.pt/rdf/dei#> .
@prefix gr:      <http://purl.org/goodrelations/v1#> .
@prefix skos:    <http://www.w3.org/2004/02/skos/core#> .

<Standard(M1) - Small(default)>
      rdfs:CPU "1 EC2 Compute Unit"^^xsd:string ;
      rdfs:Cost "0.08"^^xsd:float ;
      rdfs:EBS-OptimizedAvailable
              "false"^^xsd:boolean ;
      rdfs:IOPerformance "Moderate"^^xsd:string ;
      rdfs:OS "Linux/UNIX"^^xsd:string ;
      rdfs:Platform "32-bit"^^xsd:string ;
      rdfs:RAM "1.7"^^xsd:float ;
      rdfs:Storage "160"^^xsd:float .
 

Ответ №1:

<Standard(M1) - Small(default)> не является законным URI.

  1. В нем есть пробелы.
  2. Это относительный URI (относительно того, откуда считывается файл), из-за чего трудно угадать полный, абсолютный URI.

Либо добавьте @base , либо используйте имя с префиксом.

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

1. итак, пробелы не допускаются, верно? У меня есть файл xml, который я использовал для создания файла rdf> gist.github.com/I-am-Gabi/564acdc43d18d747c5e5 Каким будет URI для этой службы? В этот момент у меня возник вопрос об УРИ.

Ответ №2:

Оригинальная концепция ссылок URI в RDF 1.0 поддерживала пробелы. Но концепция ссылок URI была введена только потому, что IRIS еще не была введена. IRIs заменяет ссылки URI и не поддерживает пробелы.

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

1. Это неправда. Спецификация синтаксиса URI для [RDF 1.0 ]( w3.org/TR/2004/REC-rdf-primer-20040210/#ref-uri ) является приложением A к RFC 2396 , и оно не допускает пробелов. Как уже отмечалось , URI в RDF напрямую совместимы с IRIs: «Примечание: ссылки URI RDF совместимы с международными идентификаторами ресурсов, как определено [Пространства имен XML 1.1].».

2. Есть ли какой-нибудь способ показать данные файла с пробелом? Я вижу, что в случае пробелов их необходимо обрабатывать с помощью процентного кодирования… но я не знаю, как написать это в коде.

3. Каковы критерии для создания URI? На основе этого файла RDF / XML gist.github.com/I-am-Gabi/564acdc43d18d747c5e5 , как это было бы с URI для стандарта обслуживания (M1) — Small (по умолчанию)?

4. @JoshuaTaylor Я говорю о ссылках URI в RDF 1.0, как определено в абстрактном синтаксисе ( w3.org/TR/2004/REC-rdf-concepts-20040210/#section-Graph-URIref ) не об URI. Ссылки URI могут содержать пробелы, URI явно не могут. Существуют ссылки URI, которые НЕ являются допустимыми IRIs, в таком случае, как указано «Реализации могут выдавать предупреждения об использовании ссылок URI RDF, которые не соответствуют [проекту IRI] или его преемникам».

5. А, ладно, я понимаю, о чем ты говоришь. Ссылка на URI — это строка в Юникоде, которая может содержать пробелы, но URI, который она представляет, будет содержать не пробелы, а процентную кодировку пробела. Так что дело не в том, что ссылки URI не поддерживают пробелы; они поддерживают. Проблема в том, что синтаксис Turtle ничего не делает со ссылкой URI, но использует содержимое между < и > в качестве символов URI, где пробел не разрешен.