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

Я пытаюсь прочитать 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 .

person Gabriela Cavalcante    schedule 27.06.2014    source источник


Ответы (2)


<Standard(M1) - Small(default)> не является допустимым URI.

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

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

person AndyS    schedule 27.06.2014
comment
хорошо, так что пробелы не допускаются, верно? У меня есть файл xml, который я использовал для создания файла rdf › gist.github.com/ I-am-Gabi/564acdc43d18d747c5e5 Каким должен быть URI этой службы? На данный момент у меня есть вопрос об URI. - person Gabriela Cavalcante; 27.06.2014

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

person Reto Gmür    schedule 27.06.2014
comment
Это неправда. Спецификация синтаксиса URI для [RDF 1.0](w3.org/TR/2004/REC-rdf-primer-20040210/#ref-uri) является Приложением A документа RFC 2396 и не допускает пробелов. Как уже отмечалось, URI в RDF обратно совместим с IRI: Примечание. Ссылки RDF URI совместимы с международными идентификаторами ресурсов, как определено в [XML Namespaces 1.1].. - person Joshua Taylor; 27.06.2014
comment
Есть ли способ показать данные файла с пробелом? Я вижу, что в случае пробелов их нужно обрабатывать с процентным кодированием... но я не знаю, как написать это в коде. - person Gabriela Cavalcante; 28.06.2014
comment
Каковы критерии для создания URI? На основе этого файла RDF/XML gist.github.com/I-am-Gabi/564acdc43d18d747c5e5, каким должен быть URI для службы Standard (M1) — Small (по умолчанию)? - person Gabriela Cavalcante; 28.06.2014
comment
@JoshuaTaylor Я говорю о ссылках URI в RDF 1.0, как определено в абстрактном синтаксисе (w3.org/TR/2004/REC-rdf-concepts-20040210/#section-Graph-URIref) не касается URI. Ссылки URI могут содержать пробелы, а URI явно не могут. Существуют ссылки URI, которые НЕ являются допустимыми IRI, в таком случае, как указано, реализации могут выдавать предупреждения об использовании ссылок RDF URI, которые не соответствуют [проекту IRI] или его преемникам. - person Reto Gmür; 28.06.2014
comment
А, хорошо, я понимаю, что вы говорите. Ссылка URI представляет собой строку Unicode, которая может содержать пробелы, но URI, который она представляет, будет содержать не пробелы, а процентное кодирование пробелов. Так что дело не в том, что ссылки URI не поддерживают пробелы; они делают. Проблема в том, что синтаксис Turtle ничего не делает со ссылкой на URI, а использует содержимое между < и > в качестве символов URI, где пробел не разрешен. - person Joshua Taylor; 28.06.2014
comment
Но что касается ссылки URI, которая НЕ является действительным IRI: если я правильно понимаю, отсутствие ссылки URI является допустимым IRI. Ссылка URI – это строка Unicode, а IRI – это IRI. Однако ссылка URI обозначает URI, и каждый URI является допустимым IRI. Таким образом, каждая ссылка URI по-прежнему обозначает легальный IRI. (Если я правильно понимаю.) - person Joshua Taylor; 28.06.2014
comment
@JoshuaTaylor: В Turtle то, что у вас есть между < и >, является относительным IRI (в последней версии). IRI, как и ссылка RDF URI, представляет собой последовательность символов Юникода, которая может быть сопоставлена ​​с URI (см. Резюме RFC 3987). Поскольку символы, разрешенные в URI, сопоставляются друг с другом, а URI, рассматриваемый как строка символов, является IRI, а также ссылкой RDF URI. Обратите внимание, что в RDF две ссылки IRI/URI равны, только если они равны посимвольно. Два IRI, отображаемые на один и тот же URI, но с разными символами, не считаются равными в RDF. - person Reto Gmür; 28.06.2014
comment
@GabrielaCavalcante, если вы действительно хотите иметь пробелы, вы можете закодировать их с помощью %20: ‹Standard(M1)%20-%20Small(по умолчанию)› (при условии подходящего базового IRI). Но это больше похоже на описание, которое должно быть в литерале RDF, например: [] dc:description "Standard(M1) - Small(default)"; rdfs:CPU "1 EC2 Compute Unit"^^xsd:string ; - person Reto Gmür; 28.06.2014
comment
может быть это? rdf:StandardM1-Large rdfs:CPU 4 вычислительных блока EC2 (2 виртуальных ядра с 2 вычислительными блоками EC2 в каждом)^^xsd:string ; rdfs:Cost 0.32^^xsd:float ; rdfs: оптимизированный для EBS доступен; - person Gabriela Cavalcante; 01.07.2014