Mulgara Release Notes



Jan 10, 2012


  • Added comments and/or logging to explain all ignored exceptions.
  • All logging that concatenates strings now checks the logging level before doing so.
  • All objects that implement equals also implement a compliant hashCode. This includes Tuples and Answer implementations.
  • Changed clone methods to use super.clone rather than copy constructors where appropriate.
  • More explicit cleanup of resources like RandomAccessFile and Socket.


Dec 14, 2011

New Features:

  • Added hash maps backed by memory mapped files. Not yet in full use.
  • SPARQL accepts + and * modifiers for properties for transitive queries.


  • Cleaned up some of the intermediate jar files to remove redundant entries.
  • URLs and version numbers update in LEGAL.txt.
  • HttpServices factored out into an interface. This allows EmbeddedMulgaraServer to be compiled without access to servlet jars.


  • Fixed problem where existing temporary directories were resulting in the system thinking that the directory could not be created.
  • Fixed logging FreeLists to no longer give an NPE.


Sep 29, 2011


  • All test classes removed from final jar files.
  • Full sweep of the codebase with the Fortify utility to check for problems.
  • Added generics to some classes.
  • All loggers now private static and final.
  • Added hashCode implementation to ObjectNode and Constraint implementations that were missing them.
  • Calling super.finalize on finalized classes.
  • Used the more conventional super.clone to clone classes where it makes sense to do so.
  • Ensure that exeptions do not get pre-empted by new exceptions genereated during a final block.
  • Non-fatal exceptions are rarely dropped silently now. Logging used in almost all cases. Each time this doesn't happen has been justified.
  • More specific exception handling in some places.
  • Changed inappropriate System.out/System.err messages to use the logger instead.
  • Updated immutable fields to final.
  • Removed explicit stack traces from log messages.


  • Fixed some string comparisons which were being made with == instead of .equals().
  • More robust null checking.
  • Checking for results of directory creation, rather than assuming success.
  • Correctly closing all closable resources.


Jul 19, 2011

New Features:

  • Introduced a minimal-dist target for minimizing the packaged class files provided to a binary client.
  • Updated Dublin Core files.
  • Streamed data APIs now support MIME types and preference handling by MIME type.


  • Removed some deprecation and generics warnings.
  • Cleaned up all warnings in the util packages and the MP3 tutorial code.
  • Refactored all mapped files to use a common set of utilities when truncating files and reclaiming memory.
  • Session.setModel now uses URIs instead of graph expressions, since it only accepts single graphs.


  • Rolling back large transactions now correctly truncates the stringpool file.
  • File truncations on mapped files are correctly handled on Windows.
  • OPTIONAL joins with an empty right hand side now handled correctly.
  • Corrected Jetty logging of URIs.
  • ContentHandlerManager now correctly selects an output format instead of always using RDF/XML.


Oct 01, 2010

New Features:

  • Added isEmpty method on internal structures as a more efficient method of testing for empty data structures during query execution.
  • Relational resolver now extracts dates correctly from Oracle databases, which differ from MySQL.
  • Relational resolver now maps SQL types to appropriate XSD literal types, where possible.
  • XA 1.1 string pool now memory mapped and cached, giving much better performance. Read/write access is still available when configured.
  • Added a HybridTuples based on BDB. Not yet integrated due to poor performance.
  • New RDFa content handler. Data can now be loaded from HTML/XHTML pages, or queried directly from the URL.
  • Upgraded to Jetty 7.1.6.


  • Removed some deprecation and generics warnings.
  • Fixed logging output which referred to RDF instead of N3.
  • Added debugging option to web pages. Accessed with a special comment.
  • Added finalizer to StringToLongMap.
  • Added a PrintWriter that can write to two destinations. Useful for debugging.
  • Removed Tomcat Jasper and JSP libs to make way for the ones from Jetty.
  • Removed unneeded warning suppressions.
  • Added the xsd:time type.


  • Graph building with CONSTRUCT fixed to deal with blank nodes correctly.


May 05, 2010

New Features:

  • Large query support via POST.
  • Can now return multiple Answers in a single TQL result document.
  • Framework support for HTTP PATCH requests which may be in SPARQL 1.1.
  • Support for urlify and urlencode flags in database column references in URI patterns for D2R.
  • Supporting d2rq:containsDuplicates in relational resolver.
  • Can now configure the maximum size of HTTP forms (submitted via POST).


  • Improved some logging levels.
  • RemoteAnswerWrapperAnswer is now only generating stack traces in debug mode.
  • Finer grained protection on transactions used in POST operations.
  • Clearer error reporting during web service startup.
  • Unix build script can now target a JVM version.


  • Fixed a lock that was introduced in 2.0.0 which prevented readers while a write was occuring.
  • Tests now being run with the correct memory model.
  • Added delay in tests to give time for service shutdown.
  • Fixed a ClassCastException that could occur when optimizing a filtered contraint.
  • Guarding the parser from attempting to deal with null information.
  • Fixed multiple query operation to correctly close all results (returned or otherwise).


February 16, 2010

New Features:

  • Optional joins now comply fully with SPARQL algebra.
  • Filter constraints can now be out of order, as required by SPARQL.
  • Tests now run on Windows 7.
  • Operations on RMI Connections can now be cancelled. This introduced execute and cancel methods to Connection, deprecating getSession. This ability is now an option the configuration files.
  • File blocks are now recycled, improving performance. (Contributed by Benjamin Armintor).
  • Memory buffers allocated for file access can now come off the heap (contributed by Benjamin Armintor), using the mulgara.xa.memoryType system property.


  • New utility methods for developers working with Tuples.
  • Removed several uses of File.toURL (which is deprecated).


  • TQL responses over HTTP now correctly close Answers, removing error logs on the server.
  • Fix to transaction state changes when using the TqlAutoInterpreter.
  • Correctly dealing with empty SPARQL patterns in conjunctions and unions, particularly when filtered.
  • Fixed issue with initializing the known graphs for wildcard graph queries on XA11.
  • Fixed failures in JXUnit tests on Windows due to EOL characters.
  • Updated maximum heap size for tests on Windows, to match Unix-style OSes.


December 17, 2009

New Features:

  • Added the complete set of scalar function extensions available in the Jena ARQ extensions. Also added indexOf, lastIndexOf, titleCase and trim from TopQuadrant.


  • Fixed a regression bug, introduced in 2.1.5, where nested OPTIONAL operations were mangled.
  • Now accepting 0 argument functions. These were not needed before now.


December 11, 2009

New Features:

  • Added NONDISTINCT keyword to TQL. This optional word goes immediately after a SELECT. This inverse of DISTINCT was chosen to permit backward compatibility with Mulgara's default of not returning duplicates.
  • Much more intelligent optimization of queries that include UNION operations.
  • Alias lists now returned in dictionary form (XML/JSON) instead of text.
  • Prefix resolver can now find strings that start with a given string, as well URIs. This is case sensitive.
  • INSERT/SELECT and DELETE/SELECT can now use a ConstructQuery as an internal source.
  • Added SPARQL query capability to the scripted tests. This uses the SPARQL HTTP endpoint.


  • SPARQL now deals with all integral types when a literal integer appears in a query.
  • Correctly dealing with "+" character for numeric literals in SPARQL.
  • N3 parser now handles namespaces in datatypes
  • Fixed ORDER BY in SPARQL to correctly handle ASC and DESC.
  • Correctly handling matches on badly formed numbers.
  • Xalan now included in the default build
  • Fixed JSON encoding of SPARQL results.
  • Fixed graph lists for variable graphs in XA 1.1. These could lose sync from one transaction to the next.
  • Graph expression included when getting the variables used in a GRAPH expression (ConstraintIn).


  • Removed some compile warnings that complained about File.toURL.
  • Empty Tuples are now a debug message, since filters now make this likely.
  • User pages no longer look at stack traces for syntax errors in a query.
  • New toString method on some SPARQL CST elements to assist in debugging.
  • Updated several INFO messages to DEBUG.
  • Fixed license on many files (should have been Apache 2.0, but had been set to OSL). Changes license on other files we had permission to relicense.
  • Bad URIs in RDF/XML now have a better description.
  • Better responses when some, but not all, files fail in a multiple-file upload over HTTP.
  • Updated Apache HTTP and logging libraries.


October 7, 2009

New Features:

  • Now able to load functions from arbitrary XPath function resolvers for use in SPARQL expressions. See the SPARQL Extension page for details.
  • Added EXSLT functions from Xalan.
  • Added new implementations of the SPARQL functions, for completeness.
  • Added a new MulgaraUnsafeFunctionResolver for resolving functions that are not safe for general use. This includes functions called mulgarax:system for executing external processes. See the documentation for the Unsafe Module for details.


  • Changed INFO message in UnorderedProjection to DEBUG.
  • Removed exception chains for the Lucene resolver, as a client without access to Lucene could not instantiate the exception. Added stacktrace information instead.
  • Fixed handling of content from an HTTPS URL.
  • XML and JSON responses from the servlets now use UTF-8 encoding. The code now supports setting the encoding with a default of UTF-8, so this may be included in the HTTP interface in future.
  • Tweaked the weighting of terms considered when choosing the join ordering. This significantly improves some queries.
  • Added permission for MacOSX to access the keychain when using HTTPS.
  • Fixed setting of host information on the ServerInfo class.
  • Prevented unnecessary xml files from being included when building jar files.
  • Graph URIs are no longer canonicalized if they are not in the RMI scheme. The one exception to this is for the system graph.


  • Added generics and serialization IDs to some classes.
  • Removed unused variables from Lucene code.
  • Moved stack traces from FreeList phase construction and into "use". This is not so easily traced, but follows actual usage.
  • Removed stack traces from the TripleAVLFile to save on memory.


August 17, 2009

New Features:

  • New Jena interface from Andy Seaborne's Jena-Mulgara bridge. This is functional but needs more work on efficiency.
  • Added variable assignment to SPARQL, using Jena's LET syntax.
  • User provided configuration files now supplement the system defaults, so only fields of interest need be included.
  • Added datatypes and language codes to RLog literals.
  • Rules can now generate multiple statements.
  • Added several new query optimization paths, though these will only be enabled by default in the next version.


  • Correctly escaping entities in XML results.
  • Removed call to optimize the Lucene indexes on every commit. This speeds Lucene writing considerably.
  • Changed optimizer to use expected row counts rather than worst-case values.
  • Added setIO permission to the policy for use with Jetty.
  • Added modifyThread permission to the policy file.
  • Added escapes to literal strings in JSON results.
  • Fixed an occasional NPE in ServerInfo due to incorrectly testing the wrong field.
  • Enabled several query optimizations that had been coded and tested but not enabled.
  • Added help text for the EXPORT command.
  • Added quotes to build script to allow for paths containing spaces.
  • Added the base URI to form submissions in the WebUI. This fixes a problem in Tomcat deployments.
  • Building the server URI using the String constructor, rather than the parameterized constructor. This allows strange hostnames to get through.


  • Added generics to several classes.
  • Reduced output by moving messages from INFO to DEBUG.
  • Removed references to unused libraries in the build.


June 10, 2009

New Features:

  • A preliminary SWRL parser for the Krule engine. It does not yet support functions.
  • Rule loaders are now plugable, allowing several rule loaders to coexist.
  • Can now set the default graph as a command line option or system property.
  • Automatically creates the default graph on startup.
  • Allow rules to apply to a complex graph expression, and not just a single graph.
  • The TQL endpoint can now accept several commands in a single request. The unencoded command list is separated with ; characters. The operations are all wrapped in a single transaction, and will be wound back if an operations fails. Attempts to manually leave a transaction open are prevented.
  • Centralized server info, and created a common utility for accessing it regardless of the classpath.


  • Fixed longstanding issue with the Jena ARP parser using Java Strings as an array of UTF-8 bytes, instead of storing data in unicode characters. This has no effect for ASCII but gave bad escape sequences for other data.
  • Mime types are now resilient to bad parameters.
  • The SPARQL protocol can now set the graphs in a query, and not just provide a default to use when no FROM clause is specified.
  • Fixed JSON results for queries that were not a CONSTRUCT query.
  • Fixed triggering direction of RLog rules.
  • Fixed EOL style for lots of files in Subversion.
  • Fixed the relative paths for the Tutorial Servlet.
  • Calling beforeFirst() in Krule parsing. It had no impact in this case, but was incorrect as it was.
  • Fixed a major bug with the temporary string pool where references to the permanent string pool were being returned (positive numbers instead of negative, which indicated "temporary").
  • Fixed property lists for blank nodes in SPARQL parser.
  • Fixed the = operator in SPARQL Filters where it would only accept numbers.
  • Fixed SPARQL typed literal handling to correctly preserve the type, and not try to promote it to a common supertype.


  • Added generics to several classes.
  • Removed warnings with several new serialization IDs, and removing unused imports and properties.
  • General cleanup of warnings and formatting.
  • Merged the Rules module into the Query module. Rules are a fundamental operation and need to be properly integrated to correctly handle co-dependencies.
  • Removed graph XOR operations from the TQL grammar as it was never implemented.
  • Removed unused alias maps from Krule.
  • Added a missing call to get an object from certain types of answers.
  • Disable keystroke logging in the CLI application.
  • Added some error logging to show up when Eclipse gets object references wrong during debugging.


April 23, 2009


  • Configured SPARQL and TQL servlets to correctly start in a standard web deployment like Tomcat.
  • Added the Xerces jar to the full WAR file. This is not contained in Tomcat and is needed for SAX parsing of XML.


April 22, 2009

New Features:

  • XA 1.1 is now the default statement index.
  • Integrated the RLog parser.
  • Rules engine now does consistency tests. This is supported in RLog.
  • Added a new RLog output content handler for writing RLog files from Krule.
  • Added <prefix> and <import> directives to RLog.
  • Updated Trove to 2.0.4. Now using Generics.
  • RDFS tests on Krule are now all duplicated to test RLog.
  • Added a database initiator, the SPARQL and TQL endpoints, and the WebUI to the WAR distribution.
  • Created the mulgara-core.war distribution. This includes no library dependencies.
  • Added cause chaining when printing stack traces.


  • Fixed the javadoc build to no longer trigger the Javadoc bug (reported to Sun as bug 5082928).
  • REST methods returning correct HTTP codes.
  • Updated the xml-api library in the Eclipse path.
  • Fixed a problem when cloning Answers that could lead to an NPE (contributed by David Smith).
  • HTTP ports set on the command line are no longer ignored.
  • Fixed by-value inequality tests for numeric literals.
  • Numeric literals now use the correct numeric types, and not always floating point.
  • SPARQL functions can now return numeric results.
  • Lucene indexer now handling constraints with no variables correctly.
  • Fixed NPE when closing answers for sub-queries.
  • Allow comparisons between non-numeric types in SPARQL.
  • Fixed comparison failures to not throw type errors for most literal types, and do numeric conversions where required.
  • The xsd:Decimal type has been updated to use BigDecimal instead of Long.
  • Fixed SPARQL expressions to share context no matter how arbitrarily complex they are.
  • Fixed the WAR distribution, including making the WebUI flexible enough to handle multiple deployment configurations.
  • Updated servlets to find the database in one of several ways.
  • Proper handling relative URIs.


  • Removed Javadoc warnings.
  • Added generics to several classes.
  • String escaping now in the utilities package.
  • Removed warnings with several new serialization IDs, and removing unused imports and properties.
  • General cleanup of warnings and formatting.
  • Increased heap space for JXUnit tests and JAvadoc generation.
  • Some renaming of "model" to "graph".
  • Added some modern "for" loops to replace iterator loops.
  • Added a new Closable interface for anything that can be closed.


February 28, 2009

This is the final release which uses XA1 as the default statement store. Future releases will use XA 1.1.

New Features:

  • Port 80 can now be configured as a listening port (this was previously prevented).
  • A new read-only SPARQL access point. This defaults to port 8081. Use a firewall to open this up for public access.
  • TQL and SPARQL now allow relative URIs in the queries, and not just for graph names.
  • Jetty (the internal HTTP server) can now log to Log4J.
  • Exporting a graph can now be written in NTriples. This is selected if the filename ends with .n3, .nt or .ttl.
  • The SPARQL endpoint is now in the WAR file. This has not been fully tested, so we'd like feedback.
  • Graphs and triples can now be created with PUT and DELETE operations in HTTP on the SPARQL and TQL endpoints.
  • The number of threads available to Jetty is now configurable.


  • SPARQL regular expressions no longer have Null Pointer exceptions when given no flags.
  • SPARQL regular expressions now conform to XPath and not Java. This is significant, as Java regular expressions must match the entire expression to succeed, while XPath will only do this if requested.
  • CONSTRUCT queries now accept templates with multiples of 3 elements, and not just 3 elements.
  • Fixed a performance bug in ordering results.
  • Fixed potential thread starvation during large write operations.
  • Better lazy evaluation in the Lucene resolver.
  • Fixed blank node import bug in the MP3 demo handler.
  • Now correctly handling MIME content type of data uploaded on HTTP.
  • MIME content type being set on returned data. It used to always be application/rdf+xml.
  • Fixed a problem where the Jetty configuration was not being referred to correctly.
  • Fixed an issue where getting the MIME type on HTTP connections would close the connection.
  • Correctly closing HTTP connections, reducing warnings in the logs.
  • Fixed unordered projections to not ask about duplicates when adding columns. This improves the speed of this operation by 20%.
  • Fixed blank node allocation in N3 imports so that node re-use will correctly use the same node.
  • Parsing language tags correctly in N3.
  • Fixed the calculation of the upper bound of Lucene results.
  • Java MimeType class now available on systems that do not supply it by default.
  • Database host name aliases are no longer logged until they are fully set up.
  • Fixed a recursion bug for absolute graph URIs that don't exist, when the URI refers to the current server.
  • Fixed a bug where the wrong class constructor could be selected when using reflection.
  • Respecting the "disabled" flag on Jetty configurations.
  • Fixed an upload bug on the HTTP endpoints where it attempted to run a non-existent query at the same time.
  • Resetting variable name generation when executing multiple queries in TQL.
  • Flushing output to the console after executing commands in the JLine command line shell.


  • Lots of new generics and import warnings removed.
  • Improved exception reporting.
  • Improved error reporting in the WebUI.
  • Reporting useful URIs when data is provided on a stream, via HTTP or other mechanisms.
  • The port for Jetty services is now optional.
  • Using variables for Xerces libraries when building, rather than hard-coded paths.
  • Refactored HTTP output type enumeration to separate answer formats from graph formats, making future output type definitions easier to add.
  • Updated to Xerces 2.9.1. This has no effect on the code we use, but is keeping us up to date.

Posted by Paula on February 28, 2009



January 31, 2009

This release introduces the XA 1.1 updates to the statement store, accompanying the String Pool updates from 2.0.6.

New Features:

  • Initial release of the XA 1.1 statement store. This is not the default, but can be enabled in the mulgara-config.xml file. A binary download with this configuration is also provided.
  • More informative error messages at the user level.
  • N3 parser now handling Turtle. This includes: a, =, lists, is/of, paths.
  • Lazy evaluation in the new Lucene resolver.
  • Better transaction handling in Lucene resolver.
  • Now able to get Lucene queries from other graphs.
  • Lucene resolver now handles variables in the object position, allowing exports from Lucene graphs.
  • SPARQL now permits relative URIs in some cases. This is useful for referring to <#>.
  • CONSTRUCT queries in the HTTP interface now create RDF/XML or N3 output.
  • HTTP interface now chooses output format based on the Accept header, unless a format parameter is used. Formats include: rdfxml, n3, xml, json.


  • Fixed local URI creation when canonicalizing a graph URI.
  • Fixed reports of when Rules cannot be loaded.
  • URI references now hashing correctly for the Sesame API.
  • Fixed a deadlock that occurred during shutdown when the temp directory went away.
  • Lucene resolver allows literals in the subject position again.
  • Lucene hit count is now being cloned properly.
  • Fixed an index check in Union/Or that could lead to an exception.
  • Removed duplicate close() in RDF/XML Writer.
  • Fixed alias expansion to not drop fragments in URIs.


  • Removed numerous warnings in the query module, caused by redundant directives and missing generics parameters.
  • Debug logging in rules now only called during debugging.
  • No longer wrapping local data sources in remote access classes.
  • Added the OWL vocabulary to JRDF.
  • JRDF vocabularies are now split into classes and properties.

Posted by Paula on January 31, 2009



December 6, 2008

This release has several new features particularly in the user interfaces, numerous minor bugfixes, and wide ranging cleanups in the source code.

New Features:

  • WebUI can now upload a file into a graph.
  • A separate tutorial servlet based at "/tutorial". WebUI no longer has the Tutorial included.
  • WebUI now sets a blank default graph to the most recently used.
  • Support for "parameterized" URIs. These use the URL form of <rmi://hostname/servername> followed by a query containing HTTP encoded URI as a graph parameter.
  • Now supports relative URIs. This means that the system graph can be referred to as <#>.
  • A new command line shell to replace the Swing-based one. Includes command line history and tabbed completion. The Swing shell can still be accessed with the -gui switch.
  • Added support for returning the score from Lucene in full text queries. New predicates of mulgara:search and mulgara:score.
  • Caching Sessions and factories across transactions.
  • Caching for Lucene queries.


  • Descriptive error when a local modifier is used on load/export and backup/restore on non-client-server deployments.
  • WebUI no longer needs TQL commands to finish with a semicolon.
  • WebUI no longer gives stack traces on error. Now it gives the error message on a 400 screen.
  • Fixed comparator to not treat numbers followed by f or d as numbers.
  • Eliminated unnecessary flush for mapped block and int files. This has major performance implications for doing a commit on Windows.
  • Fixed overflow bug in calculating the upper bound for a query.
  • Discarding new Lucene indexes in rollback.
  • Properly cleaning up after a failure when parsing TQL syntax.
  • Now recovering from recoverable errors from the ARP parser.
  • Added client-jrdf back into core-dist.
  • Plugged a memory leak in the distributed resolver.
  • Fixed XID format in logs.
  • Fixed transaction rollbacks and exception handling to only remove transaction when warranted.
  • Transaction marked TMFAIL/TMSUCCESS is now ended without resuming, as per JTA spec.
  • Correctly handling RMFAIL and NOTA in MultiXAResource.forget().
  • Added transaction support to the distributed resolver.
  • Distributed resolver handles null server URIs which occurs in some configurations.
  • Changed some INFO messages to DEBUG.
  • Fixed Lucene resolver bug where empty literal could be inserted but not deleted.


  • Logging transaction timeouts.
  • References to "Model" in the code have finally been updated to "Graph". URIs have not been changed yet to maintain backward compatibility.
  • Corrected and updated licenses on code that can be changed to Apache.
  • Updated Sesame Model library from 2.1 to 2.2.1
  • Fixed a number of warnings, mostly through using generics.
  • Various minor cleanups: code formatting, explicitly importing.
  • Refactored common transaction code.
  • Refactored transaction code for extensibility and general structural improvements.
  • Refactored Symbolic transformations and walk constraints to pull out common functionality.
  • Removed "Deprecated" warnings from the ARP parser.
  • Fixed a build check for javadoc being up to date.
  • Fixed XSD resolver bug which prevented both the subject and predicate of a constraint being literals.

Posted by Paula on December 6, 2008



October 16, 2008

This release fixes an administrative error where the binaries were compiled for the wrong JVM version. This problem appeared in 2.0.5 and 2.0.4.

2.0.6 is also the debut of a number of user interface, programming interface, and storage features. The UI improvements including a SPARQL protocol endpoint for HTTP, and SPARQL support on the WebUI. The storage system now uses 64 fewer files, and scales significantly better on large loads.

New Features:

  • SPARQL Protocol support, with results returned in either JSON or XML format. This is implemented as a servlet.
  • The XA 1.1 Data Pool is now set to the default.
  • Support for backup/restore on XA 1.1.
  • Able to include a set of user-supplied namespace definitions in an exported RDF/XML file. This does not change the actual content of the exported RDF/XML, only its presentation. Available programmatically, or by accessing the namespaces defined with the ALIAS command.
  • The root of the web services now provides a list of links to all registered services.
  • An HTTP endpoint for TQL implemented as a servlet. Provides the same query capabilities as the SPARQL endpoint.
  • RMI objects can now have their ports configured instead of using a system assigned port. Configuration is done by command line argument or in the system properties.
  • Source URIs for backups and destination URIs for restores are now optional in TQL.
  • Lucene resolver is now transaction aware, and implements graph removal.
  • The Web UI now accepts SPARQL queries. The default graph is specified by the Graph field on the page. Note that this UI can use any valid URI for graph names. It does not require URIs of the form rmi://host/server#name.


  • Binary distribution compiled for Java 1.5, and not Java 1.6.
  • Fixed a lack of synchronization when reading from the XA 1.1 Data Pool.
  • The native SPARQL interpreter now supports multiple default graphs.
  • Better exception handling for Transaction objects, which adheres better to the JTA specification.
  • Fixed timezone bugs in the GDate/Time datatypes.
  • Fixed bugs in xsd:base64Binary and xsd:hexBinary which could append extra data.
  • Fixed several edge cases for OPTIONAL joins that led to incorrect results or exceptions.
  • The Web UI now links URIs in results to queries on the appropriate graph.
  • Ordered results now handling negative numbers as numbers and not strings.


  • Scaled back a lot of INFO reports to DEBUG level.
  • Updated Jena from 2.1 to 2.5.6.
  • Updated Lucene from 2.0.0 to 2.4.0. This includes numerous changes to the Lucene resolver.
  • Updated icu4j to icu4j 3.4.
  • Reduced dependency on Jena. Just using the ARP parser now.
  • Converged test classes for tests on ResolverSessions.

Posted by Paula on October 16, 2008



September 5, 2008

This is a minor release to address an issue that came up when building from source on Windows.


  • Removed a symlink that documented javacc as version 4.0. A poorly written task was trying to pick up this link as a real file, which doesn't work on Windows.
  • Fixed the namespace map in the RDF/XML writer so it can't accidentally use a generated URI in an export.


  • Removed unnecessary config files from the mulgara-core distribution.

New Features:

  • Created a cut-down default config file for the mulgara-core distribution.

Posted by Paula on September 5, 2008



September 4, 2008

This is a minor release for new deployment options, better Sesame compatibility, and system cleanup.


  • Fixed the tool, which had fallen behind and wasn't compiling.
  • Allow a server to continue after failing to start a web application.
  • More informative messages when unable to load startup classes.


  • itql has been renamed to querylang. This allows both SPARQL and TQL to share common functionality this package.
  • Removed Sofa and BEEP due to lack of use.
  • Removed the partially completed SPARQL protocol code, after it languished for 3 years.
  • Merged SPARQL code into querylang.
  • Imported the Mulgara-SPARQL library to be a native part of the project.
  • Imported our version of the JRDF library to be a native part of the project.
  • Removed the JSR173 libraries.
  • Removed the WebUI application. This is replaced by the WebQuery application, which has now been moved to the /webui path in the web service.
  • Removed all Barracuda libraries, as this was only used by the WebUI.
  • Flattened all distribution JARs, and removed all dependence on the Bootstrap class. This class acted as a Class Loader for JARs embedded in the main JAR.

New Features:

  • A new build target: raw-dist. This creates mulgara-raw-2.0.4.jar, which contains all the Mulgara files, but no 3rd party libraries. This is similar to the main mulgara-2.0.4.jar without the 3rd party libraries. This should be ideal for deploying everything in an existing environment, where the environment controls 3rd party libraries.
  • Updated the core-dist build target. The resulting mulgara-core-2.0.4.jar is similar to mulgara-raw-2.0.4.jar, but with unnecessary content handlers, resolvers and most network services stripped out.
  • The tool can now do sub-queries and non-query commands.
  • Updated JavaCC to JavaCC 4.0.
  • Updated Activation to Activation 1.1.1.
  • Updated Apache Commons HTTP Client to Commons-Httpclient 3.1.
  • Internal library for streaming query results to XML and JSON. This will be exposed in a servlet in the next release.

Posted by Paula on September 4, 2008



August 29, 2008

This is a minor release for new functionality.


  • Backward compatibility fix for xsd:date objects.

New Features:

  • Identical xsd:date values with different lexical representations are no longer collapsed to the same value. This is for SPARQL conformity. Joins will no longer join on different lexical representations of identical dates. The equality operator in SPARQL filters will provide this functionality.
  • xsd:decimal values can now have decimal places, and different subtypes are no longer collapsed into the same value. See the note on joins for xsd:date.
  • The initial release of the XA 1.1 StringPool/NodePool. This is an incremental improvement over the XA 1 version. It operates similarly to XA 1 for small amounts of data, but Load performance is significantly improved for large data sets. This is not the default StringPool/NodePool, as it does not yet handle backup/restore.
    Use the conf/mulgara-config-x11/xml file to configure this option.
    For architectural details see the description in the wiki.
  • Integrated the JRDF library. This will make this code more apparent for developers, and allow greater flexibility in the use of these interfaces. The non-Apache licensed code was removed.
  • The RIO parser for RDF/XML was removed due to its dependence on LGPL'ed code from JRDF. This module was not used unless Mulgara was explicitly configured for it.

Posted by Paula on August 29, 2008



August 22, 2008

This is a minor release for bug fixes and backward compatibility for previous data files.


  • Removed stack traces from Hybrid Tuples except when debugging. Thanks to Morten Grouleff for this patch.
  • Fixed a problem with concurrent access to the string pool.
  • Added backwards compatibilty for dates stored in systems prior to r1081.
  • Fixed resolver xa-resource activation for externally managed transactions.
  • Added logging of exceptions that occur when running from a query script.

Posted by Paula on August 22, 2008



August 11, 2008

This is a minor release with some feature updates and bug fixes.


  • Fixed comparators for Double values when handling negative numbers. Thanks to David Smith for this fix.
  • Minor improvement to Transaction completion process.
  • Fixed NullPointerException that could occur with the new language tags on literals.
  • More efficient handling of transaction timeouts.
  • Shutdown no longer prints an exception trace when it cannot contact the RMI server. This was a particular problem for computers that went to sleep while a server was running.

New Features:

  • The built in web server can now be disabled with any of the following methods:
    • Update the configuration file in the build (see conf/mulgara-config.xml).
    • Specify -w (or --nohttp) on the command line.
    • Set the system property "mulgara.http.disable".
    Disabling with any of the above methods will override any setting that enables the server.
  • The web server has been updated from Jetty 4.2.19 to Jetty 6.1.11.
  • A new web client user interface is now available. By default this appears at http://localhost:8080/webquery/. This is lighter than the webui and uses the new Connection interface. The old WebUI is now deprecated and will be removed soon.
  • Major cleanup of code in EmbeddedMulgaraServer. More will be done, but it should be more transparent to developers who look at this code.

Posted by Paula on August 11, 2008



July 23, 2008

This is the official release of version 2.0.0. This release is feature compatible with the 2.0.0-BETA release.

Fixes include:

  • Better synchronization at the server end. This avoids infrequent exceptions encountered particularly when multiple client threads try to access the same connection.
  • Support for idle and transaction timeouts.
  • Support for literals with known datatypes that can't be parsed into their declared data type.
  • Decimals may now start with a "+" character.
  • Now accepting all valid language codes on untyped literals.
  • Supporting time offsets for literals of type xsd:date.
  • Supporting DESCRIBE queries. CONSTRUCT and ASK should work but need more testing.
  • Removed all object pooling. This enables JVMs from version 5 and up to perform better memory management. The benefits are more apparent in Java 6.

Posted by Paula on July 23, 2008


v2.0.0 BETA

July 2, 2008

This release fixes a few of the known problems in the ALPHA release, and should be feature-stable for the final release. The final release is expected by mid-July.

Fixes include:

  • Variables repeated in a single constraint (or Triple Pattern) are always handled correctly now.
  • A new command called export has been introduced for exporting a graph to RDF/XML. This relieves the backup command from having to handle exporting graphs as well as backing up the database.
  • Unreferenced Sessions now being cleaned up and race condition fixed on Session close.
  • Fixed issues for multithreaded clients using the Connection factory.
  • The Relational resolver now permits variable graphs, though these are ignored.
  • Better shutdown handling.
  • The NodeType resolver now uses a type of mulgara:UriReference, which is the correct capitalization for a type.

New features include:

  • The XSD Resolver now has a default graph of sys:xsd.
  • xsd:dateTime values now have their original lexical form preserved, rather than being canonicalized.
  • Preliminary framework for ASK, CONSTRUCT and DESCRIBE queries. Note: This is not yet working, and will still fail for many queries.
  • Graph names may now be relative URIs.

Posted by Paula on July 2, 2008


v2.0 ALPHA

May 15, 2008

This release establishes several important new features for the upcoming 2.0 release.

New features include:

  • Preliminary SPARQL Query support. See below for details. Note that this is NOT the new Sesame-Mulgara bridge that also provides a SPARQL interface to a Mulgara data store.
  • A new Connection API.
  • Virtual graphs (created by Resolvers) may now be created automatically. Built in system functions are all provided automatically in graphs named with the sys scheme. Default system graphs are:
    • sys:null An always empty graph.
    • sys:prefix Returns statements relating to the namespaces on URIs.
    • sys:type Returns statements on the RDF node type for a variable (literal, URI reference, or blank node).
  • Arbitrary graph names. Using the new Connection API, graph names no longer have to be in the rmi:// scheme.
  • Language tagging for untyped literals. This is an important feature for RDF compliance.


SPARQL queries can now be issued on the new Connection API. This is currently a programmatic interface, with SPARQL protocol support to be implemented shortly.

Not all features are implemented yet, and some new internal functionality has yet to be exposed in SPARQL. Most of these features will be in place for the 2.0.0 release:

  • Only SELECT queries are working. CONSTRUCT, ASK and DESCRIBE are under construction.
  • Literals of type xsd:dateTime are currently canonicalized to UTC.
  • Answers never have duplicates. SPARQL requires that duplicates remain unless removed with DISTINCT.
  • ORDER BY will only sort by variables, and not by arbitrary expressions.
  • Regular expressions are handled by Java and not an XPath compliant library.
  • All IRIs are treated as URIs
  • Basic graph patterns with repeated variables are not available in graphs defined with a variable.

Posted by Paula on May 15, 2008


April 6, 2008

This is a minor update to fix a couple of bugs discovered in 1.2.

Bug Fixes:

  • Restore of a backup file from a client machine threw an exception based on data being uncompressed before being sent across the wire.
  • Backups were inverting remote/local modifiers.
  • UI prompt started as iTQL, and changed to TQL.

Posted by Paula on April 6, 2008


April 3, 2008

This is the last significant release before v2.0. It contains several new features, and numerous bug fixes. All users are recommended to upgrade to this version.

New features:

  • Implementation of the Java Transaction Architecture (JTA). This permits multiple simultaneous read transactions, and correct ACID compliance for the write transaction. See the docs/site-src/design/JTAInterface.txt file in the distribution for details.
  • A new Connection interface. When using this interface, graphs can be named with any valid URI, and are not restricted to the RMI scheme.
  • The "alias" command can now be used to get a list of current aliases.
  • Updates to the Axis libraries, giving better SOAP performance.

Updates and Bug Fixes:

  • Fixed Backup operations being performed occasionally in the wrong phase. This led to the wrong data being backed up.
  • Iimproved loading code to remove redundant operations. This makes for faster loads.
  • Allow local: schema for location-based graph names.
  • Fixed transaction handling in the "apply" command when running rules.
  • Better robustness in the face of bad rule data.
  • Fixed the option to set the RMI port configuration.
  • Fixed blank node allocation when loading RDF data from N3.
  • Removed "exclude" keyword, as the semantics of this are not useful, and are often misleading.
  • Fixed TQL insertions to not ignore empty URIs between <> characters.
  • Added SKOS and FOAF namespaces to the default aliases.

Posted by Paula on April 3, 2008


August 19, 2006

This is the initial release of Mulgara.

The initial release is a fork from Kowari v1.1, as of August 1, 2005. None of Kowari's later features are available here, but are scheduled for reimplementation shortly. This is to avoid any appearance of using code previously (but not currently) contested by Northrop Grumman Corporation.

Points of note for this first release:

  • Mulgara has been upgraded to use Java 1.5. It will no longer build or run on Java 1.4 or below.
  • The model renaming feature from the latest version of Kowari is not included.
  • Jena libraries are still in use.
  • Mulgara has been upgraded to use the latest versions of Ant, Lucene, and JRDF.

Posted by Paula on August 19, 2006







W3C Validation of XHTMLW3C Validation of CSSSFLC Support