/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // Package /////////////// package org.apache.jena.ontology.impl; // Imports /////////////// import java.io.*; import java.util.*; import org.apache.jena.graph.Graph ; import org.apache.jena.ontology.* ; import org.apache.jena.ontology.impl.OWLDLProfile ; import org.apache.jena.ontology.impl.OWLLiteProfile ; import org.apache.jena.ontology.impl.OWLProfile ; import org.apache.jena.ontology.impl.OntModelImpl ; import org.apache.jena.ontology.impl.OWLProfile.SupportsCheck ; import org.apache.jena.rdf.model.* ; import org.apache.jena.rdf.model.test.ModelTestBase ; import org.apache.jena.reasoner.rulesys.test.TestBugs ; import org.apache.jena.reasoner.test.TestUtil ; import org.apache.jena.vocabulary.* ; /** * <p> * Unit tests on OntModel capabilities. Many of OntModel's methods are tested by the other * abstractions' unit tests. * </p> */ public class TestOntModel extends ModelTestBase { // Constants ////////////////////////////////// // Static variables ////////////////////////////////// public static final String BASE = "http://www.hp.com/test"; public static final String NS = BASE + "#"; public static final String DOC = "<rdf:RDF" + " xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"" + " xmlns:owl=\"http://www.w3.org/2002/07/owl#\"" + " xmlns:rdfs=\"http://www.w3.org/2000/01/rdf-schema#\">" + " <owl:Class rdf:about=\"http://www.hp.com/test#D\">" + " <rdfs:subClassOf>" + " <owl:Class rdf:about=\"http://www.hp.com/test#B\"/>" + " </rdfs:subClassOf>" + " </owl:Class>" + " <owl:Class rdf:about=\"http://www.hp.com/test#B\">" + " <rdfs:subClassOf rdf:resource=\"http://www.hp.com/test#A\"" + " rdf:type=\"http://www.w3.org/2002/07/owl#Class\"/>" + " </owl:Class>" + " <owl:Class rdf:about=\"http://www.hp.com/test#C\">" + " <rdfs:subClassOf rdf:resource=\"http://www.hp.com/test#B\"/>" + " </owl:Class>" + " <owl:ObjectProperty rdf:about=\"http://www.hp.com/test#p\">" + " <rdfs:domain rdf:resource=\"http://www.hp.com/test#A\"/>" + " <rdfs:range rdf:resource=\"http://www.hp.com/test#B\"/>" + " <rdfs:range rdf:resource=\"http://www.hp.com/test#C\"/>" + " </owl:ObjectProperty>" + "</rdf:RDF>"; // Instance variables ////////////////////////////////// // Constructors ////////////////////////////////// public TestOntModel( String name ) { super( name ); } // External signature methods ////////////////////////////////// @Override public void setUp() { // ensure the ont doc manager is in a consistent state OntDocumentManager.getInstance().reset( true ); } /** Test writing the base model to an output stream */ public void testWriteOutputStream() { OntModel m = ModelFactory.createOntologyModel(); // set up the model OntClass A = m.createClass( NS + "A" ); OntClass B = m.createClass( NS + "B" ); OntClass C = m.createClass( NS + "C" ); OntClass D = m.createClass( NS + "D" ); A.addSubClass( B ); B.addSubClass( C ); B.addSubClass( D ); ObjectProperty p = m.createObjectProperty( NS + "p" ); p.addDomain( A ); p.addRange( B ); p.addRange( C ); // write to a stream ByteArrayOutputStream out = new ByteArrayOutputStream(); m.write( out ); String s = out.toString(); ByteArrayInputStream in = new ByteArrayInputStream( s.getBytes() ); // read it back again Model mIn1 = ModelFactory.createDefaultModel(); mIn1.read( in, BASE ); Model mIn2 = ModelFactory.createDefaultModel(); mIn2.read( new ByteArrayInputStream( DOC.getBytes() ), BASE ); // should be the same assertTrue( "InputStream write/read cycle failed (1)", mIn1.isIsomorphicWith( m.getBaseModel() ) ); assertTrue( "InputStream write/read cycle failed (2)", mIn2.isIsomorphicWith( m.getBaseModel() ) ); } public void testGetBaseModelPrefixes() { OntModel om = ModelFactory.createOntologyModel(); om.setNsPrefix( "bill", "http://bill.and.ben/flowerpot#" ); om.setNsPrefix( "grue", "ftp://grue.and.bleen/2000#" ); assertEquals( om.getNsPrefixMap(), om.getBaseModel().getNsPrefixMap() ); } /** * The default namespace pefix of a non-base-model should not manifest as * the default namespace prefix of the base model or the Ont model. */ public void testPolyadicPrefixMapping() { final String IMPORTED_NAMESPACE = "http://imported#"; final String LOCAL_NAMESPACE = "http://local#"; Model importedModel = ModelFactory.createDefaultModel(); importedModel.setNsPrefix( "", IMPORTED_NAMESPACE ); OntModel ontModel = ModelFactory.createOntologyModel(); ontModel.setNsPrefix( "", LOCAL_NAMESPACE ); ontModel.addSubModel( importedModel ); assertNull( ontModel.getNsURIPrefix( IMPORTED_NAMESPACE ) ); } public void testWritesPrefixes() { OntModel om = ModelFactory.createOntologyModel(); om.setNsPrefix( "spoo", "http://spoo.spoo.com/spoo#" ); om.add( statement( om, "ping http://spoo.spoo.com/spoo#pang pilly" ) ); om.add( statement( om, "gg " + OWL.getURI() + "hh ii" ) ); StringWriter sw = new StringWriter(); om.write( sw ); String s = sw.getBuffer().toString(); assertTrue( s.indexOf( "xmlns:spoo=\"http://spoo.spoo.com/spoo#\"" ) > 0 ); assertTrue( s.indexOf( "xmlns:owl=\"" + OWL.getURI() + "\"" ) > 0 ); } /** Test writing the base model to an output stream */ public void testWriteWriter() { OntModel m = ModelFactory.createOntologyModel(); // set up the model OntClass A = m.createClass( NS + "A" ); OntClass B = m.createClass( NS + "B" ); OntClass C = m.createClass( NS + "C" ); OntClass D = m.createClass( NS + "D" ); A.addSubClass( B ); B.addSubClass( C ); B.addSubClass( D ); ObjectProperty p = m.createObjectProperty( NS + "p" ); p.addDomain( A ); p.addRange( B ); p.addRange( C ); // write to a stream StringWriter out = new StringWriter(); m.write( out ); String s = out.toString(); // read it back again Model mIn1 = ModelFactory.createDefaultModel(); mIn1.read( new StringReader( s ), BASE ); Model mIn2 = ModelFactory.createDefaultModel(); mIn2.read( new StringReader( DOC ), BASE ); // should be the same assertTrue( "Writer write/read cycle failed (1)", mIn1.isIsomorphicWith( m.getBaseModel() ) ); assertTrue( "Writer write/read cycle failed (2)", mIn2.isIsomorphicWith( m.getBaseModel() ) ); } public void testGetOntology() { OntModel m = ModelFactory.createOntologyModel(); Resource r = m.getResource( NS + "r" ); m.add( r, RDF.type, r ); Resource s = m.createOntology( NS + "s" ); assertEquals( "Result of get s", s, m.getOntology( NS + "s" ) ); assertNull( "result of get q", m.getOntology( NS+"q") ); assertNull( "result of get r", m.getOntology( NS+"r")); } public void testGetIndividual() { OntModel m = ModelFactory.createOntologyModel(); OntClass c = m.createClass( NS +"c" ); Resource r = m.getResource( NS + "r" ); m.add( r, RDF.type, r ); Resource s = m.createIndividual( NS + "s", c ); assertEquals( "Result of get s", s, m.getIndividual( NS + "s" ) ); assertNull( "result of get q", m.getIndividual( NS+"q") ); } /** User requested: allow null arguments when creating individuals */ public void testCreateIndividual() { OntModel m = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM ); Resource i0 = m.createIndividual( OWL.Thing ); Resource i1 = m.createIndividual( null ); Resource i2 = m.createIndividual( NS + "i2", OWL.Thing ); Resource i3 = m.createIndividual( NS + "i3", null ); Resource i4 = m.createIndividual( null, OWL.Thing ); Resource i5 = m.createIndividual( null, null ); assertNotNull( i0 ); assertNotNull( i1 ); assertNotNull( i2 ); assertNotNull( i3 ); assertNotNull( i4 ); assertNotNull( i5 ); } public void testGetOntProperty() { OntModel m = ModelFactory.createOntologyModel(); Resource r = m.getResource( NS + "r" ); m.add( r, RDF.type, r ); Resource s = m.createOntProperty( NS + "s" ); assertEquals( "Result of get s", s, m.getOntProperty( NS + "s" ) ); assertNull( "result of get q", m.getOntProperty( NS+"q") ); assertNull( "result of get r", m.getOntProperty( NS+"r")); } public void testGetObjectProperty() { OntModel m = ModelFactory.createOntologyModel(); Resource r = m.getResource( NS + "r" ); m.add( r, RDF.type, r ); Resource s = m.createObjectProperty( NS + "s" ); assertEquals( "Result of get s", s, m.getObjectProperty( NS + "s" ) ); assertNull( "result of get q", m.getObjectProperty( NS+"q") ); assertNull( "result of get r", m.getObjectProperty( NS+"r")); } public void testGetTransitiveProperty() { OntModel m = ModelFactory.createOntologyModel(); Resource r = m.getResource( NS + "r" ); m.add( r, RDF.type, r ); Resource s = m.createTransitiveProperty( NS + "s" ); assertEquals( "Result of get s", s, m.getTransitiveProperty( NS + "s" ) ); assertNull( "result of get q", m.getTransitiveProperty( NS+"q") ); assertNull( "result of get r", m.getTransitiveProperty( NS+"r")); } public void testGetSymmetricProperty() { OntModel m = ModelFactory.createOntologyModel(); Resource r = m.getResource( NS + "r" ); m.add( r, RDF.type, r ); Resource s = m.createSymmetricProperty( NS + "s" ); assertEquals( "Result of get s", s, m.getSymmetricProperty( NS + "s" ) ); assertNull( "result of get q", m.getSymmetricProperty( NS+"q") ); assertNull( "result of get r", m.getSymmetricProperty( NS+"r")); } public void testGetInverseFunctionalProperty() { OntModel m = ModelFactory.createOntologyModel(); Resource r = m.getResource( NS + "r" ); m.add( r, RDF.type, r ); Resource s = m.createInverseFunctionalProperty( NS + "s" ); assertEquals( "Result of get s", s, m.getInverseFunctionalProperty( NS + "s" ) ); assertNull( "result of get q", m.getInverseFunctionalProperty( NS+"q") ); assertNull( "result of get r", m.getInverseFunctionalProperty( NS+"r")); } public void testGetDatatypeProperty() { OntModel m = ModelFactory.createOntologyModel(); Resource r = m.getResource( NS + "r" ); m.add( r, RDF.type, r ); Resource s = m.createDatatypeProperty( NS + "s" ); assertEquals( "Result of get s", s, m.getDatatypeProperty( NS + "s" ) ); assertNull( "result of get q", m.getDatatypeProperty( NS+"q") ); assertNull( "result of get r", m.getDatatypeProperty( NS+"r")); } public void testGetAnnotationProperty() { OntModel m = ModelFactory.createOntologyModel(); Resource r = m.getResource( NS + "r" ); m.add( r, RDF.type, r ); Resource s = m.createAnnotationProperty( NS + "s" ); assertEquals( "Result of get s", s, m.getAnnotationProperty( NS + "s" ) ); assertNull( "result of get q", m.getAnnotationProperty( NS+"q") ); assertNull( "result of get r", m.getAnnotationProperty( NS+"r")); } public void testGetOntResource() { OntModel m = ModelFactory.createOntologyModel(); OntResource r0 = m.getOntResource( NS + "a" ); assertNull( r0 ); OntResource r1 = m.createOntResource( NS + "aaa" ); assertInstanceOf( OntResource.class, r1 ); Resource r2a = m.getResource( NS + "a" ); Resource r2b = m.getResource( NS + "b" ); Property p = m.getProperty( NS + "p" ); m.add( r2a, p, r2b ); r0 = m.getOntResource( NS + "a" ); assertInstanceOf( OntResource.class, r0 ); OntResource r3 = m.getOntResource( r2b ); assertInstanceOf( OntResource.class, r3 ); } public void testGetOntClass() { OntModel m = ModelFactory.createOntologyModel(); Resource r = m.getResource( NS + "r" ); Resource r0 = m.getResource( NS + "r0" ); m.add( r, RDF.type, r0 ); Resource s = m.createClass( NS + "s" ); assertEquals( "Result of get s", s, m.getOntClass( NS + "s" ) ); assertNull( "result of get q", m.getOntClass( NS+"q") ); assertNull( "result of get r", m.getOntClass( NS+"r")); } public void testGetComplementClass() { OntModel m = ModelFactory.createOntologyModel(); OntClass c = m.createClass( NS +"c" ); Resource r = m.getResource( NS + "r" ); m.add( r, RDF.type, r ); Resource s = m.createComplementClass( NS + "s", c ); assertEquals( "Result of get s", s, m.getComplementClass( NS + "s" ) ); assertNull( "result of get q", m.getComplementClass( NS+"q") ); assertNull( "result of get r", m.getComplementClass( NS+"r")); } public void testGetEnumeratedClass() { OntModel m = ModelFactory.createOntologyModel(); RDFList l = m.createList(); Resource r = m.getResource( NS + "r" ); m.add( r, RDF.type, r ); Resource s = m.createEnumeratedClass( NS + "s", l ); assertEquals( "Result of get s", s, m.getEnumeratedClass( NS + "s" ) ); assertNull( "result of get q", m.getEnumeratedClass( NS+"q") ); assertNull( "result of get r", m.getEnumeratedClass( NS+"r")); } public void testGetUnionClass() { OntModel m = ModelFactory.createOntologyModel(); RDFList l = m.createList(); Resource r = m.getResource( NS + "r" ); m.add( r, RDF.type, r ); Resource s = m.createUnionClass( NS + "s", l ); assertEquals( "Result of get s", s, m.getUnionClass( NS + "s" ) ); assertNull( "result of get q", m.getUnionClass( NS+"q") ); assertNull( "result of get r", m.getUnionClass( NS+"r")); } public void testGetIntersectionClass() { OntModel m = ModelFactory.createOntologyModel(); RDFList l = m.createList(); Resource r = m.getResource( NS + "r" ); m.add( r, RDF.type, r ); Resource s = m.createIntersectionClass( NS + "s", l ); assertEquals( "Result of get s", s, m.getIntersectionClass( NS + "s" ) ); assertNull( "result of get q", m.getIntersectionClass( NS+"q") ); assertNull( "result of get r", m.getIntersectionClass( NS+"r")); } public void testGetRestriction() { OntModel m = ModelFactory.createOntologyModel(); Property p = m.createProperty( NS + "p" ); Resource r = m.getResource( NS + "r" ); m.add( r, RDF.type, r ); Resource s = m.createRestriction( NS + "s", p ); assertEquals( "Result of get s", s, m.getRestriction( NS + "s" ) ); assertNull( "result of get q", m.getRestriction( NS+"q") ); assertNull( "result of get r", m.getRestriction( NS+"r")); } public void testGetHasValueRestriction() { OntModel m = ModelFactory.createOntologyModel(); Property p = m.createProperty( NS + "p" ); OntClass c = m.createClass( NS + "c" ); Resource r = m.getResource( NS + "r" ); m.add( r, RDF.type, r ); Resource s = m.createHasValueRestriction( NS + "s", p, c ); assertEquals( "Result of get s", s, m.getHasValueRestriction( NS + "s" ) ); assertNull( "result of get q", m.getHasValueRestriction( NS+"q") ); assertNull( "result of get r", m.getHasValueRestriction( NS+"r")); } public void testGetSomeValuesFromRestriction() { OntModel m = ModelFactory.createOntologyModel(); Property p = m.createProperty( NS + "p" ); OntClass c = m.createClass( NS + "c" ); Resource r = m.getResource( NS + "r" ); m.add( r, RDF.type, r ); Resource s = m.createSomeValuesFromRestriction( NS + "s", p, c ); assertEquals( "Result of get s", s, m.getSomeValuesFromRestriction( NS + "s" ) ); assertNull( "result of get q", m.getSomeValuesFromRestriction( NS+"q") ); assertNull( "result of get r", m.getSomeValuesFromRestriction( NS+"r")); } public void testGetAllValuesFromRestriction() { OntModel m = ModelFactory.createOntologyModel(); Property p = m.createProperty( NS + "p" ); OntClass c = m.createClass( NS + "c" ); Resource r = m.getResource( NS + "r" ); m.add( r, RDF.type, r ); Resource s = m.createAllValuesFromRestriction( NS + "s", p, c ); assertEquals( "Result of get s", s, m.getAllValuesFromRestriction( NS + "s" ) ); assertNull( "result of get q", m.getAllValuesFromRestriction( NS+"q") ); assertNull( "result of get r", m.getAllValuesFromRestriction( NS+"r")); } public void testGetCardinalityRestriction() { OntModel m = ModelFactory.createOntologyModel(); Property p = m.createProperty( NS + "p" ); Resource r = m.getResource( NS + "r" ); m.add( r, RDF.type, r ); Resource s = m.createCardinalityRestriction( NS + "s", p, 1 ); assertEquals( "Result of get s", s, m.getCardinalityRestriction( NS + "s" ) ); assertNull( "result of get q", m.getCardinalityRestriction( NS+"q") ); assertNull( "result of get r", m.getCardinalityRestriction( NS+"r")); } public void testGetMinCardinalityRestriction() { OntModel m = ModelFactory.createOntologyModel(); Property p = m.createProperty( NS + "p" ); Resource r = m.getResource( NS + "r" ); m.add( r, RDF.type, r ); Resource s = m.createMinCardinalityRestriction( NS + "s", p, 1 ); assertEquals( "Result of get s", s, m.getMinCardinalityRestriction( NS + "s" ) ); assertNull( "result of get q", m.getMinCardinalityRestriction( NS+"q") ); assertNull( "result of get r", m.getMinCardinalityRestriction( NS+"r")); } public void testGetMaxCardinalityRestriction() { OntModel m = ModelFactory.createOntologyModel(); Property p = m.createProperty( NS + "p" ); Resource r = m.getResource( NS + "r" ); m.add( r, RDF.type, r ); Resource s = m.createMaxCardinalityRestriction( NS + "s", p, 1 ); assertEquals( "Result of get s", s, m.getMaxCardinalityRestriction( NS + "s" ) ); assertNull( "result of get q", m.getMaxCardinalityRestriction( NS+"q") ); assertNull( "result of get r", m.getMaxCardinalityRestriction( NS+"r")); } public void testGetSubgraphs() { OntModel m = ModelFactory.createOntologyModel(); m.read( "file:testing/ontology/testImport6/a.owl" ); assertEquals( "Marker count not correct", 4, TestOntDocumentManager.countMarkers( m ) ); List<Graph> subs = m.getSubGraphs(); assertEquals( "n subgraphs should be ", 3, subs.size() ); } public void testListImportURIs() { OntModel m = ModelFactory.createOntologyModel(); m.read( "file:testing/ontology/testImport6/a.owl" ); Collection<String> c = m.listImportedOntologyURIs(); assertEquals( "Should be two non-closed import URI's", 2, c.size() ); assertTrue( "b should be imported ", c.contains( "file:testing/ontology/testImport6/b.owl" )); assertFalse( "c should not be imported ", c.contains( "file:testing/ontology/testImport6/c.owl" )); assertTrue( "d should be imported ", c.contains( "file:testing/ontology/testImport6/d.owl" )); c = m.listImportedOntologyURIs( true ); assertEquals( "Should be two non-closed import URI's", 3, c.size() ); assertTrue( "b should be imported ", c.contains( "file:testing/ontology/testImport6/b.owl" )); assertTrue( "c should be imported ", c.contains( "file:testing/ontology/testImport6/c.owl" )); assertTrue( "d should be imported ", c.contains( "file:testing/ontology/testImport6/d.owl" )); } /** Some tests for listing properties. See also {@link TestListSyntaxCategories} */ public void testListOntProperties0() { OntModel m = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM ); ObjectProperty op = m.createObjectProperty( NS + "op" ); DatatypeProperty dp = m.createDatatypeProperty( NS + "dp" ); AnnotationProperty ap = m.createAnnotationProperty( NS + "ap" ); OntProperty ontp = m.createOntProperty( NS + "ontp" ); Property rdfp = m.createProperty( NS + "rdfp" ); rdfp.addProperty( RDF.type, RDF.Property ); // no rdf:type entailment, so we don't find most properties ... assertFalse( iteratorContains( m.listOntProperties(), op ) ); assertFalse( iteratorContains( m.listOntProperties(), dp ) ); assertFalse( iteratorContains( m.listOntProperties(), ap ) ); assertTrue( iteratorContains( m.listOntProperties(), ontp ) ); assertTrue( iteratorContains( m.listOntProperties(), rdfp ) ); } public void testListOntProperties1() { OntModel m = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM_MICRO_RULE_INF); ObjectProperty op = m.createObjectProperty( NS + "op" ); DatatypeProperty dp = m.createDatatypeProperty( NS + "dp" ); AnnotationProperty ap = m.createAnnotationProperty( NS + "ap" ); OntProperty ontp = m.createOntProperty( NS + "ontp" ); Property rdfp = m.createProperty( NS + "rdfp" ); rdfp.addProperty( RDF.type, RDF.Property ); assertTrue( iteratorContains( m.listOntProperties(), op ) ); assertTrue( iteratorContains( m.listOntProperties(), dp ) ); // note that owl:AnnotationProperty is an rdf:Property in OWL Full assertTrue( iteratorContains( m.listOntProperties(), ap ) ); assertTrue( iteratorContains( m.listOntProperties(), ontp ) ); assertTrue( iteratorContains( m.listOntProperties(), rdfp ) ); } public void testListOntProperties2() { OntModelSpec owlDLReasoner = new OntModelSpec( OntModelSpec.OWL_DL_MEM ); owlDLReasoner.setReasoner( OntModelSpec.OWL_MEM_MICRO_RULE_INF.getReasoner() ); OntModel m = ModelFactory.createOntologyModel( owlDLReasoner ); ObjectProperty op = m.createObjectProperty( NS + "op" ); DatatypeProperty dp = m.createDatatypeProperty( NS + "dp" ); AnnotationProperty ap = m.createAnnotationProperty( NS + "ap" ); OntProperty ontp = m.createOntProperty( NS + "ontp" ); Property rdfp = m.createProperty( NS + "rdfp" ); rdfp.addProperty( RDF.type, RDF.Property ); assertTrue( iteratorContains( m.listOntProperties(), op ) ); assertTrue( iteratorContains( m.listOntProperties(), dp ) ); // note that owl:AnnotationProperty not an rdf:Property in OWL DL assertFalse( iteratorContains( m.listOntProperties(), ap ) ); assertTrue( iteratorContains( m.listOntProperties(), ontp ) ); assertTrue( iteratorContains( m.listOntProperties(), rdfp ) ); } public void testListAllOntProperties0() { OntModel m = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM ); ObjectProperty op = m.createObjectProperty( NS + "op" ); DatatypeProperty dp = m.createDatatypeProperty( NS + "dp" ); AnnotationProperty ap = m.createAnnotationProperty( NS + "ap" ); OntProperty ontp = m.createOntProperty( NS + "ontp" ); Property rdfp = m.createProperty( NS + "rdfp" ); rdfp.addProperty( RDF.type, RDF.Property ); // no rdf:type entailment, so we don't find most properties ... assertTrue( iteratorContains( m.listAllOntProperties(), op ) ); assertTrue( iteratorContains( m.listAllOntProperties(), dp ) ); assertTrue( iteratorContains( m.listAllOntProperties(), ap ) ); assertTrue( iteratorContains( m.listAllOntProperties(), ontp ) ); assertTrue( iteratorContains( m.listAllOntProperties(), rdfp ) ); } public void testListObjectProperties0() { OntModel m = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM ); ObjectProperty op = m.createObjectProperty( NS + "op" ); DatatypeProperty dp = m.createDatatypeProperty( NS + "dp" ); AnnotationProperty ap = m.createAnnotationProperty( NS + "ap" ); OntProperty ontp = m.createOntProperty( NS + "ontp" ); Property rdfp = m.createProperty( NS + "rdfp" ); rdfp.addProperty( RDF.type, RDF.Property ); // no rdf:type entailment, so we don't find most properties ... assertTrue( iteratorContains( m.listObjectProperties(), op ) ); assertFalse( iteratorContains( m.listObjectProperties(), dp ) ); assertFalse( iteratorContains( m.listObjectProperties(), ap ) ); assertFalse( iteratorContains( m.listObjectProperties(), ontp ) ); assertFalse( iteratorContains( m.listObjectProperties(), rdfp ) ); } public void testListDatatypeProperties0() { OntModel m = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM ); ObjectProperty op = m.createObjectProperty( NS + "op" ); DatatypeProperty dp = m.createDatatypeProperty( NS + "dp" ); AnnotationProperty ap = m.createAnnotationProperty( NS + "ap" ); OntProperty ontp = m.createOntProperty( NS + "ontp" ); Property rdfp = m.createProperty( NS + "rdfp" ); rdfp.addProperty( RDF.type, RDF.Property ); // no rdf:type entailment, so we don't find most properties ... assertFalse( iteratorContains( m.listDatatypeProperties(), op ) ); assertTrue( iteratorContains( m.listDatatypeProperties(), dp ) ); assertFalse( iteratorContains( m.listDatatypeProperties(), ap ) ); assertFalse( iteratorContains( m.listDatatypeProperties(), ontp ) ); assertFalse( iteratorContains( m.listDatatypeProperties(), rdfp ) ); } public void testListAnnotationProperties0() { OntModel m = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM ); ObjectProperty op = m.createObjectProperty( NS + "op" ); DatatypeProperty dp = m.createDatatypeProperty( NS + "dp" ); AnnotationProperty ap = m.createAnnotationProperty( NS + "ap" ); OntProperty ontp = m.createOntProperty( NS + "ontp" ); Property rdfp = m.createProperty( NS + "rdfp" ); rdfp.addProperty( RDF.type, RDF.Property ); // no rdf:type entailment, so we don't find most properties ... assertFalse( iteratorContains( m.listAnnotationProperties(), op ) ); assertFalse( iteratorContains( m.listAnnotationProperties(), dp ) ); assertTrue( iteratorContains( m.listAnnotationProperties(), ap ) ); assertFalse( iteratorContains( m.listAnnotationProperties(), ontp ) ); assertFalse( iteratorContains( m.listAnnotationProperties(), rdfp ) ); } public void testListSubModels0() { OntModel m = ModelFactory.createOntologyModel(); m.read( "file:testing/ontology/testImport6/a.owl" ); assertEquals( "Marker count not correct", 4, TestOntDocumentManager.countMarkers( m ) ); List<OntModel> importModels = new ArrayList<>(); for (Iterator<OntModel> j = m.listSubModels(); j.hasNext(); ) { importModels.add( j.next() ); } assertEquals( "n import models should be ", 3, importModels.size() ); int nImports = 0; for ( OntModel x : importModels ) { // count the number of imports of each sub-model nImports += x.countSubModels(); } // listSubModels' default behaviour is *not* to include imports of sub-models assertEquals( "Wrong number of sub-model imports", 0, nImports ); } public void testListSubModels1() { OntModel m = ModelFactory.createOntologyModel(); m.read( "file:testing/ontology/testImport6/a.owl" ); assertEquals( "Marker count not correct", 4, TestOntDocumentManager.countMarkers( m ) ); List<OntModel> importModels = new ArrayList<>(); for (Iterator<OntModel> j = m.listSubModels( true ); j.hasNext(); ) { importModels.add( j.next() ); } assertEquals( "n import models should be ", 3, importModels.size() ); int nImports = 0; for ( OntModel x : importModels ) { // count the number of imports of each sub-model nImports += x.countSubModels(); } assertEquals( "Wrong number of sub-model imports", 2, nImports ); } public void testGetImportedModel() { OntModel m = ModelFactory.createOntologyModel(); m.read( "file:testing/ontology/testImport6/a.owl" ); OntModel m0 = m.getImportedModel( "file:testing/ontology/testImport6/b.owl" ); OntModel m1 = m.getImportedModel( "file:testing/ontology/testImport6/c.owl" ); OntModel m2 = m.getImportedModel( "file:testing/ontology/testImport6/d.owl" ); OntModel m3 = m.getImportedModel( "file:testing/ontology/testImport6/b.owl" ) .getImportedModel( "file:testing/ontology/testImport6/c.owl" ); OntModel m4 = m.getImportedModel( "file:testing/ontology/testImport6/a.owl" ); assertNotNull( "Import model b should not be null", m0 ); assertNotNull( "Import model c should not be null", m1 ); assertNotNull( "Import model d should not be null", m2 ); assertNotNull( "Import model b-c should not be null", m3 ); assertNull( "Import model a should be null", m4 ); } /** * Test that the supports checks that are defined in the OWL full profile are not * missing in the DL and Lite profiles, unless by design. * Not strictly a model test, but it has to go somewhere */ public void testProfiles() { List<Class<?>> notInDL = Arrays.asList( new Class<?>[] {} ); List<Class<?>> notInLite = Arrays.asList( new Class<?>[] {DataRange.class, HasValueRestriction.class} ); Map<Class<?>, SupportsCheck> fullProfileMap = new OWLProfileExt().getSupportsMap(); Map<Class<?>, SupportsCheck> dlProfileMap = new OWLDLProfileExt().getSupportsMap(); Map<Class<?>, SupportsCheck> liteProfileMap = new OWLLiteProfileExt().getSupportsMap(); for ( Map.Entry<Class<?>, SupportsCheck> entry : fullProfileMap.entrySet() ) { Class<?> c = entry.getKey(); assertTrue( "Key in OWL DL profile: " + c.getName(), dlProfileMap.containsKey( c ) || notInDL.contains( c ) ); assertTrue( "Key in OWL lite profile: " + c.getName(), liteProfileMap.containsKey( c ) || notInLite.contains( c ) ); } } /** Added by kers to ensure that bulk update works; should really be a test of the ontology Graph using AbstractTestGraph, but that fails because there are too many things that don't pass those tests. <p> <b>Yet</b>. */ public void testBulkAddWorks() { OntModel om1= ModelFactory.createOntologyModel(); OntModel om2 = ModelFactory.createOntologyModel(); om1.add( om2 ); } public void testRead() { String base0 = "http://example.com/test0"; String ns0 = base0 + "#"; String base1 = "http://example.com/test1"; String ns1 = base1 + "#"; OntModel m = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM ); m.getDocumentManager().reset(); m.getDocumentManager().addAltEntry( base0, "file:testing/ontology/relativenames.rdf" ); m.read( base0, "RDF/XML" ); assertNotNull( "Should be a class ns0:A", m.getOntClass( ns0 + "A" ) ); assertNull( "Should not be a class ns1:A", m.getOntClass( ns1 + "A" ) ); m = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM ); m.getDocumentManager().reset(); m.getDocumentManager().addAltEntry( base0, "file:testing/ontology/relativenames.rdf" ); m.read( base0, base1, "RDF/XML" ); assertNull( "Should not be a class ns0:A", m.getOntClass( ns0 + "A" ) ); assertNotNull( "Should be a class ns1:A", m.getOntClass( ns1 + "A" ) ); } public void testListDataRange() { String base = "http://jena.hpl.hp.com/test#"; String doc = "<?xml version='1.0'?>" + "<!DOCTYPE owl [" + " <!ENTITY rdf 'http://www.w3.org/1999/02/22-rdf-syntax-ns#' >" + " <!ENTITY rdfs 'http://www.w3.org/2000/01/rdf-schema#' >" + " <!ENTITY xsd 'http://www.w3.org/2001/XMLSchema#' >" + " <!ENTITY owl 'http://www.w3.org/2002/07/owl#' >" + " <!ENTITY dc 'http://purl.org/dc/elements/1.1/' >" + " <!ENTITY base 'http://jena.hpl.hp.com/test' >" + " ]>" + "<rdf:RDF" + " xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'" + " xmlns:owl='http://www.w3.org/2002/07/owl#'>" + " <owl:DataRange>" + " <owl:oneOf>" + " <rdf:List>" + " <rdf:first rdf:datatype='&xsd;integer'>0</rdf:first>" + " <rdf:rest rdf:resource='&rdf;nil' />" + " </rdf:List>" + " </owl:oneOf>" + " </owl:DataRange>" + "</rdf:RDF>"; OntModel m = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM, null); m.read(new StringReader(doc), base); Iterator<DataRange> i = m.listDataRanges(); assertTrue( "Should be at least one DataRange", i.hasNext() ); Object dr = i.next(); assertInstanceOf( DataRange.class, dr ); assertFalse( "Should no more DataRange", i.hasNext() ); } public void testListHierarchyRoots0() { OntModel m = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM ); assertFalse( m.listHierarchyRootClasses().hasNext() ); m = ModelFactory.createOntologyModel( OntModelSpec.RDFS_MEM ); assertFalse( m.listHierarchyRootClasses().hasNext() ); } public void testListHierarchyRoots1() { String doc = "@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>. " + "@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>. " + "@prefix xsd: <http://www.w3.org/2001/XMLSchema#>. " + "@prefix owl: <http://www.w3.org/2002/07/owl#>. " + "@prefix : <" + NS + ">. " + ":A a owl:Class. " ; OntModel m = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM, null); m.read( new StringReader(doc), NS, "N3" ); OntClass a = m.getOntClass(NS+"A"); TestUtil.assertIteratorValues( this, m.listHierarchyRootClasses(), new Object[] {a} ); } public void testListHierarchyRoots2() { String doc = "@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>. " + "@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>. " + "@prefix xsd: <http://www.w3.org/2001/XMLSchema#>. " + "@prefix owl: <http://www.w3.org/2002/07/owl#>. " + "@prefix : <" + NS + ">. " + ":A a owl:Class. " ; OntModel m = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM_RULE_INF, null); m.read( new StringReader(doc), NS, "N3" ); OntClass a = m.getOntClass(NS+"A"); TestUtil.assertIteratorValues( this, m.listHierarchyRootClasses(), new Object[] {a} ); } public void testListHierarchyRoots3() { String doc = "@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>. " + "@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>. " + "@prefix xsd: <http://www.w3.org/2001/XMLSchema#>. " + "@prefix owl: <http://www.w3.org/2002/07/owl#>. " + "@prefix : <" + NS + ">. " + ":A a owl:Class. " + ":B a owl:Class ; rdfs:subClassOf :A . " ; OntModel m = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM_MINI_RULE_INF, null); m.read( new StringReader(doc), NS, "N3" ); OntClass a = m.getOntClass(NS+"A"); TestUtil.assertIteratorValues( this, m.listHierarchyRootClasses(), new Object[] {a} ); } public void testListHierarchyRoots4() { String doc = "@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>. " + "@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>. " + "@prefix xsd: <http://www.w3.org/2001/XMLSchema#>. " + "@prefix owl: <http://www.w3.org/2002/07/owl#>. " + "@prefix : <" + NS + ">. " + ":A a rdfs:Class. " + ":C a rdfs:Class. " + ":B a rdfs:Class ; rdfs:subClassOf :A . " ; OntModel m = ModelFactory.createOntologyModel(OntModelSpec.RDFS_MEM_RDFS_INF, null); m.read( new StringReader(doc), NS, "N3" ); OntClass a = m.getOntClass(NS+"A"); OntClass c = m.getOntClass(NS+"C"); TestUtil.assertIteratorValues( this, m.listHierarchyRootClasses(), new Object[] {a,c} ); } /* Auto-loading of imports is off by default */ public void testLoadImports0() { OntModel m = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM ); Resource a = m.getResource( "file:testing/ontology/testImport3/a.owl" ); Resource b = m.getResource( "file:testing/ontology/testImport3/b.owl" ); m.add( a, m.getProfile().IMPORTS(), b ); // not dymamically imported by default assertEquals( "Marker count not correct", 0, TestOntDocumentManager.countMarkers( m ) ); assertFalse( "c should not be imported", m.hasLoadedImport( "file:testing/ontology/testImport3/c.owl" ) ); assertFalse( "b should not be imported", m.hasLoadedImport( "file:testing/ontology/testImport3/b.owl" ) ); m.loadImports(); assertEquals( "Marker count not correct", 2, TestOntDocumentManager.countMarkers( m ) ); assertTrue( "c should be imported", m.hasLoadedImport( "file:testing/ontology/testImport3/c.owl" ) ); assertTrue( "b should be imported", m.hasLoadedImport( "file:testing/ontology/testImport3/b.owl" ) ); } /* Auto-loading of imports = on */ public void testLoadImports1() { OntModel m = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM ); Resource a = m.getResource( "file:testing/ontology/testImport3/a.owl" ); Resource b = m.getResource( "file:testing/ontology/testImport3/b.owl" ); m.setDynamicImports( true ); m.add( a, m.getProfile().IMPORTS(), b ); assertEquals( "Marker count not correct", 2, TestOntDocumentManager.countMarkers( m ) ); assertTrue( "c should be imported", m.hasLoadedImport( "file:testing/ontology/testImport3/c.owl" ) ); assertTrue( "b should be imported", m.hasLoadedImport( "file:testing/ontology/testImport3/b.owl" ) ); // this should have no effect m.loadImports(); assertEquals( "Marker count not correct", 2, TestOntDocumentManager.countMarkers( m ) ); assertTrue( "c should be imported", m.hasLoadedImport( "file:testing/ontology/testImport3/c.owl" ) ); assertTrue( "b should be imported", m.hasLoadedImport( "file:testing/ontology/testImport3/b.owl" ) ); } /** Test that resources are attached to the right sub-models when importing */ public void testLoadImports2() { OntModel ontModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM, null); ontModel.read("file:testing/ontology/testImport8/a.owl"); String NSa = "http://incubator.apache.org/jena/2011/10/testont/a#"; String NSb = "http://incubator.apache.org/jena/2011/10/testont/b#"; OntClass A = ontModel.getOntClass(NSa + "A"); assertTrue( ontModel.isInBaseModel(A)); OntClass B = ontModel.getOntClass(NSb + "B"); assertFalse( ontModel.isInBaseModel(B)); assertTrue( ontModel.isInBaseModel(ontModel.createStatement(A, RDF.type, OWL.Class))); assertFalse( ontModel.isInBaseModel(ontModel.createStatement(B, RDF.type, OWL.Class))); } /** Test getting conclusions after loading imports */ public void testAddImports0() { OntModel base = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM ); base.createClass( NS + "A" ); base.createClass( NS + "B" ); OntModel m = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM_MICRO_RULE_INF, base ); OntClass a = m.getOntClass( NS + "A" ); OntClass b = m.getOntClass( NS + "B" ); // nothing is known about a and b yet assertFalse( a.hasSubClass( b ) ); // add some ontology data OntModel imp = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM ); imp.add( b, RDFS.subClassOf, a ); m.addSubModel( imp, true ); assertTrue( a.hasSubClass( b ) ); } public void testAddImports1() { String ns = "http://jena.hpl.hp.com/2003/03/testont"; OntModel base = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM ); OntDocumentManager odm = OntDocumentManager.getInstance(); odm.addAltEntry( ns + "#a", "file:testing/ontology/testImport7/a.owl" ); OntModel m = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM_MICRO_RULE_INF, base ); Ontology oo = base.createOntology( ns ); oo.addImport( base.createResource( ns + "#a") ); // nothing is known about a and b yet Resource a = m.getResource( ns + "#A" ); Resource c = m.getResource( ns + "#C" ); assertFalse( m.contains( c, RDFS.subClassOf, a ) ); // when we load the imports, the odm must kick the reasoner with a rebind() m.getDocumentManager().loadImports( m ); assertTrue( m.contains( c, RDFS.subClassOf, a ) ); } /** * AddSubModel variant 2: base = no inf, import = no inf */ public void testaddSubModel0() { OntModel m0 = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM ); OntModel m1 = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM ); OntClass c = m1.createClass( NS + "c" ); assertFalse( m0.containsResource( c ) ); m0.addSubModel( m1 ); assertTrue( m0.containsResource( c ) ); m0.removeSubModel( m1 ); assertFalse( m0.containsResource( c ) ); } /** * AddSubModel variant 2: base = inf, import = no inf */ public void testaddSubModel1() { OntDocumentManager.getInstance().setProcessImports( false ); OntDocumentManager.getInstance().addAltEntry( "http://www.w3.org/TR/2003/CR-owl-guide-20030818/wine", "file:testing/ontology/owl/Wine/wine.owl" ); OntModel m0 = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM_MICRO_RULE_INF); OntModel m1 = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM); String namespace = "http://www.w3.org/TR/2003/CR-owl-guide-20030818/wine"; String classURI = namespace + "#Wine"; m1.read(namespace); OntClass c = m1.getOntClass(classURI); assertFalse(m0.containsResource(c)); m0.addSubModel(m1); assertTrue(m0.containsResource(c)); m0.removeSubModel(m1); assertFalse(m0.containsResource(c)); } /** * Variant 3: base = no inf, import = inf */ public void testaddSubModel3() { OntModel m0 = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM ); OntModel m1 = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM_RDFS_INF ); OntClass c = m1.createClass( NS + "c" ); assertFalse( m0.containsResource( c ) ); m0.addSubModel( m1 ); assertTrue( m0.containsResource( c ) ); m0.removeSubModel( m1 ); assertFalse( m0.containsResource( c ) ); } /** * Variant 4: base = inf, import = inf */ public void testaddSubModel4() { OntModel m0 = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM_RDFS_INF ); OntModel m1 = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM_RDFS_INF ); OntClass c = m1.createClass( NS + "c" ); assertFalse( m0.containsResource( c ) ); m0.addSubModel( m1 ); assertTrue( m0.containsResource( c ) ); m0.removeSubModel( m1 ); assertFalse( m0.containsResource( c ) ); } /** Remove a sub model (imported model) */ public void testremoveSubModel0() { OntModel m = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM, null ); m.read( "file:testing/ontology/testImport3/a.owl" ); assertEquals( 2, m.getSubGraphs().size() ); for (Iterator<OntModel> it = m.listSubModels(); it.hasNext();) { m.removeSubModel( it.next() ); } assertEquals( 0, m.getSubGraphs().size() ); } /** Getting the deductions model of an OntModel * see also {@link TestBugs#testOntModelGetDeductions()} * <p>ijd: Feb 6th, 2008 - this test has been disabled for * the time being, since it is not correct as written. However, * I'm not removing or changing it just yet, since it is showing up * an infelicity in the rule engine that Dave will investigate * at some future date.</p> * */ public void xxtestGetDeductionsModel0() { OntModel m = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM_MICRO_RULE_INF ); OntClass a = m.createClass( NS + "A" ); OntClass b = m.createClass( NS + "B" ); OntClass c = m.createClass( NS + "C" ); b.addSubClass( c ); // we see the entailments only in the deductions model Model dm = m.getDeductionsModel(); assertTrue( dm.contains( OWL.Nothing, RDFS.subClassOf, a ) ); assertTrue( dm.contains( OWL.Nothing, RDFS.subClassOf, c ) ); a.addSubClass( b ); assertTrue( a.hasSubClass( c )); dm = m.getDeductionsModel(); assertFalse( dm.contains( OWL.Nothing, RDFS.subClassOf, a ) ); assertTrue( dm.contains( OWL.Nothing, RDFS.subClassOf, c ) ); } /** * Test that using closed models in imports does not raise an exception */ public void testImportClosedModel() { String SOURCEA= "<rdf:RDF" + " xmlns:rdf ='http://www.w3.org/1999/02/22-rdf-syntax-ns#'" + " xmlns:owl ='http://www.w3.org/2002/07/owl#'" + " xml:base ='http://example.com/a#'" + ">" + " <owl:Ontology>" + " <owl:imports rdf:resource='http://example.com/b' />" + " </owl:Ontology>" + "</rdf:RDF>"; OntDocumentManager.getInstance().addAltEntry( "http://example.com/b", "file:testing/ontology/relativenames.rdf" ); OntModel a0 = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM ); a0.read( new StringReader( SOURCEA ), null ); long a0count = a0.size(); // key step - close a model which is now in the ODM cache OntDocumentManager.getInstance().getModel( "http://example.com/b" ).close(); // this line threw an exception before the bug was fixed OntModel a1 = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM ); a1.read( new StringReader( SOURCEA ), null ); // for completeness, check that we have read the same contents assertEquals( "Models should be same size", a0count, a1.size() ); } /** * OntModel read should do content negotiation if no base URI is given */ public void testReadConneg0() { final boolean[] acceptHeaderSet = new boolean[] {false}; // because ModelCom has private fields it references directly, we have to mock // a lot more pieces that I would prefer OntModel m = new OntModelImpl(OntModelSpec.OWL_MEM) { @Override protected Model readDelegate( String url ) { acceptHeaderSet[0] = true; return super.readDelegate( url ); } /** Allow pseudo-conneg even on file: uri's */ @Override public boolean ignoreFileURI( String url ) { return false; } }; assertFalse( acceptHeaderSet[0] ); m.read( "file:testing/ontology/owl/Property/test.rdf" ); assertTrue( acceptHeaderSet[0] ); } /** No conneg for file: uri's normally */ public void testReadConneg1() { final boolean[] acceptHeaderSet = new boolean[] {false}; // because ModelCom has private fields it references directly, we have to mock // a lot more pieces that I would prefer OntModel m = new OntModelImpl(OntModelSpec.OWL_MEM) { @Override protected Model readDelegate( String url ) { acceptHeaderSet[0] = true; return super.readDelegate( url ); } }; assertFalse( acceptHeaderSet[0] ); m.read( "file:testing/ontology/owl/Property/test.rdf" ); assertFalse( acceptHeaderSet[0] ); } /** With RDF/XML syntax specified, conneg */ public void testReadConneg2() { final boolean[] acceptHeaderSet = new boolean[] {false}; // because ModelCom has private fields it references directly, we have to mock // a lot more pieces that I would prefer OntModel m = new OntModelImpl(OntModelSpec.OWL_MEM) { @Override protected Model readDelegate( String url, String lang ) { acceptHeaderSet[0] = true; return super.readDelegate( url, lang ); } /** Allow pseudo-conneg even on file: uri's */ @Override public boolean ignoreFileURI( String url ) { return false; } }; assertFalse( acceptHeaderSet[0] ); m.read( "file:testing/ontology/owl/Property/test.rdf", "RDF/XML" ); assertTrue( acceptHeaderSet[0] ); } /** With a base URI, no conneg */ public void testReadConneg3() { final boolean[] acceptHeaderSet = new boolean[] {false}; // because ModelCom has private fields it references directly, we have to mock // a lot more pieces that I would prefer OntModel m = new OntModelImpl(OntModelSpec.OWL_MEM) { @Override protected Model readDelegate( String url, String lang ) { acceptHeaderSet[0] = true; return super.readDelegate( url, lang ); } /** Allow pseudo-conneg even on file: uri's */ @Override public boolean ignoreFileURI( String url ) { return false; } }; assertFalse( acceptHeaderSet[0] ); m.read( "file:testing/ontology/owl/Property/test.rdf", "http://foo.com", "RDF/XML" ); assertFalse( acceptHeaderSet[0] ); } // Internal implementation methods ////////////////////////////////// /** * Answer true iff an iterator contains a given value. */ private boolean iteratorContains( Iterator<?> i, Object x ) { boolean found = false; while (i.hasNext()) { found = i.next().equals( x ) || found; } return found; } //============================================================================== // Inner class definitions //============================================================================== protected class OWLProfileExt extends OWLProfile { public Map<Class<?>, SupportsCheck> getSupportsMap() { return getCheckTable(); } } protected class OWLDLProfileExt extends OWLDLProfile { public Map<Class<?>, SupportsCheck> getSupportsMap() { return getCheckTable(); } } protected class OWLLiteProfileExt extends OWLLiteProfile { public Map<Class<?>, SupportsCheck> getSupportsMap() { return getCheckTable(); } } }