Я новичок в Jena and Owl, мне дали онтологию. Я могу открыть его с помощью Protege 4.2 без проблем, но когда я пытаюсь открыть его с помощью Jena, я получаю: Exception in thread "main" org.apache.jena.riot.RiotException: {E201} Multiple children of property element.

Я немного искал в своей онтологии, что это могло быть, и заметил, что некоторые элементы имеют более одной метки на языке, например:

<AnnotationAssertion>
    <AnnotationProperty abbreviatedIRI="rdfs:label"/>
    <AbbreviatedIRI>atc:A02BX02</AbbreviatedIRI>
    <Literal xml:lang="no" datatypeIRI="&rdf;PlainLiteral">Sukralfat</Literal>
</AnnotationAssertion>
<AnnotationAssertion>
    <AnnotationProperty abbreviatedIRI="rdfs:label"/>
    <AbbreviatedIRI>atc:A02BX02</AbbreviatedIRI>
    <Literal xml:lang="no" datatypeIRI="&rdf;PlainLiteral">antepsin</Literal>
</AnnotationAssertion>
<AnnotationAssertion>
    <AnnotationProperty abbreviatedIRI="rdfs:label"/>
    <AbbreviatedIRI>atc:A02BX02</AbbreviatedIRI>
    <Literal datatypeIRI="&xsd;string">sucralfate</Literal>
</AnnotationAssertion>
<AnnotationAssertion>
    <AnnotationProperty abbreviatedIRI="rdfs:label"/>
    <AbbreviatedIRI>atc:A02BX02</AbbreviatedIRI>
    <Literal xml:lang="no" datatypeIRI="&rdf;PlainLiteral">sukralfat</Literal>
</AnnotationAssertion>

Может ли это вызвать проблему? Весь код, который я использую, работает с другими онтологиями, поэтому я думаю, что он действительно исходит из этой онтологии. Вы знаете, что могло вызвать это исключение?

Редактировать

Итак, я перешел к минимизированному случаю и все еще получаю ту же ошибку:

<?xml version="1.0"?>

<!DOCTYPE Ontology [
    <!ENTITY xsd "http://www.w3.org/2001/XMLSchema#" >
    <!ENTITY xml "http://www.w3.org/XML/1998/namespace" >
    <!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#" >
    <!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#" >
]>


<Ontology xmlns="http://www.w3.org/2002/07/owl#"
     xml:base="http://www.ebi.ac.uk/Rebholz-srv/atc/public/ontologies/atc.owl"
     xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
     xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
     xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
     xmlns:xml="http://www.w3.org/XML/1998/namespace"
     ontologyIRI="http://www.ebi.ac.uk/Rebholz-srv/atc/public/ontologies/atc.owl">
    <Prefix name="" IRI="http://www.ebi.ac.uk/Rebholz-srv/atc/public/ontologies/atc.owl#"/>
    <Prefix name="atc" IRI="http://www.legemiddelverket.no/Legemiddelsoek/Sider/Default.aspx#"/>
    <Prefix name="owl" IRI="http://www.w3.org/2002/07/owl#"/>
    <Prefix name="rdf" IRI="http://www.w3.org/1999/02/22-rdf-syntax-ns#"/>
    <Prefix name="xml" IRI="http://www.w3.org/XML/1998/namespace"/>
    <Prefix name="xsd" IRI="http://www.w3.org/2001/XMLSchema#"/>
    <Prefix name="rdfs" IRI="http://www.w3.org/2000/01/rdf-schema#"/>
    <Declaration>
        <Class abbreviatedIRI="atc:J"/>
    </Declaration>
    <AnnotationAssertion>
        <AnnotationProperty abbreviatedIRI="rdfs:label"/>
        <AbbreviatedIRI>atc:J</AbbreviatedIRI>
        <Literal datatypeIRI="&xsd;string">ANTIINFECTIVES FOR SYSTEMIC USE</Literal>
    </AnnotationAssertion>
</Ontology>

Вот код Java:

InputStream in = FileManager.get().open(filename);
if (in == null) {
    throw new IllegalArgumentException("File: " + filename + " not found");
}
model = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
model.read(in, null);
try {
    in.close();
} catch (IOException e) {
    System.err.println("Couldn't close the inputStream");
}

Это помогает? Я действительно понятия не имею ...

3
charly 18 Апр 2013 в 21:39

1 ответ

Лучший ответ

Это файл в формате OWL2 XML. Jena не поддерживает этот формат, но поддерживает OWL в RDF / XML.

Другими словами, он ожидает неправильного вкуса XML и запутывается.

Попробуйте сохранить его в другом формате.

10
user205512 19 Апр 2013 в 01:58
На самом деле это была ошибка. Поддерживает ли Йена формат черепахи? Потому что я тоже не мог прочитать файл в формате черепахи. RDF / XML работает :) thx
 – 
charly
19 Апр 2013 в 14:52
1
Jena поддерживает Turtle, но когда вы открываете поток и анализируете поток байтов без имени файла, он не может угадать синтаксис. Используйте model.read (in, «ЧЕРЕПАХА»).
 – 
AndyS
19 Апр 2013 в 22:42