../../_images/python_et_les_ontologies.jpeg
Jean-Baptiste Lamy
ENI Éditions, 310 pages

Owlready2 is a module for ontology-oriented programming in Python 3.

documentation download stats

Owlready2 can:

  • Import OWL 2.0 ontologies in NTriples, RDF/XML or OWL/XML format.

  • Export OWL 2.0 ontologies to NTriples or RDF/XML.

  • Manipulates ontology classes, instances and properties transparently, as if they were normal Python objects.

  • Add Python methods to ontology classes.

  • Perform automatic classification of classes and instances, using the HermiT or Pellet reasoner (included)

  • Load DBpedia or UMLS (for medical terminology, using the integrated PyMedTermino2 submodule)

  • Tested up to 1 billion of RDF triples (but can potentially support more).

  • In addition, the quadstore is compatible with the RDFlib Pyton module, which can be used to perform SPARQL queries.

  • Finally, Owlready2 can also be used as an ORM (Object-Relational mapper) -- as a graph/object database, it beats Neo4J, MongoDB, SQLObject and SQLAlchemy in terms of performances (see Benchmark)

Owlready2 has been created by Jean-Baptiste Lamy (my email is on the left) at the LIMICS reseach lab, University Paris 13, Sorbonne Paris Cité, INSERM UMRS 1142, Paris 6 University. It is available under the GNU LGPL licence v3.

If you use Owlready2, please cite the following article:

Lamy JB. Owlready: Ontology-oriented programming in Python with automatic classification and high level constructs for biomedical ontologies. Artificial Intelligence In Medicine 2017;80:11-28

Owlready2 0.21 has been released!

Owlready is a Python module for ontology-oriented programming. It can load OWL 2.0 ontologies and manipulate them transparently in Python.

This new realease fixes several bugs and now includes Pellet 2.3.1 (same version as in Protégé) instead of version 2.4 (which seems to have problems with some SWRL builtins).

Here are the changes:

  • Use Pellet 2.3.1 (same version as Protégé) instead of 2.4 (which has a bug in SWRL for many builtin predicates including equals and matches)

  • Much faster mangement of annotations on relations

  • Bugfixes: - Fix bug on blank node in RDFlib/SPARQL support - Fix bug on blank node deletion in RDFlib/SPARQL support - Fix data loss in Restriction modification - Fix 'no query solution' error in search() - Fix literal support in RDF lists, causing "TypeError: '<' not supported between instances of 'NoneType' and 'int'" when saving ontologies - Fix DifferentFrom SWRL builtin - Fix string parsing in SWRL rules - Fix string and boolean literal representation (str/repr) in SWRL rules - Fix the inverse of subproperties having a symmetric superproperty

The new version be downloaded from PyPI (Python Package Index): https://pypi.python.org/pypi/Owlready2

French book "Python et les ontologies"

Python et les ontologies, Jean-Baptiste Lamy, ENI Éditions, 310 pages

My French book "Python et les ontologies" has been published by ENI editions.

This 310-pages book describes how to use OWL 2.0 ontologies in Python 3.x, with the Owlready2 Python module for ontology-oriented programming.

More informations (in French) on the editor website:

https://www.editions-eni.fr/livre/python-et-les-ontologies-9782409020223

I plan to translate the book in English in the coming year.

Owlready2 0.20 has been released!

Owlready is a Python module for ontology-oriented programming. It can load OWL 2.0 ontologies and manipulate them transparently in Python.

This new version fix an important bug in UMLS support.

It also stops considering as functional properties associated with exactly-1 or max-1 restrictions. This was intended to be a feature, but was actually often more annoying that desirable. If needed, you can restore the previous behaviour as follows:

import owlready2.prop
owlready2.prop.RESTRICTIONS_AS_FUNCTIONAL_PROPERTIES = True

Here are the changes:

  • Add support for undoable destroy_entity()

  • Small database optimizations

  • No longer treat properties associated with exactly-1 or max-1 restriction as functional properties, returning single values instead of a list

  • Bugfixes: - Fix performance bug on UMLS mapping in PyMedTermino

The new version be downloaded from PyPI (Python Package Index): https://pypi.python.org/pypi/Owlready2

Owlready2 0.19 has been released!

Owlready is a Python module for ontology-oriented programming. It can load OWL 2.0 ontologies and manipulate them transparently in Python.

This new version has a better SPARQL support, faster searches, and it adds the "individual.INVERSE_property" syntax. It also supports the new UMLS zipped file format.

Here are the changes:

  • Consider symmetric properties as their own inverse properties

  • Update Python objects after basic SPARQL update/delete queries (works on user-defined properties, hierarchical properties (type/subclassof) and equivalence properties)

  • Add individual.INVERSE_property

  • Add Class.INDIRECT_is_a

  • INDIRECT_is_a / INDIRECT_is_instance_of now include class contructs. ancestors() has a 'include_constructs' parameter, which defaults to False.

  • Add more aliases for XMLSchema datatypes

  • Add is_a property to class constructs

  • Add bottomObjectProperty and bottomDataProperty

  • Support ReflexiveProperties in individual.INDIRECT_property

  • Optimize Thing.subclasses()

  • Optimize search() with multiple criteria, including those done by PyMedTermino

  • Add support for destroy_entity(SWRL_rule)

  • Add support for UMLS "metathesaurus" format in addition to "full" format

  • Bugfixes: - After reasoning, keep all equivalent classes as parents of individuals (as they may have methods) - Fix IndividualPropertyAtom when creating SWRL rule - Fix SWRL parser - Fix RDF serialization for nested RDF lists - Fix removing inverse property (i.e. Prop.inverse = None) - Fix datetime parsing for date with time zone or milliseconds

The new version be downloaded from PyPI (Python Package Index): https://pypi.python.org/pypi/Owlready2

Owlready2 0.18 has been released!

Owlready is a Python module for ontology-oriented programming. It can load OWL 2.0 ontologies and manipulate them transparently in Python.

This new version fixes the UMLS support under Windows (character encoding problem) in PyMedTermino2. It also prevents the duplication of RDF triples in the quadstore.

Here are the changes:

  • Add UNIQUE constraints for preventing dupplicated RDF triples in the quadstore

  • Add Individual.INDIRECT_is_a / Individual.INDIRECT_is_instance_of

  • Add isinstance_python() (faster than isinstance(), but do not consider equivalent_to relations)

  • Bugfixes: - Force UTF-8 encoding when importing UMLS - Be more tolerant when loading OWL file

The new version be downloaded from PyPI (Python Package Index): https://pypi.python.org/pypi/Owlready2

Owlready2 0.17 has been released!

Owlready is a Python module for ontology-oriented programming. It can load OWL 2.0 ontologies and manipulate them transparently in Python.

This new version supports SWRL rule editions and fixes problems in PyMedTermino2.

Here are the changes:

  • SWRL rule support

  • Allows importing UMLS suppressed terms

  • Uncache entities when relaoding an ontology

  • Bugfixes: - Fix PyMedTermino2 installation - Fix data property value inferrence with debug = 1 - Fix sort() in LazyList (thanks fiveop!) - Fix World.get() and add World.get_if_loaded() - Add appropriate error message when importing UMLS with Python 3.6 - Fix individuals belonging to multiple, equivalent, classes after reasoning

The new version be downloaded from PyPI (Python Package Index): https://pypi.python.org/pypi/Owlready2

Owlready2 0.16 has been released!

Owlready is a Python module for ontology-oriented programming. It can load OWL 2.0 ontologies and manipulate them transparently in Python.

This new version fix several bugs and supports SPARQL request INSERT and DELETE.

Here are the changes:

  • Optimize nested searches

  • search(sublclass_of = xxx) now returns xxx itself in the results

  • Support "with long_ontology_name as onto" syntax

  • In UMLS import, add optional parameters for preventing extraction of attributes, relations, etc

  • Support SPARQL INSERT queries

  • Optimize Pymedtermino mapping

  • Doc for PyMedTermino2

  • Bugfixes: - Fix 'Cannot release un-acquired lock' error when reasoning on inconsistent ontologies inside a 'with' statement - Fix bug when loading a property that refers to another property from a quadstore stored on disk - Fix RDF triple suppression with RDFlib when object is a datatype

The new version be downloaded from PyPI (Python Package Index): https://pypi.python.org/pypi/Owlready2

Owlready2 0.15 has been released!

Owlready is a Python module for ontology-oriented programming. It can load OWL 2.0 ontologies and manipulate them transparently in Python.

This is mostly a bugfix release.

Here are the changes:

  • Can infer data property values when reasoning with Pellet

  • Optimize searches with 'type =', 'subclass_of =', or 'is_a =' parameters

  • Add Property.range_iri

  • Add _case_sensitive parameter to search()

  • Add inverse property support in RDFlib support

  • Show Java error message when reasoners crash

  • Bugfixes: - Consider inverse property in get_properties() - Fix parsing bug in reasoning with HermiT and infer_property_values = True - Namespace prefix support in RDFlib binding - Fix dupplicates values when a relation involving a property with inverse is asserted in both directions - Better workaround in case of metaclass conflict - Fix 'sqlite3.OperationalError: too many SQL variables' in searches with 'type =', 'subclass_of =', or 'is_a =' parameters

The new version be downloaded from PyPI (Python Package Index): https://pypi.python.org/pypi/Owlready2

Owlready2 0.14 has been released!

Owlready is a Python module for ontology-oriented programming. It can load OWL 2.0 ontologies and manipulate them transparently in Python.

This new version adds the ability to infer property values (as in Protégé) and to use SWRL rules. It improves class properties and it can import UMLS (still undocumentated!). It also fixes several bugs.

Here are the changes in version 0.14:

  • UMLS support (owlready2.pymedtermino2 package)

  • Can infer object property values when reasoning (thanks W Zimmer)

  • New implementation of property values; use INDIRECT_prop to get indirect values

  • Support several class property types : some, only, some + only, and direct relation

  • Automatically create defined classes via class properties

  • Support anonymous individuals, e.g. Thing(0)

  • Optimize search() when only the number of returned elements is used

  • Optimize FTS search() when using also non-FTS statements

  • Can restrict reasoning to a list of ontologies

  • Union searches (i.e. default_world.search(...) | default_world.search(...))

  • Bugfixes: - Fix functional class properties with inheritance - Fix dupplicated instance list restrictions when calling close_world(ontology) - Fix use of '*' in search - Fix synchronization, using contextvars for global variables

The new version be downloaded from PyPI (Python Package Index): https://pypi.python.org/pypi/Owlready2

Owlready2 0.13 has been released!

Owlready is a Python module for ontology-oriented programming. It can load OWL 2.0 ontologies and manipulate them transparently in Python.

This new version fixes several bugs and performance regressions related to the new quadstore introduced in the previous release.

Here are the changes in version 0.13:

  • Bugfixes: - Fix performance regression due to suboptimal index in the quadstore - Fix messing up with IRI ending with a / - Fix error in World cloning - Fix the addition of Thing in class's parent when redefining a class with Thing as the only parent - Fix inverse_resctriction() - Add error message when creating an existent quadstore

The new version be downloaded from PyPI (Python Package Index): https://pypi.python.org/pypi/Owlready2

Owlready2 0.12 has been released!

Owlready is a Python module for ontology-oriented programming. It can load OWL 2.0 ontologies and manipulate them transparently in Python.

This new major version uses a new quadstore, with better performances, and has been tested up to 200 millions of RDF triplets (can load DBpedia!). PostgresQL support has been dropped because its interest was very limited (performances were poor compared to Sqlite3).

Here are the changes in version 0.12:

  • New quadstore

  • Numerical search (NumS, e.g. all patients with age > 65)

  • Nested searches

  • Synchronization for multithreading support

  • Add Class.inverse_restrictions() and Class.direct_instances()

  • Drop PostgresQL support (little interest: more complex and slower than Sqlite3)

  • Bugfixes: - Fix call to _get_by_storid2 - Fix rdfs_subclassof in doc - Fix FTS triggers - Fix boolean in RDFlib / SPARQL - Fix bug when destroying an AnnotationProperty

The new version be downloaded from PyPI (Python Package Index): https://pypi.python.org/pypi/Owlready2

Owlready2 0.11 has been released!

Owlready is a Python module for ontology-oriented programming. It can load OWL 2.0 ontologies and manipulate them transparently in Python.

This new version brings two major new features: the support for Pellet reasoner and the optimized full-text search.

Here are the changes in version 0.11:

  • Optimized Full-Text Search

  • Support Pellet reasoner in addition to HermiT

  • Support loading of huge OWL files (incremental load)

  • Use Class.property.indirect() for indirect Class property (instead of Class.property)

  • Add reload and reload_if_newer parameters to Ontology.load()

  • search() is now much faster on properties that have inverse

  • Add shortcut for SOME ConstrainedDatatype: e.g. age >= 65

  • Bugfixes: - Fix creation of an individual that already exists in the quadstore - Fix missing import of EntityClass in class_construct.py - Fix World.save() with RDF/XML format - Fix Thing.subclasses() and Thing.descendants() - Fix ontology's update time for ontologies created de novo in Python with Owlready - Fix reasoning when asserting new parents with equivalent classes

The new version be downloaded from PyPI (Python Package Index): https://pypi.python.org/pypi/Owlready2

Owlready2 0.10 has been released!

Owlready is a Python module for ontology-oriented programming. It can load OWL 2.0 ontologies and manipulate them transparently in Python.

This new version fixes many bugs and adds the support of ontology metadata. It also introduces the use of Cython, for improving performances when reading RDF/XML and OWL/XML files. Owlready2 is now able to read these files as fast as Java !

Here are the changes in version 0.10:

  • Add Ontology.metadata for adding/querying ontology metadata

  • Allows multiple individual creations with the same name/IRI, now returning the same individuals

  • Add OwlReadyInconsistentOntologyError and Word.inconsistent_classes()

  • Implement RDF/XML and OWL/XML parsing in Cython (25% speed boost for parsing)

  • Small optimization

  • Extend individual.prop.indirect() to include relations asserted at the class level

  • Add .query_owlready() method to RDF graph

  • Bugfixes: - Fix reasoning when obtaining classes equivalent to nothing - Fix World creation with backend parameters - Fix error when adding property at the class definition level - Fix loading of ontology files with no extension from onto_path - Fix properties defined with type 'RDF Property' and subproperty of 'OWL Data/Object/Annotation Property' - Support old SQLite3 versions that do not accept WITHOUT ROWID - Fix reference to undeclared entities (they were replaced by None, now by their IRI) - Fix loading and saving ontologies whose base IRI ends with / - Fix RDF query using string

The new version be downloaded from PyPI (Python Package Index): https://pypi.python.org/pypi/Owlready2

Owlready2 0.9 has been released!

Owlready is a Python module for ontology-oriented programming. It can load OWL 2.0 ontologies and manipulate them transparently in Python.

This new version allows the use of PostgresQL instead of SQLite3 (however, performances are usually lower). It also facilitate the access to SOME restrictions on classes, using the dotted notation "class.property".

Here are the changes in version 0.9:

  • PostgresQL backend (in addition to SQLite3)

  • Add 'exclusive = False' option for SQLite3 backend (slower, but allows multiple uses)

  • Use unique index in sqlite3 quadstore on resources table

  • Optimize sqlite3 quadstore by caching IRI dict (5% faster)

  • Add == support for class construct

  • Add get_namespace() support on World

  • Add 'existential restrictions as class properties' feature

  • Bugfixes: - Fix imported ontologies - Fix saving ontologies in onto_path - Fix clear() on CallbackList - Fix bug in Class IRI in ontologies whose base IRI ends with a / - Fix imported ontologies in ontologies whose base IRI ends with a /

The new version be downloaded from PyPI (Python Package Index): https://pypi.python.org/pypi/Owlready2