All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.jena.ontapi.model.OntDataProperty Maven / Gradle / Ivy

/*
 * 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 org.apache.jena.ontapi.model;

import org.apache.jena.rdf.model.Literal;
import org.apache.jena.rdf.model.Property;
import org.apache.jena.rdf.model.Resource;
import org.apache.jena.vocabulary.OWL2;
import org.apache.jena.vocabulary.RDF;
import org.apache.jena.vocabulary.RDFS;

import java.util.stream.Stream;

/**
 * Interface encapsulating the Ontology (Named) Data Property.
 * This is an extension to the standard jena {@link Property},
 * the {@link OntEntity OWL Entity} and the {@link OntRelationalProperty realarional property} interfaces.
 * Range values for this property are {@link OntDataRange datarange} values
 * (as distinct from object property expression valued {@link OntObjectProperty properties}).
 * In OWL2, a Data Property cannot be anonymous.
 *
 * @see 5.4 Data Properties
 */
public interface OntDataProperty extends OntRelationalProperty, OntNamedProperty, HasDisjoint {

    /**
     * Adds a negative data property assertion.
     *
     * @param source {@link OntIndividual}, the source
     * @param target {@link Literal}, the target
     * @return {@link OntNegativeAssertion.WithDataProperty}
     * @see OntObjectProperty#addNegativeAssertion(OntIndividual, OntIndividual)
     */
    OntNegativeAssertion.WithDataProperty addNegativeAssertion(OntIndividual source, Literal target);

    /**
     * {@inheritDoc}
     *
     * @param direct {@code boolean} if {@code true} answers the directly adjacent properties in the sub-property relation:
     *               i.e. eliminate any properties for which
     *               there is a longer route to reach that parent under the sub-property relation
     * @return distinct {@code Stream} of datatype properties
     */
    @Override
    Stream subProperties(boolean direct);

    /**
     * {@inheritDoc}
     *
     * @param direct {@code boolean}: if {@code true} answers the directly adjacent properties in the super-property relation,
     *               i.e. eliminate any property for which
     *               there is a longer route to reach that parent under the super-property relation               
     * @return distinct {@code Stream} of datatype properties
     */
    @Override
    Stream superProperties(boolean direct);

    /**
     * {@inheritDoc}
     *
     * @return {@code Stream} of {@link OntNegativeAssertion.WithDataProperty}s
     * @see OntObjectProperty#negativeAssertions()
     */
    @Override
    default Stream negativeAssertions() {
        return getModel().ontObjects(OntNegativeAssertion.WithDataProperty.class).filter(a -> OntDataProperty.this.equals(a.getProperty()));
    }

    /**
     * Returns all associated negative data property assertions for the specified source individual.
     *
     * @param source {@link OntIndividual}
     * @return {@code Stream} of {@link OntNegativeAssertion.WithDataProperty}s.
     * @see OntObjectProperty#negativeAssertions(OntIndividual)
     */
    default Stream negativeAssertions(OntIndividual source) {
        return negativeAssertions()
                .filter(a -> a.getSource().equals(source));
    }

    /**
     * Returns all-property ranges (the statement pattern: {@code R rdfs:range D}).
     *
     * @return {@code Stream} of {@link OntDataRange}s
     */
    @Override
    default Stream ranges() {
        return objects(RDFS.range, OntDataRange.class);
    }

    /**
     * {@inheritDoc}
     * 

* The pattern is {@code Ri rdfs:subPropertyOf Rj} where {@code Ri, Rj} are data properties. * * @return {@code Stream} of {@link OntDataProperty}s * @see #subProperties(boolean) */ @Override default Stream subProperties() { return subProperties(false); } /** * {@inheritDoc} *

* The pattern is {@code Ri rdfs:subPropertyOf Rj} where {@code Ri, Rj} are data properties. * * @return {@code Stream} of {@link OntDataProperty}s * @see #subProperties(boolean) */ @Override default Stream superProperties() { return superProperties(false); } /** * Lists all {@code OntDisjoint} sections where this data-property is a member. * * @return a {@code Stream} of {@link OntDisjoint.DataProperties} */ @Override default Stream disjoints() { return getModel().ontObjects(OntDisjoint.DataProperties.class).filter(d -> d.members().anyMatch(this::equals)); } /** * Returns disjoint properties. * The statement pattern is: {@code Ri owl:propertyDisjointWith Rj}, where {@code Ri} - this property, * and {@code Rj} - the data property to return. * * @return {@code Stream} of {@link OntDataProperty}s * @see OntObjectProperty#disjointProperties() * @see OntDisjoint.DataProperties */ @Override default Stream disjointProperties() { return objects(OWL2.propertyDisjointWith, OntDataProperty.class); } /** * Returns all equivalent data properties * The statement pattern is {@code Ri owl:equivalentProperty Rj}, * where {@code Ri} - this property, {@code Rj} - the data property to return. * * @return {@code Stream} of {@link OntDataProperty}s * @see OntObjectProperty#equivalentProperties() */ @Override default Stream equivalentProperties() { return objects(OWL2.equivalentProperty, OntDataProperty.class); } /** * Creates and returns a new {@link OWL2#equivalentProperty owl:equivalentProperty} statement * with the given property as an object and this property as a subject. * * @param other {@link OntDataProperty}, not {@code null} * @return {@link OntStatement} to allow subsequent annotations adding * @see #addEquivalentProperty(OntDataProperty) * @see #removeEquivalentProperty(Resource) * @see OntObjectProperty#addEquivalentPropertyStatement(OntObjectProperty) */ default OntStatement addEquivalentPropertyStatement(OntDataProperty other) { return addStatement(OWL2.equivalentProperty, other); } /** * Adds a disjoint object property (i.e. the {@code _:this owl:propertyDisjointWith @other} statement). * * @param other {@link OntDataProperty}, not {@code null} * @return {@link OntStatement} to allow subsequent annotations adding * @see #addDisjointProperty(OntDataProperty) * @see #removeDisjointProperty(Resource) * @see OntObjectProperty#addPropertyDisjointWithStatement(OntObjectProperty) * @see OntDisjoint.ObjectProperties */ default OntStatement addPropertyDisjointWithStatement(OntDataProperty other) { return addStatement(OWL2.propertyDisjointWith, other); } /** * Adds the given property as super property returning this property itself. * * @param property {@link OntDataProperty}, not {@code null} * @return this instance to allow cascading calls * @see #removeSuperProperty(Resource) */ default OntDataProperty addSuperProperty(OntDataProperty property) { addSubPropertyOfStatement(property); return this; } /** * Adds the given property as sub property returning this property itself. * * @param property {@link OntDataProperty}, not {@code null} * @return this instance to allow cascading calls * @see #removeSubProperty(Resource) */ default OntDataProperty addSubProperty(OntDataProperty property) { property.addSubPropertyOfStatement(this); return this; } /** * Adds a statement with the {@link RDFS#range} as predicate * and the specified {@link OntDataRange data range} as an object. * * @param range {@link OntDataRange}, not {@code null} * @return this instance to allow cascading calls * @see #addRangeStatement(Resource) */ default OntDataProperty addRange(OntDataRange range) { addRangeStatement(range); return this; } /** * {@inheritDoc} */ @Override default OntDataProperty addDomain(OntClass ce) { addDomainStatement(ce); return this; } /** * Adds a new {@link OWL2#equivalentProperty owl:equivalentProperty} statement. * * @param other {@link OntDataProperty}, not {@code null} * @return {@link OntDataProperty} this instance to allow cascading calls * @see #addEquivalentPropertyStatement(OntDataProperty) * @see OntRelationalProperty#removeEquivalentProperty(Resource) * @see OntObjectProperty#addEquivalentProperty(OntObjectProperty) */ default OntDataProperty addEquivalentProperty(OntDataProperty other) { addEquivalentPropertyStatement(other); return this; } /** * Adds a new {@link OWL2#propertyDisjointWith owl:propertyDisjointWith} statement * for this and the specified property. * * @param other {@link OntDataProperty}, not {@code null} * @return {@link OntDataProperty} this instance to allow cascading calls * @see #addPropertyDisjointWithStatement(OntDataProperty) * @see OntObjectProperty#addDisjointProperty(OntObjectProperty) * @see OntRelationalProperty#removeDisjointProperty(Resource) * @see OntDisjoint.DataProperties */ default OntDataProperty addDisjointProperty(OntDataProperty other) { addPropertyDisjointWithStatement(other); return this; } /** * {@inheritDoc} */ @Override default OntDataProperty removeSuperProperty(Resource property) { remove(RDFS.subPropertyOf, property); return this; } /** * {@inheritDoc} */ @Override default OntDataProperty removeSubProperty(Resource property) { getModel().statements(property, RDFS.subPropertyOf, this).toList().forEach(s -> getModel().remove(s.clearAnnotations())); return this; } /** * {@inheritDoc} */ @Override default OntDataProperty removeDomain(Resource domain) { remove(RDFS.domain, domain); return this; } /** * {@inheritDoc} */ @Override default OntDataProperty removeRange(Resource range) { remove(RDFS.range, range); return this; } /** * {@inheritDoc} */ @Override default OntDataProperty removeEquivalentProperty(Resource property) { remove(OWL2.equivalentProperty, property); return this; } /** * {@inheritDoc} */ @Override default OntDataProperty removeDisjointProperty(Resource property) { remove(OWL2.propertyDisjointWith, property); return this; } /** * {@inheritDoc} */ @Override default OntDataProperty setFunctional(boolean functional) { if (functional) { addFunctionalDeclaration(); } else { remove(RDF.type, OWL2.FunctionalProperty); } return this; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy