Class SchemaCachingRDFSInferencer

All Implemented Interfaces:
FederatedServiceResolverClient, NotifyingSail, Sail, StackableSail

public class SchemaCachingRDFSInferencer extends NotifyingSailWrapper

The SchemaCachingRDFSInferencer is an RDFS reasoner that caches all schema (TBox) statements and calculates an inference map to quickly determine inferred statements. The reasoner can also be instantiated with a predefined schema for improved performance.

This reasoner is not a rule based reasoner and will be up to 80x faster than the ForwardChainingRDFSInferencer, as well as being more complete.

The sail puts no limitations on isolation level for read transactions, however all write/delete/update transactions are serializable with exclusive locks. This limits write/delete/update transactions to one transaction at a time.

  • Field Details

    • logger

      private static final org.slf4j.Logger logger
    • DEFAULT_CONTEXT

      private static final Resource[] DEFAULT_CONTEXT
    • predefinedSchema

      Repository predefinedSchema
    • exclusiveWriteLock

      private final ReentrantLock exclusiveWriteLock
    • useAllRdfsRules

      boolean useAllRdfsRules
    • useInferredToCreateSchema

      protected volatile boolean useInferredToCreateSchema
    • properties

      private Collection<Resource> properties
    • types

      private Collection<Resource> types
    • subClassOfStatements

      private Collection<Statement> subClassOfStatements
    • subPropertyOfStatements

      private Collection<Statement> subPropertyOfStatements
    • rangeStatements

      private Collection<Statement> rangeStatements
    • domainStatements

      private Collection<Statement> domainStatements
    • calculatedTypes

      private Map<Resource,Set<Resource>> calculatedTypes
    • calculatedProperties

      private Map<Resource,Set<Resource>> calculatedProperties
    • calculatedRange

      private Map<Resource,Set<Resource>> calculatedRange
    • calculatedDomain

      private Map<Resource,Set<Resource>> calculatedDomain
    • sharedSchema

      private boolean sharedSchema
    • addInferredStatementsToDefaultContext

      private boolean addInferredStatementsToDefaultContext
    • unmodifiable

      private volatile boolean unmodifiable
  • Constructor Details

    • SchemaCachingRDFSInferencer

      public SchemaCachingRDFSInferencer()
      Instantiate a new SchemaCachingRDFSInferencer
    • SchemaCachingRDFSInferencer

      public SchemaCachingRDFSInferencer(NotifyingSail data)
      Instantiate a SchemaCachingRDFSInferencer.
      Parameters:
      data - Base sail for storing data.
    • SchemaCachingRDFSInferencer

      public SchemaCachingRDFSInferencer(NotifyingSail data, Repository predefinedSchema)
      Instantiate a SchemaCachingRDFSInferencer with a predefined schema. The schema will be used for inference, all other schema statements added will be ignored and no schema statements can be removed. Using a predefined schema significantly improves performance.
      Parameters:
      data - Base sail for storing data.
      predefinedSchema - Repository containing the schema.
    • SchemaCachingRDFSInferencer

      public SchemaCachingRDFSInferencer(NotifyingSail data, boolean useAllRdfsRules)
      Instantiate a SchemaCachingRDFSInferencer.
      Parameters:
      data - Base sail for storing data.
      useAllRdfsRules - Usel all RDFS rules. If set to false rule rdf4a and rdfs4b will be ignore
    • SchemaCachingRDFSInferencer

      public SchemaCachingRDFSInferencer(NotifyingSail data, Repository predefinedSchema, boolean useAllRdfsRules)
      Instantiate a SchemaCachingRDFSInferencer with a predefined schema. The schema will be used for inference, all other schema statements added will be ignored and no schema statements can be removed. Using a predefined schema significantly improves performance.
      Parameters:
      data - Base sail for storing data.
      predefinedSchema - Repository containing the schema.
      useAllRdfsRules - Usel all RDFS rules. If set to false rule rdf4a and rdfs4b will be ignore
  • Method Details

    • clearInferenceTables

      void clearInferenceTables()
    • acquireExclusiveWriteLock

      void acquireExclusiveWriteLock()
      Tries to obtain an exclusive write lock on this store. This method will block until either the lock is obtained or an interrupt signal is received.
      Throws:
      SailException - if the thread is interrupted while waiting to obtain the lock.
    • releaseExclusiveWriteLock

      void releaseExclusiveWriteLock()
      Releases the exclusive write lock.
    • init

      public void init() throws SailException
      Description copied from interface: Sail
      Initializes the Sail. Care should be taken that required initialization parameters have been set before this method is called. Please consult the specific Sail implementation for information about the relevant parameters.
      Specified by:
      init in interface Sail
      Overrides:
      init in class SailWrapper
      Throws:
      SailException - If the Sail could not be initialized.
    • getConnection

      Description copied from interface: Sail
      Opens a connection on the Sail which can be used to query and update data. Depending on how the implementation handles concurrent access, a call to this method might block when there is another open connection on this Sail.
      Specified by:
      getConnection in interface NotifyingSail
      Specified by:
      getConnection in interface Sail
      Overrides:
      getConnection in class NotifyingSailWrapper
      Throws:
      SailException - If no transaction could be started, for example because the Sail is not writable.
    • getValueFactory

      public ValueFactory getValueFactory()
      Description copied from interface: Sail
      Gets a ValueFactory object that can be used to create IRI-, blank node-, literal- and statement objects.
      Specified by:
      getValueFactory in interface Sail
      Overrides:
      getValueFactory in class SailWrapper
      Returns:
      a ValueFactory object for this Sail object.
    • fastInstantiateFrom

      public static SchemaCachingRDFSInferencer fastInstantiateFrom(SchemaCachingRDFSInferencer sailToInstantiateFrom, NotifyingSail store)
      Instantiate a new SchemaCachingRDFSInferencer from an existing one. Fast instantiation extracts the schema lookup tables generated by the existing sail and uses them to populate the lookup tables of a new reasoner. Schema triples can not be queried in the SchemaCachingRDFSInferencer returned by this method.
      Parameters:
      sailToInstantiateFrom - The SchemaCachingRDFSInferencer to extract the lookup tables from.
      store - Base sail for storing data.
      Returns:
      inferencer
    • fastInstantiateFrom

      public static SchemaCachingRDFSInferencer fastInstantiateFrom(SchemaCachingRDFSInferencer sailToInstantiateFrom, NotifyingSail store, boolean useAllRdfsRules)
      Instantiate a new SchemaCachingRDFSInferencer from an existing one. Fast instantiation extracts the schema lookup tables generated by the existing sail and uses them to populate the lookup tables of a new reasoner. Schema triples can not be queried in the SchemaCachingRDFSInferencer returned by this method.
      Parameters:
      sailToInstantiateFrom - The SchemaCachingRDFSInferencer to extract the lookup tables from.
      store - Base sail for storing data.
      useAllRdfsRules - Use all RDFS rules. If set to false rule rdf4a and rdfs4b will be ignore
      Returns:
      inferencer
    • makeUnmodifiable

      private void makeUnmodifiable()
    • calculateInferenceMaps

      void calculateInferenceMaps(SchemaCachingRDFSInferencerConnection conn, boolean addInferred)
    • addSubClassOfStatement

      void addSubClassOfStatement(Statement st)
    • addSubPropertyOfStatement

      void addSubPropertyOfStatement(Statement st)
    • addRangeStatement

      void addRangeStatement(Statement st)
    • addDomainStatement

      void addDomainStatement(Statement st)
    • hasType

      boolean hasType(Resource r)
    • addType

      void addType(Resource r)
    • hasProperty

      boolean hasProperty(Resource property)
    • addProperty

      void addProperty(Resource property)
    • resolveTypes

      Set<Resource> resolveTypes(Resource value)
    • resolveProperties

      Set<Resource> resolveProperties(Resource predicate)
    • resolveRangeTypes

      Set<Resource> resolveRangeTypes(IRI predicate)
    • resolveDomainTypes

      Set<Resource> resolveDomainTypes(IRI predicate)
    • calculateSubClassOf

      private void calculateSubClassOf(Collection<Statement> subClassOfStatements)
    • getStream

      private Stream<Map.Entry<Resource,Set<Resource>>> getStream(Map<Resource,Set<Resource>> map)
    • calculateSubPropertyOf

      private void calculateSubPropertyOf(Collection<Statement> subPropertyOfStatemenets)
    • addAll

      private void addAll(Set<Resource> res, List<Set<Resource>> from)
    • calculateDomainAndRange

      private void calculateDomainAndRange(Collection<Statement> rangeOrDomainStatements, Map<Resource,Set<Resource>> calculatedRangeOrDomain)
    • getDefaultIsolationLevel

      public IsolationLevel getDefaultIsolationLevel()
      Description copied from interface: Sail
      Retrieves the default IsolationLevel level on which transactions in this Sail operate.
      Specified by:
      getDefaultIsolationLevel in interface Sail
      Overrides:
      getDefaultIsolationLevel in class SailWrapper
      Returns:
      the IsolationLevel that will be used with SailConnection.begin(), for SAIL connections returned by Sail.getConnection().
    • isAddInferredStatementsToDefaultContext

      public boolean isAddInferredStatementsToDefaultContext()

      Inferred statements can either be added to the default context or to the context that the original inserted statement has.

    • setAddInferredStatementsToDefaultContext

      public void setAddInferredStatementsToDefaultContext(boolean addInferredStatementsToDefaultContext)

      Inferred statements can either be added to the default context or to the context that the original inserted statement has. setAddInferredStatementsToDefaultContext(true) will add all inferred statements to the default context.

      Which context a tbox statement is added to is undefined.

      Before 3.0 default value for addInferredStatementsToDefaultContext was true. From 3.0 the default value is false.

      Parameters:
      addInferredStatementsToDefaultContext -
    • usesPredefinedSchema

      boolean usesPredefinedSchema()