Nemo v0.2.0
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), andany
(union type that can represent any element; default) - Support for built-ins
<=
,<
,>=
, and>
for typeinteger
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 asstring
) - 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!