Skip to content
This repository

OWL2 library for Prolog

README
---+ Thea2 : Prolog Modules for OWL2

A collection of modules for parsing and manipulating OWL2 ontologies
in Prolog. It is developed with SWI-Prolog in mind, but the goal is to
maximize portability with other prologs, such as Yap and XSB.

This documentation is intended to be read via pldoc

---++ Installation

See INSTALL.txt

You can bypass installation and use the 'thea' script directly. See
below.

---++ Overview

The module owl2_io.pl provides a means of loading and saving OWL2
axioms in a prolog model using predicates such as load_axioms/3 and
save_axioms/3. For example =|load_axioms('pizza.owl').|=

The model is documented in owl2_model.pl, and is based on Structural
Specification and Functional-Style Syntax for OWL2
(http://www.w3.org/TR/owl2-syntax). Predicate names such as
subClassOf2/, equivalent_to/2 and class/1 can be used to query an
in-memory prolog database.

For example:

==
:- use_module(library(thea2/owl2_io)).
:- use_module(library(thea2/owl2_model)).

show_superclasses(OntFile,Class) :-
        load_axioms(OntFile),
        forall(subClassOf(Class,Super),
               writeln(Super)).
==

The database can be manipulated via assert_axiom/2 and
retract_axiom/2. For more advanced OWL pattern matching and
replacement, see owl2_popl.pl

The Semantic Web Rule Language (SWRL) is also supported via swrl.pl

A number of different reasoners can be used - the module
owl2_reasoner.pl provides predicates such as reasoner_ask/2, which can
be used to query over an entailed knowledge base. A variety of
reasoners can be plugged in, both native prolog and non-prolog (the
latter accessed seamlessly via either owl2_owllink.pl or
owl2_java_owlapi.pl).

---++ Command Line Usage

The script "thea" in the bin directory should work from anywhere, with
no installation of thea modules required.

Type

==
thea --help
==

for full instructions. Many complex operations can be chained on the
command line.

See also the other wrapper scripts in the bin directory

See Command_Line_Usage.txt for more details

---++ Further Reading

 * Cookbook.txt - a collection of recipes for various tasks
 * Reasoning_using_Thea.txt - how to use reasoners

See also the apps/ directory for example applications.

---++ Module Manifest

 * owl2_io.pl -- reading/writing OWL from different sources, including:
  * owl2_from_rdf.pl -- requires library(semweb)
  * owl2_export_rdf.pl -- requires library(semweb)
  * owl2_xml.pl -- support for OWL-XML
  * owl2_manchester_paser.pl -- incomplete support for Manchester syntax
  * owl2_plsyn.pl -- infix prolog syntax for OWL
 * owl2_model.pl -- definition of prolog predicates used to embed OWL
 * swrl.pl
  * swrl_rdf_hooks.pl -- allows SWRL to be parsed by owl2_from_rdf.pl
 * owl2_reasoner.pl -- pluggable reasoner framework
  * owl2_rl_rules.pl
  * owl2_graph_reasoner.pl
 * owl2_java_owlapi.pl (requires JPL)
 * owl2_owllink.pl
 * owl2_util.pl -- misc utilities
 * owl2_popl.pl -- prolog ontology processing language
 * owl2_metamodel.pl -- information about OWL axiom types

---++ Reasoning support

The DLP subset of OWL2-DL can be translated to logic programs using a
transormation defined by Grosof. See owl2_to_prolog_dlp.pl

The resulting programs can be used with Prologs such as Yap and
XSB. There are also hooks for answer set programming and disjunctive
datalog systems such as DLV.

There is also a very partial TBox reasoner in owl2_reasoner.pl, and an
ad-hoc reasoner in owl2_basic_reasoner.pl that can be used with a
non-tabled prolog such as SWI; however, this gives incomplete results.

The DIG interface from Thea1 has yet to be converted. However, as we
now have OWLLink support, and DIG is being retired in favor of OWLLink.

You can also use java reasoners via the OWLAPI bridge. See
owl2_owlapi_java.pl

For more information see Reasoning_using_Thea.txt

---++ Relationship to SWI-Prolog SemWeb Library

Currently we use rdf_db.pl to translate from OWL RDF-XML to OWL
axioms. This 'consumes' the triples in the RDF database. Eventually we
would like a dynamic view over an RDF database, although this will be
difficult due to the non-monotonic nature of the mapping between RDF
and OWL.

---+++ On namespaces

Currently all IRIs are treated as Prolog atoms. This makes for
slightly verbose axioms, especially if long URLs are used.

One possible future option is to use the semweb library and
rdf_register_ns/2 to allow for convenient specification of namespaces
using a QName-like mechanism. This is not currently
implemented. Comments welcome.

One possibility is to simply rewrite the ontology using more compact
atoms. Even though the OWL spec dictates that well-formed IRIs should
be used, Thea allows you to use any unique atom to identify an
entity. See remove_namespaces/0 in owl2_util.pl for details. Of course,
care must be taken when doing this.

---++ Prolog Compatibility

The goal is to keep the core ISO compliant and usable across prolog
systems but this is difficult due to the different implementations of
modules in different Prolog engines. We develop for SWI-Prolog and are
aiming for full support for Yap in the near future.

See the iso/ directory for a dynamically generated version of some
Thea modules, stripped of module declarations. This is usable in
no-module systems like GNU Prolog and systems with incompatible module
syntax such as XSB. Only a subset of Thea functionality will be
available here, as SWI/Yap specific libraries are used for RDF, XML
and Java interaction.

---++ Sample Applications

See the apps/ director

---+++ Web interface

There is the beginnings of a primitive web front end:

* apps/webthea/webthea.pl

---+++ Obol - label parsing and generation

* apps/labelgen/labelgen.pl

---+++ MIREOT - selective migration of referenced classes into an ontology

* apps/mireot/mireot.pl

---++ Authors

This module is a continuation of Thea1, developed by VV.

Some of the code was developed by CJM

Contributions from:

* Martin Güther
Something went wrong with that request. Please try again.