Skip to content

Nemo v0.2.0

Compare
Choose a tag to compare
@mkroetzsch mkroetzsch released this 21 Jun 11:58
· 1382 commits to main since this release
v0.2.0
8c6601d

Version 0.2.0 of Nemo extends the fast in-memory rule reasoner with support for negation and RDF inputs. The command-line client nmo can be used to access this functionality (use nmo --help for a brief documentation). Moreover, the online documentation of Nemo has been expanded to cover many of the current features.

New Features and Improvements

The following new features have been added in Nemo v0.2.0:

  • Support for stratified negation: the ~ symbol can be used as a negation operator in rule bodies
  • Support for reading RDF data from N-Triples files, as in this example:
    @source triples[3]: load-rdf("sources/example2.nt") . % load into predicate "triples"; can also read .nt.gz

Important bug fixes and internal improvements:

  • The type integer now supports arbitrary signed 64bit integers (rather than just unsigned values)
  • Much improved result materialization, using a reworked streaming iterator for query results
  • Linux binaries are built in a better way that leads to better performance (Issue 263)

Current Functionality

At this version, Nemo therefore includes support for the following features:

  • Execution (materialization) of Datalog extended with stratified negation and existential rules (tuple-generating dependencies)
  • Loading input data from CSV/TSV and RDF (NT) files, and writing results to CSV files
  • Compatibility with RDF and SPARQL syntax for IRIs and literals
  • Datatypes integer (whole numbers), float64 (64bit floating point numbers), and any (union type that can represent any element; default)
  • Support for built-ins <=, <, >=, and > for type integer

Nemo v0.2.0 is built for mid-sized computing tasks that can still be processed on a normal laptop in seconds or minutes (typically hundreds of thousands to hundreds of millions of facts). In such cases, Nemo is already quite fast – at least fast enough to outperform existing free rule engines on all tests we conducted so far. Example tasks and benchmark results can be found in our sister repository Nemo examples and benchmarks.

Note that the combination of existential quantifiers and stratified negation do not have a standard semantics, and may lead to unexpected conclusions which can be avoided by careful modeling (see Ellmauthaler, Krötzsch, Mennicke; AAAI 2022).

Known Limitations

The following features are not included in v0.2.0 yet and will be added in upcoming releases:

  • Support for RDF output
  • More built-ins for datatypes, and more datatypes (note that already now Nemo can represent all kinds of values in type any, but it will be convenient to restrict to special cases such as string)
  • More built-in functions, including aggregates

Moreover, the documentation, though improved, is still very limited. This will be expanded gradually.

Feedback and issue reports are welcome!