package org.semanticweb.owlapi.io;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import static org.mockito.Mockito.mock;
import java.io.IOException;
import java.io.Reader;
import java.io.StringWriter;
import org.apache.commons.io.IOUtils;
import org.junit.Test;
import org.semanticweb.owlapi.formats.RDFXMLDocumentFormatFactory;
import org.semanticweb.owlapi.model.OWLDocumentFormat;
import org.semanticweb.owlapi.model.OWLDocumentFormatFactory;
import org.semanticweb.owlapi.model.OWLOntology;
import org.semanticweb.owlapi.model.OntologyConfigurator;
/**
* Created by ses on 3/12/15.
*/
@SuppressWarnings("javadoc")
public class XZStreamDocumentSourceTestCase {
@SuppressWarnings("null")
@Test
public void testReadKoalaDoc() {
XZStreamDocumentSource source =
new XZStreamDocumentSource(getClass().getResourceAsStream("/koala.owl.xz"));
String input = "<?xml version=\"1.0\"?>\n"
+ "<rdf:RDF\n xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"\n xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\"\n xmlns:owl=\"http://www.w3.org/2002/07/owl#\"\n xmlns=\"http://protege.stanford.edu/plugins/owl/owl-library/koala.owl#\"\n xml:base=\"http://protege.stanford.edu/plugins/owl/owl-library/koala.owl\">\n"
+ " <owl:Ontology rdf:about=\"\"/>\n"
+ " <owl:Class rdf:ID=\"Female\">\n <owl:equivalentClass>\n <owl:Restriction>\n <owl:onProperty>\n <owl:FunctionalProperty rdf:about=\"#hasGender\"/>\n </owl:onProperty>\n <owl:hasValue>\n <Gender rdf:ID=\"female\"/>\n </owl:hasValue>\n </owl:Restriction>\n </owl:equivalentClass>\n </owl:Class>\n"
+ " <owl:Class rdf:ID=\"Marsupials\">\n <owl:disjointWith>\n <owl:Class rdf:about=\"#Person\"/>\n </owl:disjointWith>\n <rdfs:subClassOf>\n <owl:Class rdf:about=\"#Animal\"/>\n </rdfs:subClassOf>\n </owl:Class>\n"
+ " <owl:Class rdf:ID=\"Student\">\n <owl:equivalentClass>\n <owl:Class>\n <owl:intersectionOf rdf:parseType=\"Collection\">\n <owl:Class rdf:about=\"#Person\"/>\n <owl:Restriction>\n <owl:onProperty>\n <owl:FunctionalProperty rdf:about=\"#isHardWorking\"/>\n </owl:onProperty>\n <owl:hasValue rdf:datatype=\"http://www.w3.org/2001/XMLSchema#boolean\"\n >true</owl:hasValue>\n </owl:Restriction>\n <owl:Restriction>\n <owl:someValuesFrom>\n <owl:Class rdf:about=\"#University\"/>\n </owl:someValuesFrom>\n <owl:onProperty>\n <owl:ObjectProperty rdf:about=\"#hasHabitat\"/>\n </owl:onProperty>\n </owl:Restriction>\n </owl:intersectionOf>\n </owl:Class>\n </owl:equivalentClass>\n </owl:Class>\n"
+ " <owl:Class rdf:ID=\"KoalaWithPhD\">\n <owl:versionInfo>1.2</owl:versionInfo>\n <owl:equivalentClass>\n <owl:Class>\n <owl:intersectionOf rdf:parseType=\"Collection\">\n <owl:Restriction>\n <owl:hasValue>\n <Degree rdf:ID=\"PhD\"/>\n </owl:hasValue>\n <owl:onProperty>\n <owl:ObjectProperty rdf:about=\"#hasDegree\"/>\n </owl:onProperty>\n </owl:Restriction>\n <owl:Class rdf:about=\"#Koala\"/>\n </owl:intersectionOf>\n </owl:Class>\n </owl:equivalentClass>\n </owl:Class>\n"
+ " <owl:Class rdf:ID=\"University\">\n <rdfs:subClassOf>\n <owl:Class rdf:ID=\"Habitat\"/>\n </rdfs:subClassOf>\n </owl:Class>\n"
+ " <owl:Class rdf:ID=\"Koala\">\n <rdfs:subClassOf>\n <owl:Restriction>\n <owl:hasValue rdf:datatype=\"http://www.w3.org/2001/XMLSchema#boolean\"\n >false</owl:hasValue>\n <owl:onProperty>\n <owl:FunctionalProperty rdf:about=\"#isHardWorking\"/>\n </owl:onProperty>\n </owl:Restriction>\n </rdfs:subClassOf>\n <rdfs:subClassOf>\n <owl:Restriction>\n <owl:someValuesFrom>\n <owl:Class rdf:about=\"#DryEucalyptForest\"/>\n </owl:someValuesFrom>\n <owl:onProperty>\n <owl:ObjectProperty rdf:about=\"#hasHabitat\"/>\n </owl:onProperty>\n </owl:Restriction>\n </rdfs:subClassOf>\n <rdfs:subClassOf rdf:resource=\"#Marsupials\"/>\n </owl:Class>\n"
+ " <owl:Class rdf:ID=\"Animal\">\n <rdfs:seeAlso>Male</rdfs:seeAlso>\n <rdfs:subClassOf>\n <owl:Restriction>\n <owl:onProperty>\n <owl:ObjectProperty rdf:about=\"#hasHabitat\"/>\n </owl:onProperty>\n <owl:minCardinality rdf:datatype=\"http://www.w3.org/2001/XMLSchema#int\"\n >1</owl:minCardinality>\n </owl:Restriction>\n </rdfs:subClassOf>\n <rdfs:subClassOf>\n <owl:Restriction>\n <owl:cardinality rdf:datatype=\"http://www.w3.org/2001/XMLSchema#int\"\n >1</owl:cardinality>\n <owl:onProperty>\n <owl:FunctionalProperty rdf:about=\"#hasGender\"/>\n </owl:onProperty>\n </owl:Restriction>\n </rdfs:subClassOf>\n <owl:versionInfo>1.1</owl:versionInfo>\n </owl:Class>\n"
+ " <owl:Class rdf:ID=\"Forest\">\n <rdfs:subClassOf rdf:resource=\"#Habitat\"/>\n </owl:Class>\n"
+ " <owl:Class rdf:ID=\"Rainforest\">\n <rdfs:subClassOf rdf:resource=\"#Forest\"/>\n </owl:Class>\n"
+ " <owl:Class rdf:ID=\"GraduateStudent\">\n <rdfs:subClassOf>\n <owl:Restriction>\n <owl:onProperty>\n <owl:ObjectProperty rdf:about=\"#hasDegree\"/>\n </owl:onProperty>\n <owl:someValuesFrom>\n <owl:Class>\n <owl:oneOf rdf:parseType=\"Collection\">\n <Degree rdf:ID=\"BA\"/>\n <Degree rdf:ID=\"BS\"/>\n </owl:oneOf>\n </owl:Class>\n </owl:someValuesFrom>\n </owl:Restriction>\n </rdfs:subClassOf>\n <rdfs:subClassOf rdf:resource=\"#Student\"/>\n </owl:Class>\n"
+ " <owl:Class rdf:ID=\"Parent\">\n <owl:equivalentClass>\n <owl:Class>\n <owl:intersectionOf rdf:parseType=\"Collection\">\n <owl:Class rdf:about=\"#Animal\"/>\n <owl:Restriction>\n <owl:onProperty>\n <owl:ObjectProperty rdf:about=\"#hasChildren\"/>\n </owl:onProperty>\n <owl:minCardinality rdf:datatype=\"http://www.w3.org/2001/XMLSchema#int\"\n >1</owl:minCardinality>\n </owl:Restriction>\n </owl:intersectionOf>\n </owl:Class>\n </owl:equivalentClass>\n <rdfs:subClassOf rdf:resource=\"#Animal\"/>\n </owl:Class>\n"
+ " <owl:Class rdf:ID=\"DryEucalyptForest\">\n <rdfs:subClassOf rdf:resource=\"#Forest\"/>\n </owl:Class>\n"
+ " <owl:Class rdf:ID=\"Quokka\">\n <rdfs:subClassOf>\n <owl:Restriction>\n <owl:hasValue rdf:datatype=\"http://www.w3.org/2001/XMLSchema#boolean\"\n >true</owl:hasValue>\n <owl:onProperty>\n <owl:FunctionalProperty rdf:about=\"#isHardWorking\"/>\n </owl:onProperty>\n </owl:Restriction>\n </rdfs:subClassOf>\n <rdfs:subClassOf rdf:resource=\"#Marsupials\"/>\n </owl:Class>\n"
+ " <owl:Class rdf:ID=\"TasmanianDevil\">\n <rdfs:subClassOf rdf:resource=\"#Marsupials\"/>\n </owl:Class>\n"
+ " <owl:Class rdf:ID=\"MaleStudentWith3Daughters\">\n <owl:equivalentClass>\n <owl:Class>\n <owl:intersectionOf rdf:parseType=\"Collection\">\n <owl:Class rdf:about=\"#Student\"/>\n <owl:Restriction>\n <owl:onProperty>\n <owl:FunctionalProperty rdf:about=\"#hasGender\"/>\n </owl:onProperty>\n <owl:hasValue>\n <Gender rdf:ID=\"male\"/>\n </owl:hasValue>\n </owl:Restriction>\n <owl:Restriction>\n <owl:onProperty>\n <owl:ObjectProperty rdf:about=\"#hasChildren\"/>\n </owl:onProperty>\n <owl:cardinality rdf:datatype=\"http://www.w3.org/2001/XMLSchema#int\"\n >3</owl:cardinality>\n </owl:Restriction>\n <owl:Restriction>\n <owl:allValuesFrom rdf:resource=\"#Female\"/>\n <owl:onProperty>\n <owl:ObjectProperty rdf:about=\"#hasChildren\"/>\n </owl:onProperty>\n </owl:Restriction>\n </owl:intersectionOf>\n </owl:Class>\n </owl:equivalentClass>\n </owl:Class>\n"
+ " <owl:Class rdf:ID=\"Degree\"/>\n"
+ " <owl:Class rdf:ID=\"Male\">\n <owl:equivalentClass>\n <owl:Restriction>\n <owl:hasValue rdf:resource=\"#male\"/>\n <owl:onProperty>\n <owl:FunctionalProperty rdf:about=\"#hasGender\"/>\n </owl:onProperty>\n </owl:Restriction>\n </owl:equivalentClass>\n </owl:Class>\n"
+ " <owl:Class rdf:ID=\"Gender\"/>\n"
+ " <owl:Class rdf:ID=\"Person\">\n <rdfs:subClassOf rdf:resource=\"#Animal\"/>\n <owl:disjointWith rdf:resource=\"#Marsupials\"/>\n </owl:Class>\n"
+ " <owl:ObjectProperty rdf:ID=\"hasHabitat\">\n <rdfs:range rdf:resource=\"#Habitat\"/>\n <rdfs:domain rdf:resource=\"#Animal\"/>\n </owl:ObjectProperty>\n"
+ " <owl:ObjectProperty rdf:ID=\"hasDegree\">\n <rdfs:domain rdf:resource=\"#Person\"/>\n <rdfs:range rdf:resource=\"#Degree\"/>\n </owl:ObjectProperty>\n"
+ " <owl:ObjectProperty rdf:ID=\"hasChildren\">\n <rdfs:range rdf:resource=\"#Animal\"/>\n <rdfs:domain rdf:resource=\"#Animal\"/>\n </owl:ObjectProperty>\n"
+ " <owl:FunctionalProperty rdf:ID=\"hasGender\">\n <rdfs:range rdf:resource=\"#Gender\"/>\n <rdf:type rdf:resource=\"http://www.w3.org/2002/07/owl#ObjectProperty\"/>\n <rdfs:domain rdf:resource=\"#Animal\"/>\n </owl:FunctionalProperty>\n"
+ " <owl:FunctionalProperty rdf:ID=\"isHardWorking\">\n <rdfs:range rdf:resource=\"http://www.w3.org/2001/XMLSchema#boolean\"/>\n <rdfs:domain rdf:resource=\"#Person\"/>\n <rdf:type rdf:resource=\"http://www.w3.org/2002/07/owl#DatatypeProperty\"/>\n </owl:FunctionalProperty>\n"
+ " <Degree rdf:ID=\"MA\"/>\n</rdf:RDF>\n\n"
+ "<!-- Created with Protege (with OWL Plugin, Build 60) http://protege.stanford.edu -->\n";
StringWriter w = new StringWriter();
OWLParser mockParser = new OWLParser() {
@Override
public OWLDocumentFormat parse(Reader r, OWLParserParameters p) {
try {
IOUtils.copy(r, w);
} catch (IOException e) {
e.printStackTrace();
fail(e.getMessage());
}
return null;
}
@Override
public OWLDocumentFormatFactory getSupportedFormat() {
return new RDFXMLDocumentFormatFactory();
}
};
source.acceptParser(mockParser, mock(OWLOntology.class), mock(OntologyConfigurator.class));
assertEquals(input, w.toString());
}
}