Version 2 History
Changes from 2.2.4 to 2.2.5
Improved support for EBV invalid literals.
Made available simple automatic dataset (FROM and FROM NAMED) fetching, using twinql's built-in dataset hooks.
Improved support for
*sparql-query-planner*so that it is possible to use alternative planners.
Increased the efficiency of certain LIMIT queries.
Added a new
Triple-stores can be set as read-only using the read-only-p slot. These stores will not update the disk after they are opened. It is still not possible to open a triple-store in full read-only mode.
Many improvements were made in the RDFS++ reasoner including bug fixes and additional reasoning capabilities.
Fixed db-room and added db-room-list to get information about how much space a triple-store is taking on disk and in-memory.
Fixed a bug in create-triple-store that occurred when trying to use :if-exists :open.
Cleanup messages can be suppressed using the new property
We have added getters and setters for
Made several improvements in timeout-handling and improved the error messages so that they are easier to understand.
we have added methods getSyncEveryTime and setSyncEveryTime to allow applications to control when the triple store is synchronized in addStatement and addStatements calls
Changes from 2.2.3 to 2.2.4
SPARQL / twinql
Update to the latest SPARQL XML results format.
SPARQL Protocol servers now have a base-uri field. See the SPARQL Protocol Server Guide for details.
The SPARQL Protocol server now accepts requests with no specified Accept: header.
Many speed improvements:
- Queries with DISTINCT or ORDER BY clauses are now significantly faster,
- FILTERs operating on numeric types,
- Other, general, performance improvements,
Minor parser improvements.
Lisp / AllegroGraph Core
- Significantly increases the speed of triple printing which should also increase the speed of transferring data over a socket.
Both loadRDF() and loadNTriples() correctly accept a context argument.
Updated getUnmergedCount(), getIndexFlavors() and Triple.getContextLabel() to avoid potential exceptions.
SPARQL / twinql
Some non-matching OPTIONAL patterns were being mis-interpreted.
Minor fix to dataset handling in certain situations.
Changes from 2.2.2 to 2.2.3
Ensure that version 2.2.1 databases can be read.
Minor fix to Java loadRDF() method.
Changes from 2.2.1 to 2.2.2
Freetext indexes can now be used from SPARQL via the magic predicates: fti:match and fti:matchExpression (assuming, of course, that fti is the namespace
<http://franz.com/ns/allegrograph/2.2/textindex/>.). See the freetext-tutorial for details.
The reasoner can now answer queries where none of subject, predicate and object are given (i.e., tell me everything you know and everything you can infer).
The load-rdf/xml function has a new parameter, :use-rapper-p, that can be used to cause AllegroGraph to call out to rapper for parsing rather than relying on the internal parser. (Note that this has been available since 2.2.1 but was not included in that version's change history).
Sesame HTTP server:
XML transaction format now allows N-Triples notation or a simple URI label inside a
An XML transaction containing a
element with a datatype attribute was causing the transaction to fail. This problem is corrected.
The Java loadRDF() method now works correctly both with and without a context argument.
Some inconsistencies in the freetext indexer's string downcasing have been corrected.
The reasoner was not re-setting its cache of available subjects which could cause queries to fail whenever new subjects were added after certain reasoning queries were performed.
There have been several minor N-Triples parser fixes especially as regards blank node handling.
Changes from 2.2 to 2.2.1
The reasoner is now much faster when dealing with triple-stores containing thousand (or even hundreds of thousands) of rdfs:subClassOf relations.
The Java Updater program no longer produces spurious error messages when applying patches
The Java server now loads patches more reliably.
The N-Triples printer now prints escape characters (e.g., control characters like #\Newline and Unicode characters) correctly.
We've added some minor optimizations in the N-Triples parser.
Improved the behavior of SPARQL's DESCRIBE verb.
We've corrected several typos in the documentation.
qfunctor could incorrectly act like
qsand return results from the reasoner. This can no longer occur.
The RDF/XML serializer no longer becomes confused when given duplicate namespace definitions
The RDF/XML serialize now prints literals correctly in all known cases.
The reasoner was not correctly returning all possible results from the transitive application of rdfs:subClassOf rules. Now it does.
The Lisp Client function
create-literalfunction was creating invalid encoded literals; this has been fixed.
AllegroGraph's SPARQL query engine (twinql) was not choosing the correct comparison function when working with encoded UPIs (e.g., for range queries.). This has been corrected.
The free-text indexer could generate file system errors in some edge cases. This has been fixed.
Changes from 2.1 to 2.2
Triples and UPI can now be printed in a terse readable format. See enable-print-decoded for details.
There is now a Lisp client API available. It mirrors the Java version of the API.
Get-triples and SPARQL now both work with AllegroGraph's RDFS++ reasoner
AllegroGraph now includes both a TRIX serializer and parser.
Added :allegrograph-2.2 and :allegrograph2 to the features list. In general, each release of AllegroGraph will have three features associated with it: the most general :allegrograph, the major-version specific :allegrographN and the version-specific :allegrograph-N.M.
get-triples now supports the indexed-triples-only-p keyword and the :use-reasoner argument. The former causes it to perform queries over only indexed triples whereas the later turns on reasoning for a single call.
AllegroGraph indices are not opened until necessary; Index chunks are better managed to reduce the chance of running out of file handles even when querying, loading and indexing simultaneously.
Freetext indexing: AllegroGraph can now index the text in triple-objects and perform very fast queries over the indices.
!!-reader macro was removed (though this actually occurred way during the transition from 1.x to 2.x). Use the
!-reader macro in all cases
??operator of Allegro Prolog greatly simplifies the embedding of Lisp forms and variables in Prolog clauses. This feature is part of Prolog 1.0.4 (8.0 patch prolog.004 or 8.1 patch prolog.001).
upip - is something a UPI
upi-type-code - returns the 'type-code' of a UPI
load-rdf/xml* - load multiple RDF/XML files
load-rdf/xml-from-string - load triples from a string treating it as if it is an RDF/XML data-set
get-triple - search for a single triple and return it
triple-exists-p - return
tif a triple exists and
find-triple-store - lookup a triple-store by name
blank-node-p - return true if a UPI is a blank node
with-blank-nodes - create one or more blank nodes and execute the body of this macro with them bound.
merge-new-triples - Merge small index chunks without trying to merge everything into one single index; this can be much more efficient depending on your data processing needs.
added merge-chunk-count-limit. If set, then at most this many chunks will be merged in a single merge operation.
API Changes and Improvements
Close-triple-store: changed the default of
Create-triple-store: change default value of
delete-triple-store: can now take pathnames
Functions that take a triple-store pathname (e.g., Create-triple-store) now require that it be a non-directory path (i.e., that it does not end in a slash). For example,
(create-triple-store "temporary-files/test/")will generate an error in AllegroGraph 2.2.
load-rdf/xml -- added
The agraph-manager period has been reduced from 60 down to 2 to help it keep the triple-stores running optimally.
Changed signature of upi->value to match other functions in the public API. The old version used an &optional; the new one uses &key.
Changed threshold based indexing so that it occurs based on the number of unindexed triples rather than on the sum of the total number of unindexed triples per index flavor.
Made future-parts easier to use: they no longer require an open triple-store until a part must actually by interned.
improve N-Triple parsing and escape handling
Corrected a bug in get-triple-by-id that left it confused when trying to retrieve a triple that had not yet been synchronized.
Removed an unnecessary Lisp cleanup function that was prevented AllegroGraph from terminating nicely when it received an interrupt.
fixed several small errors in AllegroGraph's cluster code that could cause some remote jobs to fail.
Numerous other small improvements and fixes.
twinql now supports a complete remote querying interface.
SPARQL queries can now fully exploit AllegroGraph's RDFS++ reasoner.
We have implemented SOP memoization which allows many queries to run much more quickly
fixed minor bugs in twinql's datetime comparison routines
new SPARQL special variable:
sparql.sop:*optimize-sparql-filter-application-p*. If true, constant expressions will be collapsed. Set to false if you need constant functions to be executed during query runtime.
sparql:*dataset-load-function*to provide hooks into the FROM clause
The RDFS++ reasoner now support
owl:hasValuerestrictions (this is not fully documented, please contact Franz if you have questions)
rdfs:subClassOfnow correctly handle transitivity
Queries of the form (q ?s !rdf:type ?o) now correctly find all results.
ValueObjectinstances to be created from
N-Triplesor using the !-notation (i.e., Literal, Node and BlankNode instances).
twinqlAsk()calls were throwing an exception in the server
added the method
selectSingleValues()which is like
selectValues()but the query is restricted to a single result variable. It returns a one-dimensional array of results
added per-triple-store namespace methods to AllegroGraph class:
hasStatement()with wild card was throwing error
getSubjectLabel()and friends were failing or giving incorrect results for some Cursor instances
getParts()was throwing exception if argument was a BlankNode
loadRDF()is available once again.
If desired both
loadNtriples()can now return the UPI of the graph used during the load.
Changes from 2.0.1 to 2.1
We have improved AllegroGraph's string dictionary usage and the speed of its internal hashing Algorithms. These improve performance on all platforms but allow for dramatic speed increases under 32-bit Windows. Unfortunately, these changes mean that triple-stores built with previous versions of AllegroGraph will no longer operate with AllegroGraph 2.1. If you have triple-stores that you would like to migrate from an earlier version to version 2.1 (rather than rebuilding your stores from your original data), you will need to export your data and import it into the new format. If you find yourself in this situation, please contact support@franz for assistance before you begin the process.
- Created a much improved cross-platform, non-consing hash algorithm that both increases overall performance and dramatically improves performance on 32-bit Windows.
- Improved the storage of strings from typed literals and literals with language encoding.
- (Windows) Triple-stores can now be stored on any drive-letter (regardless of the location of the AllegroGraph executable).
- Fixed a serious bug that caused merged indices to be highly unreliable. This bug was introduced in version 2.0.1. Note that we have also improved our internal test suite so that this will not occur again.
Multiple simultaneous Java and/or HTTP connections to the same triple store are allowed. Each client has exclusive access during one operation:
- In Java an operation is defined by each of the API methods. Thus the array methods offer a primitive form of transaction.
- In HTTP, each request is one operation.
- Bulk loading operations may lock out other clients for extended periods.
- There is no concept of ownership or restricted access, therefore clients must exercise some self-discipline.
- New parseNTriples can parse strings in N-Triple format and add the triples to a triple-store
export-to-sesame. This parameter specifies how long an idle triple store should remain open.
idle-lifearguments to start-agj-server.
- The timeout parameter specifies how many seconds a client will wait for a busy triple store before signaling an error.
- The idle-life parameter specifies how many minutes an idle triple store will remain open.
Added new command line arguments to the AllegroGraphJavaServer executable.
- The triple:
-hinitallow a single server to work with either Java, HTTP or both simultaneously.
- The pair
idle-lifeparameters set the timeout and idle-life of the server and triple-stores respectively
addStatement(Object,Object,Object,Object)was ignoring the fourth, context (or graph), argument. This problem has been corrected.
Changes from 2.0 to 2.0.1
- AllegroGraph now runs on the Windows platform (both 32 bit and 64 bit windows are supported).
- The API of
deleted-triple-phave changed to match that of the rest of the public functions
- The functions
create-triple-storeall accept logical-pathnames for their name parameter in addition to strings.
load-ntriples-from-stringto read a string containing one or more triples in N-Triple format.
- You can now use
:unmerged-chunk-count-thresholdas parameters to
value->upifunction does a better job of converting strings into typed UPIs
- Exported and documented the functions
- Added the macro
iterate-cursorand the function
- AllegroGraph indexing and merging is significantly faster that in 2.0
SPARQL / twinql improvements
- Added a SPARQL protocol server
- Many fixes and performance enhancements including the optional memoization of SOP functions and low-level improvements
- Added summary statistics such as MEDIAN, MODE, SUM and so on as an extension to SPARQL (you must set
:extendedp tto use these in a SPARQL query.)
- DISTINCT + LIMIT + OFFSET are now completely streaming; only ordered queries are not
- Minor fixes for specification conformance in parsing, DISTINCT, and DESCRIBE *.
query->verbfunction to return the verb (e.g., :select) from a query.
- To improve their performance, constant queries are parsed at compile-time rather than run-time.
- The N-Triples parser took an overly strict view of angle bracket terminators (the grammar specifies that any character is permitted between the <>s, including other <>s). Fixed.
Get-triple-by-idcould return the wrong triple if a triple-store used both encoded and string representations of the same triple. Fixed.
- Many other bug fixes
Removed or deprecated functionality
- The function
property-mappinghas been deprecated in favor of
- The function
upi->stringhas been removed (use
part->stringin its place)
- Because its behavior was ambiguous,
load-ntriplesno longer parses strings in N-Triple format. Use
load-ntriplesto read N-Triples from files or streams and use
load-ntriples-from-stringto read N-Triples from a string.
- The function
do-cursorhas been deprecated in favor of the new function
map-cursorand the new macro
- (General) The encodings for :short and :int and for :unsigned-short and :unsigned-int are reversed. Shorts should encode 16-bits of information and ints should encode 32 but in AllegroGraph 2.0.1, Shorts encode 32 and ints encode 16.
- (Windows) AllegroGraph can be confused about a triple-store location if the program is run on a different drive than that of the triple-store itself.
- (Java) The method AllegroGraph.addStatement(Object, Object, Object, Object) always uses null for the fourth, context, argument. The workaround is to call AllegroGraph.addStatements(Object, Object, Object, Object) instead.
Java Specific Changes
New functions and improvements
selectStatements()methods and deprecated the
valueNames()to retrieve the variable names and order of a SPARQL query
- Added method
twinqlCount()that returns the number of results in the query
- Added context argument to
loadNtriples()to support named-graphs.
- Added new class
- Added additional signatures to
hasStatement()to enable reasoning in queries
- Added a wait argument to the indexing methods
- Added method
AllegroGraph.serverTrace()to allow selective tracing by triple store
- Added method
AllegroGraphConnection.interrupt()to allow Java application to cancel a runaway operation
- Added method
AllegroGraphConnection.isBusy()to query state of connection
moreValues()method now always returns the full count and never an estimate
twinqlSelect()returns an array that can be refilled using
twinqlFind()is now more efficient
- Correct error that caused
getNamespaces()to return null
- Correct error that caused exception in
Changes from 1.2.6 to 2.0
Major improvements and changes
- Faster, more memory efficient string-table dictionaries.
- Full support for named-graphs.
- Sesame 2.0 HTTP Interface.
- Improved SPARQL query engine.
- All the parts of a triple (subject, predicate, object and graph) can have a range of values encoded in them directly (by-passing the string dictionaries). These encoded-triples provide support for very fast range queries.
- Type-mappings can be added to a triple-store to automatically create encoded-triples as new triples are loaded into the store.
- New patent-pending triple format using hashed Unique Part Identifiers (UPIs) (patent-pending).
- Greatly optimized indexing algorithms.
- RDFS++ Reasoner is now fully integrated with AllegroGraph.
- Automatic Triple-store index management.
- Greatly improved Java integration including support for all of the many new capabilities.
- Greatly improved concurrency support.
- Support for multi-CPU clusters (on both single multi-CPU / multi-core machines or multiple-machines over a network) for indexing.
- Improved tutorials and documentation.
You can control the indices used by each triple-store:
- At creation-time, you can use the
- You can use
drop-indicesafter a triple-store has been created.
- At creation-time, you can use the
ag-property-names) to help manage triple-store behavior, and properties can be saved and loaded between sessions.
- Future-parts and the !-reader have been optimized and improved:
- in addition to deferred UPI computation, they also provide delayed namespace resolution, and
- functions like
The AllegroGraph RDFS++ reasoner is now fully integrated with each triple-store:
- reasoning data structures are automatically maintained, and
- reasoning data structures are private to each triple-store so that reasoning can be used on multiple stores simultaneously.
The following functions are deprecated:
API improvements and additions
- There are many new functions to manage AllegroGraph as a whole and each triple-store in particular.
- Triple-store functions like
open-triple-store, and friends now accept complete pathnames to specify a triple-store location instead of requiring you to separate the name from the directory.
- You can use
:if-existskeyword parameter to
create-triple-store. This will cause
create-triple-storeto open the store if it already exists.
- Added an
open-triple-store. It can take on the values
- Added a
default-graphparameter to load-ntriples.
Load-ntriplesreturns, as multiple-values, the number of triples loaded and the default-graph used.
- Added a
streamargument to print-triples.
- Aside from support for range queries,
get-triples-listcan now take optional
filtersto limit the triples returned.
- The family of
selectfunctions can now produce arbitrary templates rather than only lists of triples.
The AllegroGraph Java API in Version 2.0 is similar to the API in Version 1.2, but many method signatures have changed because the implementation of the triple store has been revised extensively. All 1.2 application programs need to be inspected carefully and revised accordingly.
Major change summary:
- All methods that accept subject, predicate and object arguments are extended to allow a context argument as well.
- Literal and Node identifiers are UPI instances in AllegroGraph 2.0. These values were Java long numbers in 1.2. Triples are still identified by Java long numbers in 2.0.
- The select() and selectValues() methods are revised to return all results. The results are no longer limited by the setSelectLimit() number.
Version 1.0 History
Changes from 1.2.5 to 1.2.6
- Added the rebuild-indices command
- Added the variables use-reasoner-prototype and verbose-prepare-reasoning to control the use of the reasoner prototype.
- If use-reasoner-prototype is true, then get-triples-list will use the reasoner to return inferred triples (in addition to the usual ground triples).
- Future-parts delay namespace resolution so that future-parts with namespaces can be used more easily in compiled code.
- Future-parts are better documented
- There is a new tutorial on the AllegroGraph reasoner prototype
- Corrected a bug in the reasoner that affected transitive properties.
- Java: Added several methods to AllegorGraphConnection including defaultPollCount(), pollCount(), defaultPollInterval(), pollInterval(), setDefaultPolling(), and setPolling().
- Java: Corrected an unusual case in selectValues() where the results could include a Future-part instead of the usual integer part-numbers.
- The reasoner is better integrated into AllegoGraph
- Added make-tutorial-store to add in testing the AllegroGraph prototype reasoner.
Changes from 1.2.4 to 1.2.5
- Improved triple-store version detection
- Augmented some triple-store functions to allow the use of triple-store names instead of triple-store objects
- Java: improved Java / AllegroGraph API for namespace management
- Java: augment Java / SPARQL interface
- Updated the reasoner prototype to handle transitive-properties and improve sameAs handling.
- Improved the implementation of the !-reader to prevent surprises when working with multiple threads
- Java: added evalInServer() to ease remote support
Changes from 1.2.3 to 1.2.4
- Augmented end of line handling in the RDF/XML importer so that files with Windows, Macintosh, or UNIX style line endings -- or even a mixture of all three -- are optimally parsed.
- Revised resizing of string information that could result in the loss of information about a single string in the triple store with each resize.
Changes from 1.2.2 to 1.2.3
Changes to the Java interface:
- The server code and Java libraries in this version are not compatible with earlier versions. If an older Java library is used with the newer server, an error is signaled in the server and reflected as an exception in the Java code. If the newer Java library is used with an older server, an exception is thrown in the Java code.
- The performance of cursor operations has been improved significantly. As a result, large AllegroGraph databases will open in TopBraid Composer in half the time or better. Applications that iterate through large cursors will see a similar improvement.
- Avoid an error when a null element appears as the first item in a sequence of strings.
Changes from 1.2.1 to 1.2.2
Changes to the Java interface:
- Avoid an error in TopBraid Composer when an AllegroGraph database contains a typed literal with an XML Schema data-type.
- Improve memory handling for large numbers of unique resources.
Changes from 1.2.0 to 1.2.1
Changes to the Java interface:
- All errors in the server are now reflected as Java exceptions in the Java application.
- Avoid a divide by zero exception when selectValues returns an empty array.
- Avoid an error that produced an incorrect triple as the last cached result of a Cursor instance.
- New command line arguments to AllegroGraphJavaServer -exres and -index allow adjustments to the storage configuration of the server.
- New command line arguments to AllegroGraphJavaServer -standalone and -stop may be used to diagnose storage problems.
Changes from 1.1 to 1.2
Major changes and enhancements
Minor changes and enhancements
- AllegroGraph now supports RDF/XML serialization via the
- The already existing
*synchronize-automatically*has been documented and exported. This provides greater control over triple-store synchronization for increased speed.
- We have improved the selection of hash table parameters to increase performance.
- We have fixed several small bugs in our NTriple import function.
- We have fixed a serious bug that made it impossible to retrieve large literals.
- The symbol
:allegrograph-1.2is now pushed onto
- We fixed a small bug in
next-pthat caused an error if next-p was called after it had already returned
nil. Next-p now correctly returns
nilonce a cursor has been depleted regardless of how many times it is called.
Changes from 1.0 to 1.1
We are now using a faster mechanism to store and retrieve URI information. The new method also uses much less memory so that larger RDF files can be loaded.
The triple store disk format has changed between release 1.0 and release 1.1. Release 1.1 will not read 1.0 triple stores. The easiest thing to do is to recreate your databases with the new version. Please contact us (firstname.lastname@example.org) if you need assistance in converting your 1.0 triple stores into the new format. The section on "Savings Triples to a file" below may also be helpful.
*version*was renamed agraph-version.
pprint-resourcewas renamed to
*index-chunk-count-warning-limit*was removed and
*maximum-indexing-sort-chunk-size*was added; improved the index chunk size selection.
:allegrograph-1.2are now on
:agraphmodule has been loaded.
Minor Enhancements ¯
!!reader macro can be used in compiled code.
!!reader macro and string can now be used in the prolog
- Many more functions and variables have now been documented.
- Many areas of triple query, triple parsing, and retrieval have been optimized.
Changes in the Java Interface
- The Lisp-Java connection always uses two socket ports listening in the Lisp server. The default ports are 4567 and 4568.
- A new method
select()allows triples to be retrieved with a Prolog expression.
- A new method
selectValues()allows arbitrary values (Resources, Literals, or BlankNodes) to be retrieved with a Prolog expression.
- The Lisp-Prolog expression passed in the select() or selectValues() method call is parsed in a fixed package. The package
- A new method
serverTrace()enables or disables trace output in the Lisp server. The trace output shows calls from Lisp to Java, their arguments and the returned values.
- The Lisp server attempts to close databases opened from Java if a connection is closed prematurely or the Lisp server exits.
- The Value class and subclasses implement the
hashCode()method specified by the
- A new method
getParts()allows conversion of id numbers into strings.