/* * 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.util.*; import org.apache.jena.enhanced.* ; import org.apache.jena.graph.* ; import org.apache.jena.ontology.* ; import org.apache.jena.rdf.model.* ; import org.apache.jena.vocabulary.* ; /** * <p> * Ontology language profile for working with RDFS ontologies. RDFS is a (small) * sub-set of OWL, mostly. * </p> */ public class RDFSProfile extends AbstractProfile { // Constants ////////////////////////////////// // Static variables ////////////////////////////////// // Instance variables ////////////////////////////////// // Constructors ////////////////////////////////// // External signature methods ////////////////////////////////// @Override public String NAMESPACE() { return RDFS.getURI(); } @Override public Resource CLASS() { return RDFS.Class; } @Override public Resource RESTRICTION() { return null; } @Override public Resource THING() { return null; } @Override public Resource NOTHING() { return null; } @Override public Resource PROPERTY() { return RDF.Property; } @Override public Resource OBJECT_PROPERTY() { return null; } @Override public Resource DATATYPE_PROPERTY() { return null; } @Override public Resource TRANSITIVE_PROPERTY() { return null; } @Override public Resource SYMMETRIC_PROPERTY() { return null; } @Override public Resource FUNCTIONAL_PROPERTY() { return null; } @Override public Resource INVERSE_FUNCTIONAL_PROPERTY() { return null; } @Override public Resource ALL_DIFFERENT() { return null; } @Override public Resource ONTOLOGY() { return null; } @Override public Resource DEPRECATED_CLASS() { return null; } @Override public Resource DEPRECATED_PROPERTY() { return null; } @Override public Resource ANNOTATION_PROPERTY() { return null; } @Override public Resource ONTOLOGY_PROPERTY() { return null; } @Override public Resource LIST() { return RDF.List; } @Override public Resource NIL() { return RDF.nil; } @Override public Resource DATARANGE() { return null; } @Override public Property EQUIVALENT_PROPERTY() { return null; } @Override public Property EQUIVALENT_CLASS() { return null; } @Override public Property DISJOINT_WITH() { return null; } @Override public Property SAME_INDIVIDUAL_AS() { return null; } @Override public Property SAME_AS() { return null; } @Override public Property DIFFERENT_FROM() { return null; } @Override public Property DISTINCT_MEMBERS() { return null; } @Override public Property UNION_OF() { return null; } @Override public Property INTERSECTION_OF() { return null; } @Override public Property COMPLEMENT_OF() { return null; } @Override public Property ONE_OF() { return null; } @Override public Property ON_PROPERTY() { return null; } @Override public Property ALL_VALUES_FROM() { return null; } @Override public Property HAS_VALUE() { return null; } @Override public Property SOME_VALUES_FROM() { return null; } @Override public Property MIN_CARDINALITY() { return null; } @Override public Property MAX_CARDINALITY() { return null; } @Override public Property CARDINALITY() { return null; } @Override public Property INVERSE_OF() { return null; } @Override public Property IMPORTS() { return null; } @Override public Property PRIOR_VERSION() { return null; } @Override public Property BACKWARD_COMPATIBLE_WITH() { return null; } @Override public Property INCOMPATIBLE_WITH() { return null; } @Override public Property SUB_PROPERTY_OF() { return RDFS.subPropertyOf; } @Override public Property SUB_CLASS_OF() { return RDFS.subClassOf; } @Override public Property DOMAIN() { return RDFS.domain; } @Override public Property RANGE() { return RDFS.range; } @Override public Property FIRST() { return RDF.first; } @Override public Property REST() { return RDF.rest; } @Override public Property MIN_CARDINALITY_Q() { return null; } @Override public Property MAX_CARDINALITY_Q() { return null; } @Override public Property CARDINALITY_Q() { return null; } @Override public Property HAS_CLASS_Q() { return null; } // Annotations @Override public Property VERSION_INFO() { return null; } @Override public Property LABEL() { return RDFS.label; } @Override public Property COMMENT() { return RDFS.comment; } @Override public Property SEE_ALSO() { return RDFS.seeAlso; } @Override public Property IS_DEFINED_BY() { return RDFS.isDefinedBy; } @Override protected Resource[][] aliasTable() { return new Resource[][] { {} }; } /** The only first-class axiom type in OWL is AllDifferent */ @Override public Iterator<Resource> getAxiomTypes() { return Arrays.asList( new Resource[] { } ).iterator(); } /** The annotation properties of OWL */ @Override public Iterator<Resource> getAnnotationProperties() { return Arrays.asList( new Resource[] { RDFS.label, RDFS.seeAlso, RDFS.comment, RDFS.isDefinedBy } ).iterator(); } @Override public Iterator<Resource> getClassDescriptionTypes() { return Arrays.asList( new Resource[] { RDFS.Class } ).iterator(); } /** * <p> * Answer true if the given graph supports a view of this node as the given * language element, according to the semantic constraints of the profile. * If strict checking on the ontology model is turned off, this check is * skipped. * </p> * * @param n A node to test * @param g The enhanced graph containing <code>n</code>, which is assumed to * be an {@link OntModel}. * @param type A class indicating the facet that we are testing against. * @return True if strict checking is off, or if <code>n</code> can be * viewed according to the facet resource <code>res</code> */ @Override public <T> boolean isSupported( Node n, EnhGraph g, Class<T> type ) { if (g instanceof OntModel) { OntModel m = (OntModel) g; if (!m.strictMode()) { // checking turned off return true; } else { // lookup the profile check for this resource SupportsCheck check = (SupportsCheck) s_supportsChecks.get( type ); // a check must be defined for the test to succeed return (check == null) || check.doCheck( n, g ); } } else { return false; } } /** * <p> * Answer a descriptive string for this profile, for use in debugging and other output. * </p> * @return "OWL Full" */ @Override public String getLabel() { return "RDFS"; } // Internal implementation methods ////////////////////////////////// //============================================================================== // Inner class definitions //============================================================================== /** Helper class for doing syntactic/semantic checks on a node */ protected static class SupportsCheck { public boolean doCheck( Node n, EnhGraph g ) { return true; } } // Table of check data ////////////////////// private static Object[][] s_supportsCheckTable = new Object[][] { // Resource (key), check method { OntClass.class, new SupportsCheck() { @Override public boolean doCheck( Node n, EnhGraph g ) { return g.asGraph().contains( n, RDF.type.asNode(), RDFS.Class.asNode() ) || g.asGraph().contains( n, RDF.type.asNode(), RDFS.Datatype.asNode() ) || // These are common cases that we should support n.equals( RDFS.Resource.asNode() ) || g.asGraph().contains( Node.ANY, RDFS.domain.asNode(), n ) || g.asGraph().contains( Node.ANY, RDFS.range.asNode(), n ) ; } } }, { RDFList.class, new SupportsCheck() { @Override public boolean doCheck( Node n, EnhGraph g ) { return n.equals( RDF.nil.asNode() ) || g.asGraph().contains( n, RDF.type.asNode(), RDF.List.asNode() ); } } }, { OntProperty.class, new SupportsCheck() { @Override public boolean doCheck( Node n, EnhGraph g ) { return g.asGraph().contains( n, RDF.type.asNode(), RDF.Property.asNode() ); } } }, }; // Static variables ////////////////////////////////// /** Map from resource to syntactic/semantic checks that a node can be seen as the given facet */ protected static HashMap<Object, Object> s_supportsChecks = new HashMap<>(); static { // initialise the map of supports checks from a table of static data for ( Object[] aS_supportsCheckTable : s_supportsCheckTable ) { s_supportsChecks.put( aS_supportsCheckTable[0], aS_supportsCheckTable[1] ); } } //============================================================================== // Inner class definitions //============================================================================== }