Как я могу переопределить префикс по умолчанию при загрузке онтологии из файла? - PullRequest
2 голосов
/ 28 июня 2011

Я создал онтологию с RDFS, используя относительные URIrefs для сохранения нажатий клавиш.Теперь я хочу загрузить онтологию с помощью Jena и использовать ее для структурирования моих данных.Однако когда я читаю файл с m.read("file:flow-schema.rdf"); и отображаю его с m.write(System.out, "RDF/XML-ABBREV", "http://flowschema/#");, относительные URIrefs имеют префикс file:flow-schema.rdf, а не http://flowschema/#.Как я могу изменить префикс по умолчанию для онтологии, загруженной из файла?

Вот мой файл онтологии:

<?xml version="1.0" ?>
<!DOCTYPE rdf:RDF [<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#">]>
<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"  
  xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
  xmlns:base="http://flowschema/#">

<rdfs:Class rdf:ID="Flow" />
<rdf:Property rdf:ID="srcIP">
    <rdfs:domain rdf:resource="#Flow" />
    <rdfs:range rdf:resource="http://www.w3.org/2000/01/rdf-schema#Literal" />
</rdf:Property>
<rdf:Property rdf:ID="dstIP">
    <rdfs:domain rdf:resource="#Flow" />
    <rdfs:range rdf:resource="http://www.w3.org/2000/01/rdf-schema#Literal" />
</rdf:Property>

</rdf:RDF>

Вот код Java, который читает онтологию из файла:

OntModel m = ModelFactory.createOntologyModel(OntModelSpec.RDFS_MEM);
m.read("file:flow-schema.rdf");
m.write(System.out, "RDF/XML-ABBREV", "http://flowschema/#");

Ответы [ 3 ]

5 голосов
/ 29 июня 2011

Вы, кажется, пытались установить базовый URI в вашем RDF / XML, но вы использовали xmlns:base, что является неправильным использованием.Чтобы установить базовый URI, вы должны использовать xml:base, что вы сделали, задали дополнительное пространство имен base вместо определения базового URI.

Измените эту часть вашего RDF / XML, и тогда она должна работатьнормально, без необходимости обходных путей, предложенных другими.

Ваш текущий код записи заканчивается неправильными URI, потому что Jena уже автоматически сгенерировала абсолютные URI, используя файловый URI в качестве базы.Установка Базового URI для записи не имеет никакого эффекта, если URI в RDF не воспринимаются как находящиеся под этим Базовым URI в отношении Йены.

Примечание: RDF обычно требует абсолютных URIОтносительные URI - это удобство сериализации, которое может помочь сжать синтаксис.Если вы используете относительные URI, вы должны всегда указывать базовый URI явно, если синтаксис разрешает это, и если не использовать абсолютные URI вместо этого.

1 голос
/ 29 июня 2011

Йена внутренне использует полные URI для всего. Вот почему вы должны указать базовый URI во время загрузки. Указание только во время записи не дает желаемого эффекта. Как сказал Пьер, это должно сработать:

m.read("file:flow-schema.rdf", "http://flowschema/#", "RDF/XML");
1 голос
/ 29 июня 2011

вы можете использовать read (String url, String base, String lang) , указав базовый URI вместо read(String url)?

...