Skip to content
Switch branches/tags
Go to file
Cannot retrieve contributors at this time
Change Log
This is a minor update to bump dependencies, in particular it updates the Newtonsoft.Json dependency from 12.x to 13.x. It also
includes minor updates for HtmlAgilityPack (1.11.31->1.11.34) and AngleSharp (0.14.0->0.16.0)
FIX: Fixed the UriLoaderCache to correctly handle cache file freshness checks when a cache file is deleted and then recreated within a short period of time. Thanks to @co2chicken for the report. (#396)
FIX: Fixed the FileGraphPersistenceWrapper's single-parameter constructor to properly set the internal reference to the file used for graph persistence, preventing an error which would occur when attempting to flush the persisted graph. Thanks to @DarkOOze for the report. (#397)
FIX: Fixed the BaseFormatter's handling of URI formatting to avoid using Uri.ToString() which can change the original URI string because it automatically performs some unescaping. Instead Uri.AbsoluteUri is used for absolute URIs and Uri.OriginalString is used for relative URIs. These changes should better preserve the original URI string and its escaping (which is important in RDF when determining URI node equality). Thanks to @IllidanS4 for the PR (#395)
ENHANCEMENT: Improved performance of handling SERVICE clauses in SPARQL queries by injecting multiple values into the SERVICE query request rather than issuing one request for each binding set. This should drastically reduce the number of remote calls required to process a SERVICE block in a SPARQL query. Thanks to @giacomociti for the PR (#382)
NEW: The SPARQL Query Builder API now has more extension points to enable developers to access the internals of the QueryBuilder when creating their own extensions to the fluent API. Thanks to @jaitao99 for the suggestion (#377)
NEW: Exposed the internal APIs used to add VALUES bindings into a graph pattern as public APIs supporting the use case where a developer wants to add a set of value bindings to an existing (parsed) SPARQL query. Thanks to @giacomociti for the suggestion (#379)
FIX: Fixed a bug with the SPARQL query parser not properly handing bracketed expressions in a maths expression. This fix also enhances the parser to be able to handle maths expressions with an ambiguous minus sign (-) without requiring the query to be changed to add whitespace. Thanks to @zzbxd for the report (#385)
FIX: Fixed the default DocumentLoader implementation for the JSON-LD parser to decode content according to the Content-Type header received in the response rather than relying on the .NET WebClient.DownloadString which doesn't do this behind the scenes. Thanks to @jakubklimek for the report (#376)
ENHANCEMENT: Improve performance of the JSON-LD parser for large files by optimising keyword checks. Thanks to @CFlatWouldbeMinor for the report and suggestion.
FIX: Fixed the NamespaceMapper class to handle the case where two prefixes map to the same URI and one is then removed from the mapper. Previously this would result in the backwards URI-to-prefix mapping to the remaining prefix being lost, with this release, the URI-to-prefix mapping will now correctly return the remaining prefix. Thanks to @rdewaele for the report.
FIX: Fixed a bug with the ToString serialization of HAVING clauses in a SparqQuery instance. Thanks to @jiatao99 for the report.
This package was released to NuGet by error due to changes in the CI build script.
ENHANCEMENT: Improve performance of processing * paths in the Leviathan query engine. Thanks to @joc-proxem for the report.
NEW: Added a public constructor for the `IriExpression` class to make it easier to add IRI constants when building a SPARQL query.
FIX: Significant performance enhancement for the TreeIndexedTripleCollection makes it faster to retract triples. Thanks to @blackwork for the PR.
FIX: Fix to the Leviathan query engine to fix the behaviour of grouped aggregates when the input context is empty. Thanks to @giacomociti for the bug report.
This release updates the JSON-LD implementation to conform to the final published version of the specification.
NEW: Updated the JSON-LD implementation to conform to the newly published JSON-LD 1.1 specifications ( The interfaces to the JSON-LD reader and writer and the JSON-LD processor are unchanged, but the internal implementation now conforms to the published W3C specification rather than the draft specification from (#315)
FIX: Fix for double-encoding of URIs in RDF serializers. Thanks to @tpluscode for the report and fix. (#328)
Updated the constructors for classes derived from NumericNode so that the string literal value that is generated uses the C# InvariantCulture. This ensures that the literal string generated conforms to the lexical value space for the corresponding XML schema datatype. Thanks to @uyha for the bug report. (#305)
NEW: The `IsReady` property of the `StardogConnector` now checks that the knowledgebase specified in the connector exists on the remote server. If the it is not found, `IsReady` will return `false`. Thanks to @joephayes for the suggestion and the PR. (#278)
FIX: SparqlParamaterizedString has been fixed to replace variables whose name starts with an underscore character. Thanks to @giacomociti for the bug report. (#230)
FIX: The SPARQL query parser has been fixed to better handle math expressions without brackets, such as 1*2*3 or 10/5/2. Thanks to @alaendle for the bug report. (#225)
FIX: The SHACL processor has been fixed to support the use of unnamed graphs as the shapes graph to validate with. Thanks to @langsamu for the bug report and fix. (#303)
The main focus of this update is to reinstate features that were disabled for the .NET Standard build when we were targetting .NET Standard 1.0 APIs. This eliminates dotNetRDF API differences between the .NET Framework and .NET Standard builds of the library.
NEW: Added a new property IGraph.AllNodes which returns an enumeration over all of the INode instances contained in the graph including those nodes used only in the predicate position of graph triples (#146)
FIX: Reinstated a large number of features from the .NET Framework version of dotNetRDF to the .NETStandard build. This includes:
* The option to use PLINQ evaluation for joins
* Parallel and asynchronous query evaluation in Leviathan
* SPARQLView invalidation
* Multi-threaded writing in store writers
FIX: Fix to the JSON-LD processor to better handle the use of URNs in places where an absolute IRI is allowed. Thanks to @jrdouceur for the report. (#282)
FIX: Fix to the JSON-LD processor to ensure that quads generated for RDF list nodes are inserted into the same graph as the list itself. Thanks to @jrdouceur for the report. (#297)
NEW: SHACL processor now provides default result messages for each of the constraints. Thanks to @o-tim for the report and @langsamu for the PR (#293)
The main updates of this release are the addition of a SHACL validator and SHACL API for dotNetRDF; the addition of a new Dynamic API for RDF graphs; and the removal of support for .NET Core 1.0 and the NETStandard 1.0 API.
BREAKING: Removed NETStandard 1.4 target framework (#273). Please migrate applications to target NETStandard 2.0.
NEW: SHACL Processor - a fully compliant SHACL Core and SHACL-SPARQL processor. Thanks to @langsamu for this amazing contribution! (#236)
NEW: Dynamic API for RDF graphs and nodes. See for details. Thanks to @langsamu for the PR (#228)
FIX: Reinstated RDF parser test suites (#252)
FIX: Fix to ensure that the RdfXmlWriter properly escapes XML entity declarations. Thanks to @cygri for the report (#245)
FIX: Update JsonLdWriter to default to opening files with `FileMode.Create` for consistency with other writers. Thanks to @bergdahl for the report (#232)
FIX: Fix for an edge-case in the GraphMatcher brute-force matching algorithm. Thanks to @langsamu for the report (#235)
FIX: Fix to SPARQL query parser to allow a DOT token to appear after a FILTER. Thanks to @langsamu for the report (#237)
FIX: Update to allow BaseTripleComparer to be used as an IEqualityComparer paramter. Thanks to @MischaVreeburg for the PR (#241)
FIX: Performance enhancement for sorting nodes in the TurtleWriter. Thanks to @MischaVreeburg for the PR (#239)
FIX: Fix for incorrect IRI for the RDF langString datatype. Thanks to @langsamu for the report and PR (#223)
FIX: Fix for Leviathan SPARQL update on a named graph that does not exist in the store. Thanks to @langsamu for the report (#216)
FIX: Fix for an edge-case in the CompressingTurtleWriter that caused incorrect serialization of certain blank nodes. Thanks to @langsamu for the report (#279)
This release pulls together a number of minor features and enhancements provided by the user community.
NEW: Performance improvements for the ontology builder classes (OntologyClass and OntologyProperty). Thanks to @DFinnh for the PR (#221)
NEW: The TriG parser now supports the syntax of the most recent TriG recommendation. This is now the default syntax supported by the TriG parser. Thanks to @langsamu for the PR (#205, #208)
NEW: SPARQL QueryBuilder now supports SPARQL VALUES clauses. Thanks to @tpluscode for the PR (#214)
NEW: The Get...Node methods of the Graph class now include nodes used as predicates as well as those used as subjects and objects in the graph. (#209)
FIX: Fix for the RDF/XML parser to better handle XML namespaces. Thanks to @glebkozh for the report. (#203)
NEW: StardogConnector now supports opening a transaction with reasoning enabled. Thanks to @DarthStem for the PR (#226)
This release fixes a number of bugs found in the 2.0.1 release and adds some new features provided by the user community
- NEW: New features for the QueryBuilder API. Added support for generating sub-queries using the QueryBuilder and added support for supplying custom TripleBuilders in addition to the fluent style API. Thanks to @faubulous for the PR. (#144)
- NEW: Added a new (read-only) SKOS API making it easier to access data held in RDF graphs that use the SKOS vocabulary. Thanks to @langsamu for the PR. (#174)
- NEW: Added a GraphML store writer. This writer generates a GraphML file that describes the topology of the graphs in a store in a format suitable for loading into various graph processing/visualisation tools. Thanks to @langsamu for the PR (#184)
- NEW: The GraphViz writer now supports optionally outputting literals as separate nodes for each triple rather than as a single node for a given literal value. Thanks to @langsamu for the PR (#196).
- FIX: Fix for over-enthusiastic DateTime coercion in the JSON-LD parser. Thanks to @langsamu for the report and fix. (#164)
- FIX: Fix for the JSON-LD parser incorrectly losing the content of the local context when processing a remote context. Thanks to @briancr-ms for the bug report. (#183)
- FIX: Fix for the TreeIndexedTripleCollection to explicitly remove empty triple lists from the indices when triples are removed from the colleciton. Thanks to @langsamu for the report. This fix also fixes an issue with the HtmlWriter generating empty table rows for triples that have been removed from the graph (#188, #189)
This is a bug-fix release for the 2.0.0 release.
- FIX: Updated VDS.Common dependency to latest release version. Thanks to @langsamu for the report.
- FIX: Ensure all assemblies receive the correct version number as AssemlyVersion and FileVersion. Thanks to @langsamu for the report.
- FIX: RDF/XML parser now strips off the fragment part of the XML base URI when resolving same document references. Thanks to @langsamu for the report and suggested fix.
- FIX: RDF/XML parser now better handles documents where the RDF XML namespace URI is not mapped to the `rdf` prefix. Thanks to @langsamu fo the report.
This release marks a major restructuring of the project.
Change Summary:
- Tools and samples are now moved to their own independent GitHub repositories ( and
- Support for .NET 3.5 and .NET 3.5 client profile has been removed.
- Updated the solution and project files to .NET Core SDK 2.0
- Added support for .NET Core 1.1 and 2.0
- The build process has been simplified and no longer relies on NAnt - a build can be done from the command line as `dotnet restore` followed by `dotnet build`
- Added support for JSON-LD. The implementation is tracking the in-development JSON-LD 1.1 specification.
- Added support for enabling/disabling reasoning on SPARQL queries over the Stardog connector. Thanks to @charbull for the PR.
- The SparqlRemoteEndpoint class now always honours an explicitly set HttpMode value. By default, the mode is set to AUTO which continues to implement pre-2.0 behaviour,
using GET unless the query string exceeds the internal query string length limit of 2048 characters or contains non-ASCII characters. From 2.0, if the user explicitly
sets HttpMode to GET or to POST, that method will be used regardless of query parameter length or content. Thanks to @reeset for the report. (#128)
- Fixed an error in the configuration of the Newtonsoft JSON parser that caused the RdfJSONParser to fail when the JSON file contained literal values formatted as ISO 8601 date/time strings. (#130)
- Added a new IRdfWriter implementation that wraps an IStoreWriter implementation, allowing a single IGraph instance to be written using an IStoreWriter (#126)
- Refactored HTTP authentication in the connectors so that it is now implemented in BaseHttpConnector. Thanks to @tpluscode for the PR.
- Performance improvements for looking up nodes in indexed graph collections. (#153). Thanks to @tpluscode for the PR.
- Added a new IRdfHandler implementation. VDS.RDF.Parsing.Handlers.StripStringHandler is a handler that wraps another handler and removes the xsd:string datatype from literal objects. (#157). Thanks to @langsamu for the PR.
- .NET Core build - targets the netstandard1.4 framework (see for compatibility details).
- Build Changes
- Changed API documentation build to use [Sandcastle Help File Builder]( rather than the older NDoc
- Bug Fixes
- Added support for aggregates to query builder (#81, #80)
- Fixed Newtonsoft.Json reference (#66)
- Bug Fixes
- Fix namespace handling error in the RDF/XML parser (#59)
NOTE: From this release, bug tracking has moved to
so bug ID references are to this new tracker (in the form #XXX)
- Bug Fixes
- Fix for LazyBGP evaluation where triple patterns do not extend the result set with more bindings (#57)
- Fix for incorrect return on evaluation of a (NOT) EXISTS filter with no variables (#58)
- Bug Fixes
- Fix inconsistent use of XML entities for compression in RdfXmlWriter (CORE-453)
- Disable HTTP Keep Alive by default as it can cause errors under some circumstances (CORE-454)
- Fix bug with ToString() form of SparqlQuery not being round trippable in some cases (CORE-458)
- Build
- Ensure all NuGet packages and Release libraries are built in Release mode (CORE-459)
- Dependencies
- Upgrade OpenLink.Data.Virtuoso to 7.20.3214.1 (VIRT-359)
- Note that this removes support for Virtuoso on .Net Client Profile
- Upgrade VDS.Common to 1.6.4 (CORE-459)
- Upgrade Newtonsoft.Json to 8.0.3 (CORE-460)
- Bug Fixes
- Performance fixes for query evaluation over virtual graphs (CORE-449, CORE-450, CORE-451, CORE-452)
- BaseEndpoint now permits more access to the HttpWebRequest prior to issuing it to allow for extra customisation (CORE-448)
- AllegroGraph compatibility issue with incorrect MIME type for saving data (CORE-447)
- SPARQL Query Parser was overly strict with some aggregate containing queries where the GROUP BY was implicit (CORE-446)
- Fixes for Stardog 3.x support (CORE-443)
- Improvements to multi-threaded performance when using URI Interning
- Dependencies
- Upgrade VDS.Common to 1.6.0
- Bug Fixes
- Some SPARQL parsers did not handle bad URIs gracefully i.e. did not provide informative errors (CORE-432)
- SPARQL CSV parser reject variable names in header row if CSV quoted values are used (CORE-433)
- Accessing remote SPARQL endpoints could fail to include default & named graph parameters if POSTing the queries (CORE-434)
- Fix possible exception when evaluating a query with a ORDER BY and LIMIT over a cross product (CORE-437)
- Lazy query evaluation can cause an apparent infinite loop (i.e. extremely slow query evaluation) in some cases (CORE-439)
- Fix typo in MIME type definitions for NTriples
- Fix bug where HAVING clause that used aggregates could fail to evaluate correctly if project expressions were also used (CORE-440)
- Fix bug in evaluation of the zero length portion of * paths causing incorrect results (CORE-441)
- Build
- Upgrade PCL build to Profile 328
- Dependencies
- Upgrade VDS.Common to 1.5.0
- Upgrade Json.Net to 6.0.8
- Bug Fixes
- Missing ToString() on UUID() and StrUUID() functions (CORE-427)
- Fix bug with parsing BIND inside complex nested graph patterns (CORE-428)
- Fix bug with RDF/XML output under MonoTouch (CORE-431)
- Build
- Ensure AssemblyVersion is synchronised properly with NuGet package versions (CORE-426)
- Remove MSBuild integrated NuGet package restore
- Dependencies
- Upgrade VDS.Common to 1.4.0
- Upgrade Json.Net to 6.0.6
- Upgrade HtmlAgilityPack to 1.4.9
- Bug Fixes
- Fix bug in overly strict SPARQL Results JSON parsing (CORE-419)
- Fix bug with incorrect sub-query evaluation (CORE-420)
- Fix bug where NQuadsWriter may omit graph names when the data was inserted via SPARQL Updates (CORE-421)
- Fix bug parsing SPARQL Results JSON where data is in unexpected order (CORE-423)
- Fix possible NPE when running updates with a custom query processor
- Fix for Stardog 2.2 reasoning support
- Bug Fixes
- Fix a bug with Left Join producing incorrect results due to join linearization optimizations in some cases (CORE-406)
- Fix a bug in substituting parameter values containing $ signs into SparqlParameterizedString instances (CORE-408)
- Fix a corner case in evaluating CONSTRUCT queries with empty WHERE clause and concrete triples in template (CORE-407)
- Fix overly strict SPARQL Results XML parsing (CORE-410)
- Fix incorrect usage of Single.NaN and Double.NaN constants with equality operator (CORE-412)
- Include location information in Illegal space in URIs error from NTriples tokeniser
- Fix a bug with scheduling of sub-queries (CORE-416)
- Fix a bug with GRAPH clauses being executed multiple times unecessarily (CORE-416)
- Dependencies
- Upgrade VDS.Common to 1.3.0 (CORE-405)
- Upgrade Json.Net to 6.0.3 (CORE-405)
- Build
- Upgrade PCL build to Profile 136 (CORE-405)
- Parsing
- Improve error message for excess triple pattern tokens (CORE-411)
- Query
- Add FixedVariables and FloatingVariables properties to ISparqlAlgebra and related classes (CORE-406)
- Improve logic for when Left Joins are linearized (CORE-406)
- ExplainQueryProcessor improvements:
- GRAPH clause explanations
- Indentation of output for easier reading
- Builds
- Remove SL4 and WP7 builds (CORE-405)
- Parsing
- Support for updated NTriples syntax per the RDF 1.1 specification (CORE-355)
- Support for updated NQuads syntax per the RDF 1.1 specification (CORE-356)
- Writing
- Support for updated NTriples syntax per the RDF 1.1 specification (CORE-355)
- Support for updated NQuads syntax per the RDF 1.1 specification (CORE-356)
- Bug Fixes
- Fix a bug where some graph patterns may get translated into algebra incorrectly (CORE-398)
- Fix a bug with overly greedly tokenization when parsing prefix declarations in Turtle, N3 and SPARQL
- Fix a bug with language specifiers not being consistently normalized to lower case internally
leading to unexpected behaviour trying to query for triples by language tag (CORE-401)
- Fix a bug in re-serializing queries containing UNION clauses (CORE-402)
- Fix a bug in parsing collections from TriG syntax (CORE-403)
- Core API
- Content negotiation for NTriples and NQuads updated to favour officialy specified MIME types (CORE-355,CORE-356)
- Storage
- Add Timeout property to all HTTP based storage providers which is used for all HTTP requests (CORE-400)
- Fix handling CONSTRUCT/DESCRIBE results from more recent Virtuoso versions (VIRT-397)
- Fix handling of inserting/deleting blank nodes with more recent Virtuoso versions (VIRT-399)
- Formatting
- NTriplesFormatter and NQuadsFormatter now take a syntax argument (CORE-355,CORE-356)
- NTriples11Formatter and NQuadsFormatter11 added as convinient shortcuts to providing explicit syntax (CORE-355,CORE-356)
- Removed obsolete unusable DydraConnector
- Bug Fixes
- Fix a bug in how Sesame connections load the default graph
- Fix a bug causing incorrect results in some cases of { } OPTIONAL { } when the LHS and RHS are disjoint i.e. no
common variables (CORE-386)
- DELETE WHERE { } shorthand syntax was permitted to have a preceding WITH clause which was invalid SPARQL syntax (CORE-389)
- URILoader.Load() can sometimes swallow exceptions (CORE-391)
- Timeout (and other request options) was not honoured for asynchronous queries and updates using SparqlRemoteEndpoint and SparqlRemoteUpdateEndpoint (CORE-393)
- Fix a bug in handling Fragment Identifier in Graph URIs for SPARQL Graph Store protocol based stores like Fuseki (CORE-394)
- Fix a bug in translating and evaluating complex property paths (CORE-395)
- Dependencies
- Bumped Json.Net to 5.0.8
- Documentation
- Minor tweak to Timeout properties to ensure all explicitly state that the unit is milliseconds (CORE-387)
- Query
- SparqlResultSet can now be created from an IEnumerable<SparqlResult> instances (CORE-383)
- Storage
- Add native SPARQL Update support to StardogV2Connector (CORE-376)
- Bug Fixes
- Possible OOM when stream parsing large RDF/XML files (CORE-378)
- Fix a bug with transactions being left open in some cases when using VirtuosoManager (VIRT-382)
- NuGet
- Fixed packaging to ensure the Portable Class Library builds are included
- Marked as obsolete unusable the obsoleted ICharFormatter.FormatChar() method
- Portable Class Library builds are now included (CORE-303)
- Note that synchronous APIs for some functionality are not supported in the PCL builds (CORE-371)
- Formatting API
- Add new more efficient FormatChar() overload to ICharFormatter (CORE-357)
- Query
- First version of new Fluent Query builder API (CORE-260)
- Global Options
- Add new DefaultCulture and DefaultComparisonOptions used for lexical ordering of literal values in the cases
where more natural ordering (e.g. numeric) does not apply (CORE-367)
- Bug Fixes
- Fix a bug where SPARQL parsing could incorrectly lose type information for some literals used in expressions
- Fix a Stack Overflow that could occur in ThreadSafeGraph (CORE-363)
- Property Path * operator could produce incorrect results (CORE-349)
- Correct an error message re: extension point in Full Text Indexing (FTXT-366)
- Some full text queries could cause BIND clauses to result in unbound values (FTXT-364)
- Fixes to handling of some Date Time comparisons in SPARQL (CORE-365)
- Fixes to asynchronous error propagation for some async APIs (CORE-370)
- Fixes to parsing of EXISTS/NOT EXISTS within the WHERE clause of a SPARQL Update (CORE-373)
- Fixed an encoding bug when communicating with Sesame servers (CORE-374)
- Fixed a bug with handling relative URIs as graph names with Virtuoso (VIRT-375)
- Dependencies
- Upgraded Json.Net to 5.0.6
- Query
- IValuedNode contract changed to have both AsDateTime() and AsDateTimeOffset() methods (CORE-365)
- Storage
- Add partial support for connections to Stardog 2.0 servers
- Native SPARQL update support for Stardog 2.0 is not yet available
- Configuration API
- ConfiguationLoader had IConfigurationLoader interface extracted (CORE-362)
- Writing
- Significantly improve performance of writing non-ASCII characters to NTriples (CORE-357)
- Marked as obsolete usable the old ICharFormatter.FormatChar() method (CORE-357)
- Marked DydraConnector obsolete unusable per deprecation policy
- Build
- Relevant project files now specify signing keys directly so VS builds will be signed in the same way that NAnt builds were previously, Silverlight builds
are still not signed
- Parsing
- New ITokenisingParser interface which exposes a TokenQueueMode property (CORE-332)
- Global Options
- New Options.DefaultTokenQueueMode controls default queue mode for tokeniser based parsers (CORE-332)
- New Options.ValidateIris controls whether certain parsers perform strict IRI validation, currently only Turtle W3C syntax supports this (CORE-314)
- Configuration
- ConfigurationLoader may now be used in a convenience instance mode (CORE-337)
- SparqlRemoteUpdateEndpoint now implements IConfigurationSerializable properly (CORE-346)
- New dnr:queryEndpoint, dnr:queryEndpointUri, dnr:updateEndpoint and dnr:updateEndpointUri properties for use in place of their generic equivalents (CORE-346)
- Query
- New optimization improves performance for some queries using ORDER BY + DISTINCT combinations (CORE-353)
- Storage
- New ReadWriteSparqlConnector for connecting to arbitrary triple stores that expose both a Query and Update endpoint (CORE-346)
- Bug Fixes
- Fix for one form of AllegroGraphConnector constructor confusing Store and Catalog IDs
- StoreHandler did not propogate namespaces to all graphs (CORE-334)
- SPARQL expression parsing could occassionally reject some numeric literals incorrectly (CORE-332)
- GROUP BY could interact incorrectly with some operators such as VALUES and GRAPH resulting in incorrect results (CORE-336)
- GRAPH ?g { } was interpreted incorrectly (CORE-336)
- Fixed a bug where asynchronous UpdateGraph() on Sesame connections would invoke the callback too early
- Fixed a bug in GROUP_CONCAT where certain values would not be correctly concatenated together (CORE-340)
- Fixed a corner case bug where the Turtle parser could accept some invalid input and generate incorrect URIs for it (CORE-341)
- Fixed a bug where certain triple patterns could trigger a bug in the scan logic and explode the solution space (CORE-343)
- Fixed a bug where Graph equality could explode memory usage and be unable to determine equality on some blank node heavy equivalent graphs (CORE-345)
- Fixed a bug with numeric literals not being parsed using the invariant culture (CORE-344)
- Fixed a bug with the Ontology API not returning OWL datatype properties correctly (CORE-339)
- Fixed a bug where DESC() applied to a sort condition in SPARQL could propogate the DESC() to the subsequent sort condition (CORE-350)
- Fixed a bug where not all sort conditions in SPARQL were applied for rows where any column evaluated to null (CORE-350)
- Fixed a bug where EXISTS/NOT EXISTS used a child expression in a larger expression could cause incorrect results
- Fixed various corner case bugs in Turtle parsing highlighted by updating to support latest W3C recommendation (CORE-314)
- Fixed a bug with use of xml: as a prefix for element names in RDF/XML (CORE-358)
- Dependencies
- Upgraded VDS.Common to 1.2.0 which resolves an issue that users may encounter under the VS debugger (CORE-317, CORE-292)
- Upgraded Json.Net to 5.0.4
- Documentation
- Documentation was moved to BitBucket wiki at (DOCS-306)
- Core API
- TreeIndexedTripleCollection now supports completely configurable indices (CORE-309)
- Graph equality should now be more performant (CORE-345)
- HTTP Debugging is no longer debug build specific (CORE-347)
- Various improvements to localalization support particularly around numeric value handling
- Parsing
- Updated support for Turtle to W3C Candidate Recommendation (19th Feb 2013 version) (CORE-314)
- Escape handling is now much stricter and will throw errors on invalid escape sequences which previously would have been silently allowed (CORE-314)
- Optional IRI validation for Turtle W3C which is disabled by default, use Options.ValidateIris to enable (CORE-314)
- Query
- Wherever possible the order of variables in the SELECT clause will now be respected in SparqlResultSet objects (CORE-342)
- Storage
- SesameNativeTemplate is now a public class
- AllegroGraphConnector now implements IUpdateableStorage and IAsyncUpdateableStorage (CORE-308)
- Fix target framework profile for dotNetRDF.Data.Virtuoso.ClientProfile
- Writing
- Improved how characters are escaped (counterpart to stricter escape handling) which provides better round tripping of data (CORE-314)
- Removed defunct TalisException
- Removed defunct internal class InternalXmlWriter
- Marked DydraConnector with an obsolete usable due to continuing inconsistency and transient failures from the Dydra API
- Removed defunct Project class
- Marked IInMemoryQueryableStore.ExecuteQuery() methods as deprecated in favour of using ISparqlQueryProcessor
0.9.0 RC4
- Ontology API
- Added Direct/Indirect SubClasses and SuperClasses property on OntologyClass (CORE-295)
- Added Direct/Indirect SubProperties and SuperProperties property on OntologyProperty (CORE-295)
- Added Siblings property on OntologyClass and OntologyProperty (CORE-296)
- Added IsTopClass and IsBottomClass property on OntologyClass (CORE-293)
- Added IsTopProperty and IsBottomProperty on OntologyProperty (CORE-293)
- Added Owl/Rdf/All Classes and Properties properties on OntologyGraph (CORE-293)
- Added AsClass() and AsProperty() methods on OntologyResource (CORE-293)
- Bug Fixes
- Fix a bug to allow OrderByVariable to take variable name with/without leading ?/$
- Fix a bug in SparqlJsonParser relating to some valid data being rejected due to Json.Net perculiarities (CORE-290)
- Fix a bug in the streaming mode of the RDF/XML parser not respecting external Base URI (CORE-216)
- Fix a corner case bug in interaction between GRAPH clause and inner patterns that match but have no variables (CORE-294)
- Fix a corner base base in interaction between GRAPH clauses and property paths (CORE-294)
- Fix a bug in INSERT/DELETE commands when a GRAPH clause with an unbound variable is used (CORE-300)
- Fix a bug with the XPath Replace function (CORE-299)
- Fix a bug with applying aggregates over empty intermediate results giving incorrect results (CORE-304)
- Add an opt-in workaround for HTTP Basic Authentication against badly behaved server (CORE-301)
- Fix a bug with loss of precision when converting DateTime to xsd:dateTime literals (CORE-305)
- Dependencies
- Externalized the VDS.Web.Server library as a dependency version 1.0.0
- Updated VDS.Common to 1.1.2
- Build
- Improved our test architecture significantly (CORE-216)
- NuGet packages now include PDBs to aid consumers in debugging issues with dotNetRDF (CORE-292)
- Storage, Query and Update
- Always enable PreAuthenticate for HTTP requests where possible to reduce HTTP requests (CORE-302)
- Removed the obsolete JosekiConnector as obsolete unusable
- Removed some obsolete property and class constants in ConfigurationLoader as obsolete unusable
- Removed the obsolete Graph() method of ITripleStore as obsolete unusable (superceded by indexer access)
- Removed the obsolete IndexingHelper static class as obsolete unusable
- Removed the obsolete ConfigurationLoader.AutoDetectX() overloads as obsolete unusable
- Removed the obsolete Tools.StreamCopy() method as obsolete unusable
- Removed the obsolete FastRdfXmlWriter as obsolete unusable
0.8.2 RC3
- Bug Fixes
- Fixed a subtle bug in GraphCollection caused by the previous fix in 0.8.1 RC2
- Fixed a bug with ToLiteral() not using the invariant culture
- Dependencies
- Updated VDS.Common to 1.1.0
- Corrected NuGet dependency on Json.Net to 4.5.11 to match our builds
0.8.1 RC2
- Bug Fixes
- Fixed a critical bug in GraphCollection caused by a change in a dependency that wasn't caught by our existing
regression tests
0.8.0 RC1
- Bug Fixes
- Fixed an internal API inconsistency (CORE-285)
- Fixed a bug in the BNODE() function
- Fixed a bug in Extend that could occur when many Extends were nested together (CORE-287)
- Fixed an intermittent race condition in the implementation of parallel Left Join
- Fixed a bug in the evaluation of some complex GROUP BY statements
- Fixed a bug in the string representation of CountDistinctAggregate (CORE-286)
- Fixed a bug related to losing FILTERS when building queries using the internal APIs
- Fixed a bug related to ToString() form of some API built queries (CORE-286)
- Fixed a bug related to graph scoping of full text search
- Fixes various bugs related to SPARQL 1.1 Protocol and Service Description compliance (CORE-289)
- Dependencies
- Updated Json.Net dependency to 4.5r11
- Updated Query.FullText Library to use Lucene.Net 3.0.3
- Externalized the VDS.Common namespace as a dependency version 1.0.1
- All dependencies are now maintained using NuGet
- Build
- Query.FullText Library is now always strong named
- Query.FullText NuGet package now references Lucene.Net as a dependency instead of including it in the package
- Data.Virtuoso NuGet package now references OpenLink.Data.Virtuoso as a dependency instead of including it in the package
- All alternative builds are now part of the solution rather than being generated only by the NAnt builds
- Parsing/Writing
- Improved how parsers and writers are selected by file extension (CORE-282)
- Improved content negotiation logic to properly support quality factors and type ranges (CORE-282)
- Avoid using blocking IO when parsing from file/memory streams (CORE-282)
- Query
- Improved how Distinct() algebra behaves with respect to trimming temporary variables to better support complex property paths
- Improved how GROUP BY, aggregates and Project Expressions are implemented internally (CORE-284)
- Improved parallel implementation of Left Join
- Marks the obsolete JosekiConnector as obsolete unusable
- Removed the obsolete TalisPlatformConnector
- Removed the obsolete IndexedTripleCollection and it's descendants
- Removed the obsolete AdvancedTripleCollections
- Marks some obsolete property and class constants in ConfigurationLoader as obsolete unusable
- Removes the previously obsoleted property and class constants in ConfigurationLoader
- Marks the obsolete HashTable classes as obsolete unusable
- Marks the obsolete Graph() method of ITripleStore as obsolete unusable (superceded by indexer access)
- Marks the obsolete IndexingHelper static class as obsolete unusable
- Marks the obsolete ConfigurationLoader.AutoDetectX() overloads as obsolete unusable
- Marks the obsolete Tools.CopyStream() method as obsolete unusable
- Marks the obsolete FastRdfXmlWriter as obsolete unusable
0.7.2 Beta
- Configuration API
- More auto-configuration methods (CORE-270)
- Helper methods for loading configuration graphs (CORE-270)
- Supports new ability to have one configuration graph import another URI/file
- More overloads for GetConfigurationX() methods to select values based on a selection of possible properties (CORE-270)
- Support for specifying custom Triple and Graph Collections (CORE-270)
- Support for loading IStorageServer instances (CORE-270)
- Support for loading SPARQL operators and property function factories (CORE-270)
- Support for automatically configuring static properties e.g. Options.UsePLinqEvaluation (CORE-270)
- Query
- Added IsMinusCompatibleWith() method to ISet interface (CORE-238)
- Support for extended SPARQL Operators e.g. using + for Date Time arithmetic (CORE-264)
- Support for SPARQL property functions (CORE-268)
- Refactored Query.FullText to be a true property function (CORE-268)
- Bug Fixes
- Some logic fixes to AllegroGraphConnector and AllegroGraphServer (CORE-263)
- Bug fix to TreeIndexedTripleCollection (CORE-265)
- Bug fix to corner case MINUS logic in SPARQL 1.1 (CORE-238)
- Bug fix to corner case GROUP BY and aggregate interaction logic (CORE-238)
- Bug fix to improve handling of & when outputting XML - Kal Ahmed
- Bug fix for a logic flaw in GraphCollection exposed when deriving from GraphCollection caused by the refactor to use of MultiDictionary (CORE-274)
- Bug fix for a parsing error when property paths are nested in Blank Node predicate object lists
- Bug fix for proper parser detection when selecting based on a .abc.gz filename
- Bug fix for error in Lazy evaluation of some queries (CORE-238)
- Bug fix for subtle logic errors in SPARQL dataset resolution in some rare cases (COR-238)
- Bug fix for some prefix validation bugs in SPARQL 1.1 (CORE-238)
- Bug fix for doing unecessary extra work in a SPARQL DISTINCT operation and not discarding temporary variables (CORE-238)
- Bug fix for pathological case of Graph isomporphism not being handled correctly in GraphMatcher
- Bug fix for use of Uri.EscapeDataString() on long strings (CORE-278)
- Bug fix to a corner case where a ScapegoatTree could lose data in a rebalance (CORE-279)
- Bug fix to QueryableGraph not being properly aware of change in default graph behaviour (CORE-238)
- Bug fix for RdfXmlParser incorrectly resolving some bad property QNames (CORE-280)
- Dependencies
- Bumped JSON.Net version to 4.5r9
- Bumped HtmlAgilityPack version to 1.4.6
- Core API
- Made TreeIndexedTripleCollection the default triple collection implementation (CORE-265)
- Parsing
- Turtle parser now allows SPARQL style BASE and PREFIX when using W3C standard syntax (CORE-261)
- Query
- Improves SPARQL 1.1 support to near 100% compliance (CORE-238)
- Storage
- Moved IStorageServer implementations into separate classes (AllegroGraphServer, SesameServer and StardogServer) in own namespace (CORE-263)
- Added ParentServer and AsyncParentServer properties to IStorageProvider and IAsyncStorageProvider (CORE-263)
- Talis is no longer supported since the Talis Platform is in the process of winding down for public usage
- Marked the TalisPlatformConnector as obsolete unusable
- Removed the obsolete Data.Sql library from the distribution
- Marked the now superseded IndexedTripleCollection and it's descendants as obsolete unusable
- Removed the obsolete ThreadSafeIndexedTripleCollection
- Removed IStoreParams
- Removed the old overloads of IStoreReader and IStoreWriter
- Removed the obsolete IGenericIOManager interfaces
- Removes obsolete property and class constants in ConfigurationLoader
0.7.1 Beta
- Core API
- New Indexing data structures (CORE-247, CORE-52)
- New decorator classes to make it simpler to wrap extra functionality around existing implementations: (CORE-255)
- WrapperGraph
- WrapperGraphCollection
- WrapperTripleCollection
- WrapperTripleStore
- Bug Fixes
- Fixed a bug with parsers being too restrictive on permitted language specifier formats - thanks to Csaba Gonczi (CORE-253)
- Fixed a subtle bug around percent encoded characters in URIs - thanks to Rob Styles (CORE-258)
- Fixed a bug with GraphDiff and null reference handling (CORE-259)
- Core API
- IGraph changes:
- Changes definition of Assert() and Retract() to return booleans (CORE-254)
- Removes unecessary overloads of Assert() and Retract() (CORE-254)
- ITripleStore changes:
- Changes definition of Add() and Remove() to return booleans (CORE-254)
- Adds indexer for accessing graphs and obsoletes the Graph() method in favour of this
- Triple Collection changes:
- BaseTripleCollection now defines Add() and Delete() as returning booleans (CORE-254)
- Refactored internals of TripleCollection to use our new MultiDictionary data structure (CORE-247)
- ThreadSafeTripleCollection is now a decorator that can be applied to any BaseTripleCollection instance, also made it available on Silverlight (CORE-255)
- Graph Collection changes:
- Refactored internals of GraphCollection to use our new MultiDictionary data structure (CORE-247)
- ThreadSafeGraphCollection is now a decorator that can be applied to any BaseGraphCollection instance, also made it available on Silverlight (CORE-255)
- DiskDemandGraphCollection and WebDemandGraphCollection are now both decorators and so can be combined on top of each other as desired (CORE-255)
- Query
- ISparqlDataset now defines AddGraph() and RemoveGraph() as returning booleans (CORE-254)
- Storage API
- Refactored IStorageServer API (CORE-249)
- Added support for creating stores with Sesame - thanks to Jeen Broekstra (CORE-249)
- Standardized error handling across Storage Providers as far as possible - thanks to Ron Michael Zettlemoyer (CORE-262)
- Stardog
- Avoid any transaction if calling UpdateGraph() without any updates - thanks to Ron Michael Zettlemoyer
- Marked the TalisPlatformConnector as obsolete but usable
- Marked the contents of the Data.Sql library as obsolete unusable
- Removed the obsolete BackgroundPersistedGraph class
- Marked the now superseded IndexedTripleCollection and it's descendants as obsolete usable
- Marked the obsoleted ThreadSafeIndexedTripleCollection as obsolete unusable
- Marked IStoreParams as obsolete unsuable
- Marked the old overloads of IStoreReader and IStoreWriter as obsolete unusable
0.7.0 Beta
- Query
- Added an implicit join optimiser
- Added a filtered product optimiser (CORE-224)
- Added support for UUID and STRUUID functions (CORE-222)
- Added support for VALUES syntax (CORE-222)
- Bug Fixes
- Fix for a bug with FILTER and BIND in the WHERE clause of INSERT/DELETE causing incorrect behaviour due to an over optimization issue (CORE-225)
- Fix for a bug with ASK queries and SparqlRemoteEndpoint.QueryWithResultSet() (CORE-229)
- Fix for a bug with Stardog connectivity related to defunct connection string parameter (CORE-230)
- Fix for a bug with multi-threaded access to MimeTypesHelper failing if it hadn't been previously accessed (CORE-228)
- Fix for a bug with multi-threaded access to our Trie implementation (CORE-228)
- Fix for a bug with nested aggregates evaluating when they should error i.e. inner aggregate gives unbound (CORE-232)
- Fix for bugs readrding insertion and deletion of Blank Node containing triples via the UpdateGraph() method when using Virtuoso (
- Fix for calling CreateUriNode() with a relative URI on a Graph not automatically resolving against Graph Base URI
- Parsing
- Refactored IStoreReader API to be consistent with IRdfReader and ISparqlResultsReader (CORE-212)
- Query
- Default behaviour is now not to have a union default graph (CORE-211)
- BINDINGS syntax now disabled in favour of the new VALUES syntax from latest editors draft (CORE-222)
- Revised STRAFTER and STRBEFORE implementation to latest editors draft (CORE-222)
- Turned on PLinq Evaluation by default, following operations are parallelised currently:
- Join
- LeftJoin
- Product
- Filter
- Extend
- Storage
- Major refactor and reorganisation of interfaces within Storage namespace to have more consistent naming (CORE-215)
- Supports a standard async access API over almost all existing storage providers (CORE-68)
- Adds a new IStorageServer interface for providers like Sesame and AllegroGraph which allow multiple stores to be managed (CORE-215)
- Serialization
- Refactored IStoreWriter API to be consistent with IRdfWriter and ISparqlResultsWriter (CORE-212)
- Update
- Refactored code around ISparqlHttpProtocolProcessor to make it easier to expose this feature on non-ASP.Net web servers (CORE-183)
- Obsolete ISelector API removed
- Removed any internal use of embedded HashLib code as it is no longer necessary
- Removed the obsolete BaseNodeCollection API
- Marked the contents of the Data.Sql library as obsolete but usable
0.6.2 Beta
- Query
- Added an implicit join optimiser
- Bug Fixes
- Fix for an issue with bif:contains and other special constructs in SPARQL queries to Virtuoso
- Fix for a bug with CREATE GRAPH and GenericUpdateProcessor behaviour for stores that don't support empty graphs
- Fix for some regressions in SPARQL 1.1 support introduced by internal data structure changes in the 0.6.1 release
- Fix for corner case logic flaw in GRAPH clause evaluation
- Fix for proper configurable timeouts for Virtuoso
- Fix for some Virtuoso extensions causing queries to be rejected
- Fix for incorrect parser selection when talking to some Sesame based servers
- Parsing
- Explicit support for direct parsing of GZipped inputs (e.g. example.ttl.gz)
- More intelligent format detection on loading into TripleStore instances
- Ontology API
- Added IsDomainOf and IsRangeOf properties to OntologyClass
- Query
- Added TryGetValue() and TryGetBoundValue() methods to SparqlResult class
- Storage
- Storage API outline now available on Silverlight/Windows Phone 7 though many implementations are not available on those platforms
- All Talis specific classes except TalisPlatformConnector
- Obsolete NativeTripleStore and StoreGraph
- Obsolete HandlerConstants
- Marked all legacy FolderStore classes as deprecated but usable
- Marked old GenericReader/GenericWriter classes as deprecated unusable
0.6.1 Beta
- Bug Fixes
- Fixed an inadvertent StackOverFlowException in the StardogConnector constructor
- Configuration
- Updated vocabularies to reflect new properties in 0.6.x releases and remove defunct properties
- Query
- Experimental PLINQ optimisation of query evaluation for .Net 4.0 builds (disabled by default)
0.6.0 Beta
- Core
- URIs are now interned to reduce memory usage and speed up equality comparisons
- Improved configurability of HashTable so perfomance can be tailored to usage
- Parsing
- Support for parsing W3C standard Turtle (allows for more QNames, case insensitive boolean literals and single quoted literals)
- Registered text/boolean parser for SPARQL Results
- Storage
- All HTTP based storage now supports HTTP proxying
- Bug Fixes
- Fixed a bug with long URIs and SparqlRemoteUpdateEndpoint
- Critical bug where connecting to an AllegroGraph 4.x repository cleared existing data
- Fixed a bug whereby Blank Node IDs in NTriples output could be invalid
- Fixed a bug where QNames in RDF/XML output weren't fully validated against the latest revisions of the XML specs
- Fixed a bug where Blank Node IDs in RDF/XML output could be invalid
- Fixed a bug with some queries falsely being considered ASK queries and their results improperly handled for Sesame stores
- Fixed a bug with bad serialisation of sub-queries
- Parsing
- Constructors for BlockingTextReader are now private, use BlockingTextReader.Create() static instead
- Query
- Major refactor of SPARQL expression evaluation to make it more efficient and maintainable
- Updated to latest SPARQL 1.1 specifications
- Replaced the Join algorithm with a new algorithm which is significantly faster
- Improved selectivity of TriplePattern.GetTriples()
- Some refactoring of ISparqlDataset interface
- A WebDemandDataset for creating a dataset with load on demand capabilities
- Enabled StrictAlgebraOptimiser and IdentityFilterOptimiser by default
- Update
- GenericUpdateProcessor is more intelligent in determining whether a command can be applied to stores that don't have native SPARQL Update support
- Writing
- Support for outputting W3C standard Turtle (allows for more URIs to be compressed to QNames)
- WriteThroughHandler periodically flushes the output stream
- Legacy SQL Store support
- Obsolete BlockingStreamReader class
- Obsolete QueryText method on SparqlParameterizedString
- Dependency on MySql.Data is no longer required by any library in the release
- Obsolete NativeTripleStore marked as unusable
- Obsolete QueryTime and QueryTimeTicks properties removed - use QueryExecutionTime instead
- Obsolete SparqlQuery.Evaluate() marked as unusable
0.5.1 Beta
- Parsing
- Support for registering arbitrary parsers via MimeTypesHelper
- Added a SPARQL TSV Parser
- Query
- Added support for new SPARQL 1.1 functions STRAFTER, STRBEFORE and STRREPLACE
- Storage
- Added Dydra Support
- Bug Fixes
- Fixed a Bug where NegotiateByFileExtension would cause a HTTP 500 error rather than failing silently
- Fixed a Bug with NegotiateByFileExtension and nested handler paths
- Fixed a rare corner case Bug related to round-trip serialization of literals containing backslashes
- Fixed a bug with some COPY/MOVE commands when processed with Leviathan
- Fixed a bug related to data loading of Blank Node heavy data into the new ADO Store
- Fixed a bug with the BaseAdoDataset reporting incorrectly for HasGraph()
- Fixed a bug with HtmlSchemaWriter documenting anonymous classes
- Fixed some bugs with Stardog connectivity due to changes in their HTTP server code
- Fixed a bug with CSV output
- Fixed a bug with SPARQL XML Parser not always decoding XML entities
- Fixed a performance bug with new SQL backend that occurs primarily when the database server is not local
on the network i.e. when database server is remote
- Query
- AVG() aggregate can now be applied over non-numeric expressions
- Storage
- Performance improvements to querying ADO stores
- Added support for additional reasoning modes for Stardog
- Update
- Made LeviathanUpdateProcessor more extensible
- Now supports a custom query processor used in evaluating WHERE clauses
- Writing
- Updated SPARQL CSV/TSV output to match SPARQL 1.1 specification
0.5.0 Beta
- Core API
- Added .Net serialization support to INode, IGraph, SparqlResultSet and SparqlResult
- Support for both IXmlSerializable and ISerializable
- Added callback delegates and various async alternatives to synchronous HTTP to various features throughout
the API to fix an issue with Silverlight/WP7 but also to provide easier async calls to users on all
- Added a PersistentTripleStore which is a propery in-memory view onto a persistent store where changes to the
in-memory state can be persisted/discarded as desired
- Configuration API
- Added a bunch of new properties which can be attached to HTTP Handler definitions to define writer behaviour
- Added new classes that can be used to define Parsers and Writers, ASP.Net configuration auto-detects these
- Parsing
- Added more IRdfHandler and ISparqlResultsHandler implementations
- ResultsWriteThroughHandler for serializing SPARQL Results directly
- MergingResultSetHandler for loading multiple result sets into a single SparqlResultSet object
- Query
- Added a ExplainQueryProcessor which can be used to execute queries and show explanations of their evaluation
- Additional Algebra Operators
- Added parallelised Join and Union operators that can be used as desired
- Added explicit operators for things like BIND, Subqueries and property paths which can be used as desired
- Optimisation support to SPARQL Update commands wherever possible
- Additional Optimisers
- Added a StrictAlgebraOptimiser which transforms to the strict algebra form of the algebra
- Added a ParallelEvaluationOptimiser which transforms the algebra into a parallel executable form where possible
- Added an IdentityFilterOptimiser which applies Identity Filter optimisations
- Storage
- Added revised SQL backend in seperate dotNetRDF.Data.Sql.dll library
- Added ListGraphs() support for Fuseki
- Writing
- Added additional interfaces to Formatting namespace
- Added formatters for RDF/XML and SPARQL XML Results
- Dependency Changes
- OpenLink.Data.Virtuoso.dll removed as dependency - Virtuoso support now in seperate dotNetRDF.Data.Virtuoso.dll library
- Updated to latest Json.Net release - now using Newtonsoft.Json.Net35.dll as the standard build of Json.Net has moved to .Net 4.0
- Bug Fixes
- SPARQL Tokeniser allows more than one ORDER BY keyword
- Turtle Parser now permits nested collections i.e. ( "item" ( "subcollection" ) )
- Fixes to AllegroGraphConnector to support 4.x HTTP protocol changes based on bug reports from Sascha Dech
- Fixed a configuration bug with BaseDatasetHandlerConfiguration
- Fixed a bug where NegotiateByFileExtension module could cause special ASP.Net extensions like .axd to not be respected properly
- Fixed a bug where attempts to use synchronous HTTP on Silverlight/WP7 would hang applications
- Fixed a bug where temporary namespace generation for properties would fail in PrettyRdfXmlWriter
- Fixed a bug where IF evaluation deviated from latest SPARQL 1.1 Query working drafts
- Query
- Further refactored the Leviathan engine to make it even easier to extend
- The majority of methods on the engine can now be overridden
- Abstracted Set to an interface
- RDF and Results Handler may now be used to process query results in all places where an IGraph or SparqlResultSet can be returned
i.e. new overloads for all relevant query related methods
- Describe API Changes
- Breaking changes to the Describe API to allow for use of RDF Handlers for streaming processing of the returned results
- Optimisation Improvements
- Improvements to internal data structures for faster evaluation
- Subqueries now get the parent queries Algebra Optimisers applied to them
- Storage
- Improved support for AllegroGraph 4x including support for root catalog
- Additions to the IGenericIOManager interface
- Added more overloads for LoadGraph() which load using an IRdfHandler
- Marked various things as obsolete but usable
- All ISqlIOManager related classes
- GenericReader, GenericWriter and GenericStoreWriter
- TalisTripleStore and VirtuosoTripleStore
- SparqlQuery.Evaluate() methods
- Marked some classes previously marked obsolete as unusable
- BackgroundPersistedGraph
- BlockingStreamReader
- Old form of ToCache() method on IUriLoader interface
- Old form of GraphPattern.Optimise() method
- QueryText property of SparqlParameterizedString
- Old form of WriterHelper.FindCollections() method
0.4.1 Beta
- General Improvements
- Added a GraphPersistenceWrapper which is an IGraph implementation which tracks changes to the wrapped
Graph when those changes pass through it and allow the changes to be Flushed/Discarded as desired
- Added a StoreGraphPersistenceWrapper which flushes changes to some underlying IGenericIOManager
- Added a FileGraphPersistenceWrapper which flushes changes to a file on disk
- Improved the HTTP Accept Headers we send
- Parsing
- New IRdfHandler and ISparqlResultsHandler interface allows parsing to arbitrary RDF/SPARQL Results Handlers
- Provided various implementations of this:
- CountHandler for just counting triples
- GraphHandler for parsing into IGraph instances
- NullHandler for discarding the triples (useful for just validating the RDF)
- PagingHandler for getting a slice of the triples
- ResultCountHandler for counting SPARQL Results
- ResultSetHandler for parsing SPARQL Results into SparqlResultSet's
- StoreHandler for parsing into ITripleStore instances
- StoreCountHandler for counting Triples and Graphs
- WriteThroughHandler for generating RDF output while parsing
- WriteToStoreHandler for sending the triples in batches to some underlying store
- ChainedHandler and MultiHandler for combining multiple RDF handlers together
- CancellableHandler for wrapping other Handlers and being able to cancel parsing (assuming async code)
- Update
- Added support for Timeouts when using the LeviathanUpdateProcessor and the ProcessCommandSet() method
- Added support for transactions
- Writing
- Added a PrettyRdfXmlWriter which is a streaming writer which writes more readable RDF/XML than the other RDF/XML writers
- ASP.Net Integration
- Added NegotiateByFileExtension which is an IHttpModule that can be used to provide content negotiation by file extension
seamlessly for all existing IHttpHandler implementations
- Bug Fixes
- Improved detection of MIME Type from file extension to allow consideration of all possible types
for an extension
- If RDF/XML parsing failed then the input stream is now always closed
- Bug fix for malformed SPARQL XML Output when some variables were bound to null for a result
- TriX no longer allows anonymous Graph IDs
- TriX Parser no longer parses <typedLiteral> elements incorrectly
- Bug fix for incorrect literal escaping in some cases for all writers
- TriG Parser no longer fails to handle string escapes correctly
- RdfXmlWriter would fail to output some collections in some cases
- Bug fix for incorrect rdfs:range and rdfs:domain handling in RdfsReasoner
- Bug fix to how BINDs are parsed and placed in SPARQL Queries
- Bug fix on converting SPARQL Queries into Strings to ensure BINDs are placed correctly
- General Improvements
- Improved abstraction in BaseDataset so all the active/default graph management is handled by the
base class
- Parsing Improvements
- Internal parser subsystem rewritten to use IRdfHandler and ISparqlResultsHandler
- Improved buffering of input
- IRdfReader expanded
- Now has overloads for parsing to an IRdfHandler instance as well as to an IGraph instance
- Now has overloads for parsing from any TextReader (not just StreamReader)
- IStoreReader expanded
- Now has overloads for parsing to an IRdfHandler instance as well as to an ITripleStore instances
- IStoreReader implementations which accept StreamParams now also accept TextReaderParams for reading
from any TextReader
- ISparqlResultsReader expanded
- Now has overloads for parsing to an ISparqlResultsHandler instance as well as to a SparqlResultSet instance
- Now has overloads for parsing from any TextReader (not just StreamReader)
- All static loaders (DataUriLoader, EmbeddedResourceLoader, FileLoad and UriLoader) now have overloads that take
IRdfHandler instances
- Query Improvements
- Ensured proper thread safety for queries when used with appropriately implemented ISparqlDataset's so that Queries
can never interfere with each other
- Improved Timeout support particularly with regards to getting stuck calculating products
- Reduced global timeout setting to 3 minutes (previously 5 minutes)
- Ensured that timeouts still apply during lazy evaluation of appropriate SELECT/ASK queries
- Update Improvements
- InMemoryDataset and SqlDataset now provide transactionality
- LeviathanUpdateProcessor now runs each Command Set in a Transaction unless AutoCommit is set to false
- Writing Improvements
- Various fixes and improvements to collection compression for compressing writers
- IStoreWriter implementations which accept StreamParams now also accept TextWriterParams for writing
to any TextWriter
- RDF/XML writers now include the Base URI (if any) of the Graph being written on the document element using xml:base
- ASP.Net Improvements
- SPARQL Update handler improvements
- They now check command set for permissible actions prior to evaluating any of the command set
- They no longer support the non-standard dnr:haltOnError behaviour
- They now evaluate command sets as entire sets rather than 1 command at a time
- Following marked obsolete but usable
- TalisGraph (suggest use of StoreGraphPersistenceWrapper instead)
- Following marked as obsolete and unusable
- BackgroundPersistedGraph (superceded by GraphPersistenceWrapper)
- StoreGraph and WriteOnlyStoreGraph (superceded by StoreGraphPersistenceWrapper)
- RdfXmlTreeWriter (superceded by FastRdfXmlWriter, RdfXmlWriter and PrettyRdfXmlWriter)
0.4.0 Beta
- Graph Difference Algorithm
- Conversion from IGraph and SparqlResultSet to DataTable
- More Extension Methods
- LoadFromFile and LoadFromUri for Graphs and Triple Stores
- ToLiteral for byte and sbyte
- ToLiteralDate and ToLiteralTime for DateTime (gives only the xsd:date or xsd:time representation)
- ASP.Net Integration
- DatasetHandler for serving RDF datasets
- QueryHandler, UpdateHandler and SparqlServer all now return SPARQL Service Description where appropriate
- Configuration API
- dnr:SparqlDataset and dnr:usingDataset properties
- All new IGenericIOManager implementations - Fuseki, In-Memory and Read-Only - are now loadable via the ConfigurationLoader
- dnr:enableCors property for disabling CORS Headers on HTTP Handlers
- dnr:serviceDescription property for supplying own SPARQL Service Description for SPARQL Handlers
- dnr:fromEmbedded property for loading data from embedded resources
- Parsing
- Additional N3 Feature Support
- Variable Nodes
- New SimpleN3RulesReasoner which can process simple N3 rules of the form { } => { }
- Notation 3 Parser supports Variables, @forSome and @forAll fully
- New EmbeddedResourceLoader for loading RDF from embedded resources in assemblies
- Query
- GROUP BY is now supported in subqueries
- GROUP BY (?x AS ?y) now supported
- Short form CONSTRUCT WHERE { } now supported
- Scalar Arguments for aggregates added when in 1.1 Extended mode (only GROUP_CONCAT allows scalar arguments in 1.1 mode)
- Added new SPARQL 1.1 functions
- Numeric Functions - ABS, CEIL, FLOOR, ROUND and ISNUMERIC
- Hash Functions - MD5, SHA1, SHA224, SHA256, SHA384, SHA512
- Additional Pellet Server Client features
- ICV, Cluster, Predict and Similairty Services now supported
- Update
- Added support for HTTP PATCH operation to SPARQL Uniform HTTP Protocol implementations
- Added support for use of ?default as opposed to ?graph in the SPARQL Uniform HTTP Protocol support
- Added support for the newly defined SPARQL Update 1.1 ADD, COPY and DELETE commands
- Storage
- Expanded the IGenericIOManager interface to include methods for deletings graphs and listing graphs
- Connector for Fuseki
- Connector which wraps an in-memory store (i.e. a IInMemoryQueryableStore) or a SPARQL dataset (i.e. a ISparqlDataset)
- Connector which wraps any IGenericIOManager/IQueryableGenericIOManager and makes it read-only
- Writing
- New HtmlSchemaWriter outputs HTML versions of ontologies in a schema specification style rather than as a table like the existing HtmlWriter
- New IQueryFormatter interface to allow customised formatting of SPARQL Queries
- Bug Fixes
- Notation 3 Parser allows variable quantification directives in Graph Literals
- Queries with a LIMIT modifier containing FILTERs were optimised for lazy evaluation but would return incorrect results
in some cases
- Queries with a DISTINCT modifer and a LIMIT were optimised for lazy evaluation when they shouldn't have been
- Queries containing GRAPH clauses no longer unintentionally introduce a Product in some places
- RDF/XML parser now correctly treats empty elements with rdf:datatype as literal properties rather than empty properties
- SPARQL Query Parser now parses correctly if first item in the WHERE clause is a nested graph pattern
- Non-Leviathan Query Processors record the time the Query took to execute
- Some bug fixes around LiteralNode value comparisons regarding equivalences between .Net types and XML Schema types
- Validation of Language Tags was overzealous and rejected some valid language tags and in some places language
tags weren't validated when they should have been
- RDF/XML writer failed to properly XML encode URIs which contained multiple unescaped ampersands
- Lots of bug fixes around interpretation of the SPARQL 1.1 specifications
- Bug fix for incorrect rdfs:range and rdfs:domain handling in RdfsReasoner
- General Improvements
- Internal restructuring of how MIME Types are managed
- Allows for new MIME Types, File Extensions and parsers to be registered with the API and used automatically where appropriate
- Can use dotnetrdf:default-graph as a URI to explicitly access the default unnamed graph in a SPARQL dataset for most in-memory datasets
- Parsing
- All Parsers should now throw RdfParseExceptions when null Graphs, Stores, filenames, streams etc are passed as arguments
- SparqlRdfParser can now be created to use a specific RDF Parser rather than just auto-detection
- UriLoader Caching improved
- URIs are santised when being cached
- Data is cached under both the request and response URIS
- Extracted existing private implementation into an interface so users can choose to slot in alternative caching mechanisms if desired
- Parsers all open files with the appropriate encoding where possible
- Streams in the wrong encoded will cause parsers to issue a warning
- Added Warning events to ISparqlResultsReader, ISparqlResultsWriter, SparqlQueryParser and SparqlUpdateParser
- Query Improvements
- Syntax is now SPARQL 1.1 Standard by default (rather than 1.1 Extended)
- Leviathan SPARQL engine now operates over an ISparqlDataset which is an abstraction between the data and the
SPARQL engine which allows for out of memory datasets to be queried and updated with Leviathan
- Reverse Translation from ISparqlAlgebra to SparqlQuery
- Optimisation for queries using ORDER BY under some circumstances
- Loads of fixes to SPARQL Join Semantics
- Improvements to GRAPH clause implementation
- Improved SparqlParameterizedString
- Can now set values for Variables which are substituted into the query when you call ToString()
- Has own Namespace Map allowing prefixes to be registered programatically and have the code take care of generating the PREFIX declarations
- Improved ISparqlExpression interface to allow for traversing of expression trees and custom formatting
- Changes to support latest 1.1 Draft Specifications
- IN and NOT IN for SPARQL now support any expressions evaluate properly using SPARQL value equality
- COALESCE now errors if none of the arguments evaluate to a non-null value
- Update Improvements
- WHERE clauses in Update Commands are now optimised
- Added support for revised syntax of existing commands based on latest drafts of the SPARQL 1.1 Update specification
- Writing Improvements
- Writers all try to ensure correct encoding where possible (most already did this)
- ASP.Net Improvements
- All HTTP Handlers output CORS headers so RDF/SPARQL content is accessible to JS client (may be disabled
using dnr:enableCors if desired on a per HTTP Handler basis)
- SparqlServer now supports omitting any of the processors (provided at least one is specified) so you can create
endpoints with some features explicitly disabled
- Obsoleted Features
- All ISqlIOManager features marked as obsolete (but still allowed until 0.5.x most likely at which point they will be removed/replaced)
- RdfXmlTreeWriter and FastRdfXmlWriter marked as obsolete
- SparqlParamaterizedString QueryText property marked obsolete in favour of the more general and descriptive CommandText property
- Obsolete VDS.RDF.Web classes removed
- Removed obsolete methods related to Labyrinth SPARQL engine
- Removed dataset management methods from ITripleStore and implementations
- IBinaryOperator marker interface removed as ISparqlExpression.Type can now be used to determine whether an expression
is a binary operator
- Removed obsolete and unused IRdfTranslator and corresponding VDS.RDF.Translation namespace
0.3.1 Alpha
- New RdfXmlWriter which is a streaming writer based on FastRdfXmlWriter
- New Writing.Formatting namespaces
- Introduces ITripleFormatter, INodeFormatter, IUriFormatter and ICharFormatter interfaces
- Provides an easy to use and reusable means of formatting nodes and triples
- Refactored existing code to use formatters for writing
- New Parsing.Validation namespace
- Provides simple classes for validating syntax
- SPARQL Views
- Create Graphs which are dynamically generated from a SPARQL Query and updated when the underlying data changes/on demand
- Silverlight Compatability
- Emulated HtmlTextWriter and HttpUtility for Silverlight compatability
- Variety of compiler symbols defined to allow various library features to be disabled
- SparqlXmlParser and SparqlXmlWriter use XmlReader and XmlWriter respectively when no XML DOM API available
- TriXParser and TriXWriter use XmlReader and XmlWriter respectively when no XML DOM API available
- Bug Fixes
- SqlTripleStore initialises correctly and persists updates correctly when used with an ISparqlUpdateProcessor
- More intelligent parsing of Blank Node IDs from SPARQL Results
- TriG Writer outputs all required @prefix definitions and generates consistent QNames
- URI Loader Cache handles File IO errors gracefully
- Rare forms of Numeric Literals now supported by Turtle, N3, TriG and SPARQL Parsers
- Potentially ambigious QNames and Plain Literals now no longer cause parsing errors in Turtle, N3, TriG and SPARQL Parsers
- DESCRIBE query results are received correctly from Sesame
- Using UpdateGraph() to delete Triples from Sesame/AllegroGraph deletes the correct Triples not the entire context
- General Improvements
- INamespaceMapper interface extracted and some visibility changes to NamespaceMapper methods
- Options.UriLoaderTimeout for controlling UriLoader Timeout
- Most parsers generate more helpful error messages for various error conditions and much more frequently attach Position Information to errors
- SPARQL Improvements
- Optimisations for ASK queries
- Optimisations for CONSTRUCT/DESCRIBE/SELECT where LIMIT/OFFSET is used
- SparqlXmlWriter uses streamed writing to allow it to produce output much faster using much less memory
- ASP.Net Improvements
- Better caching support for BaseGraphHandler - now sends ETag in responses and may respond with 304 Not Modified as appropriate
- Obsolete RdfXmlWriter removed
0.3.0 Alpha
- SPARQL 1.1 Query
- Added support for proper IF function
- Added support for MINUS patterns
- Added support for SERVICE patterns
- Added support for BINDINGS clause
- FederatedSparqlRemoteEndpoint class for federated querying
- ISparqlQueryProcessor interface for defining custom query processors
- Multiple processor implementations provided
- SPARQL 1.1 Update
- New IUpdateableTripleStore interface
- TripleStore class supports updates
- Classes for representing different Update Commands
- Parser for SPARQL Update
- ISparqlUpdateProcessor for defining custom update processors
- Multiple processor implementations provided
- Apply full SPARQL Update on any Triple Store represented by an IGenericIOManager (full support dependent on features provided by IGenericIOManager)
- New handler class for providing an endpoint supporting this protocol in your ASP.Net applications
- SPARQL 1.1 Uniform HTTP Protocol for Graph Management
- New SparqlHttpProtocolConnector for connecting to stores supporting this protocol
- New handler class for providing an endpoint supporting this protocol in your ASP.Net applications
- ISparqlHttpProtocolProcessor for defining custom protocol processors
- Multiple processor implementations provided
- RDFa Support
- RDFa 1.1 is supported
- RdfAParser now supports selectable syntax compliance
- New Configuration System
- New RDF based configuration system
- Allows for the encoding of various objects as RDF and the loading of these Objects from the RDF Graph
- Much simpler mechanism for configuring ASP.Net applications
- Pellet Server Client
- Support for connecting to and using a Pellet Server knowledge base
- General Improvements
- FileLoader and UriLoader can now raise warning events
- Bug Fixes
- Turtle Tokeniser supports + at the start of plain numeric literals
- Fixed faulty behaviour of == and != operators for Nodes when nulls are involved
- Turtle and N3 parsers remove incorrect behaviour regarding unescaped " occurring at end of string
- Turtle and N3 writers now always escape " character
- UriLoader caching behaviour when using ETag based caching fixed
- Some issues with persistence in the StoreGraph fixed
- Disposing ISqlIOManager multiple times without PreserveState on no longer hangs the process
- RDF/XML writers properly encode unescaped ampersands where necessary
- Sorting involving literal nodes no longer fails if invalid values for known types are given
- RDF/XML parser should now properly handle xml:base and provide better xml:base scoping support
- Now only Leviathan engine present in the library
- Unified Tokeniser for SPARQL Query and Update
- SparqlConnector improved
- Can be instantiated with pre-configured SparqlRemoteEndpoint instance
- Properties for manipulating the underlying endpoint added
- SparqlRemoteEndpoint improved
- Default timeout increased to 30s instead of 15s
- Support for HTTP Authentication and Proxy Servers
- SPARQL Endpoints
- New handlers for providing Query, Update and Protocol services so all existing query handlers are now marked
as obsolete
- Support no-caching though this is not recommended
- Supports absolute cache expiration
- General Improvements
- Library now uses IAsyncResult pattern in many places as opposed to manual thread spawning
- More writers made thread safe
- Improved how compressing writers detect collections to significantly improve speed on blank node heavy graphs
- Removed obsolete verison of QueryRaw() from SparqlRemoteEndpoint
- Removed/obsoleted all methods and implementation pertaining to the Labyrinth SPARQL Engine
- Removed defunct LocalName and Namespace properties from UriNode
0.2.2 Alpha
- SPARQL 1.1
- All property paths can be executed
- All aggregates support DISTINCT modifier
- IN and NOT IN syntax in FILTERs
- Limited IF ELSE support
- URI Loader Caching
- Ontology API
- Resource and Ontology centric API
- Reasoner Graph for wrapping a Graph and a reasoners results into one Graph
- Initial API Outline for OWL support (no implementation)
- Union Collections for Triples and Nodes
- Support for data: URIs
- Sub-graph matching
- Bug Fixes
- Language Specifier handling in TriG and NTriples
- RDFa parser bug fix for documents without DOCTYPE
- Invalid QNames output in some scenarios
- SparqlParameterizedString inserts variables in a more accurate way
- CDATA elements in RDF/XML handled properly
- SPARQL Optimisations
- Much more scalable performance for in-memory SPARQL on large datasets using the Leviathan engine
0.2.1 Alpha
- RDFa Parser
- SPARQL 1.1 Property Paths
- All valid paths are parsed
- Simple paths are executed
- SparqlParameterizedString class for dynamically building SPARQL queries and avoiding SPARQL Injection
- SparqlConnector has a SkipLocalParsing property to allow SPARQL queries with vendor specific extensions
to be made
- Bug Fixes
- Some Blank Nodes QNames in SPARQL weren't parsed correctly
- Long Literals in Turtle, N3 and TriG which had quotes at the end now parse correctly
- Both Turtle & N3 Tokenisers altered to derive from the BaseTokeniser class
- 4store HTTP timeout issues solved
- Talis HTTP timeout issues solved
- JSON parsers handle language specifiers correctly
- Improved Virtuoso support
- Turtle tokeniser handles escapes better
- HTML Writer now writes XHTML+RDFa
- 4store connector has experimental support for updates added
- RDFS Reasoner does property hierarchy, domain and range inferencing
- Some fixes and optimisations for SPARQL queries
0.2.0 Alpha
- Graph Equality
- SPARQL Result Set Equality
- Joseki support tested and verified (exact support varies depending on the store the Joseki server exposes)
- Query Improvements
- New Leviathan engine which conforms much more closely to the SPARQL specification
- Support for some additional SPARQL extensions
- Large parts of the XPath function library for strings, numerics and date times now available
- Support for the ARQ (Jena's SPARQL engine) function library to permit query portability
- Support for our own Leviathan Function Library which provides a wealth of numeric functions
- NMAX/NMIN aggregates - numeric maxmimum/minimum
- MEDIAN and MODE aggregates
- LET assignment
- CSV and TSV Result serializers
- XSLT serializer
- Serialization Improvements
- CSV, TSV and HTML serializers for RDF
- CSV and TSV serializers for RDF Datasets
- New QName mapper for serialization ensures correct QNames for all URIs
- ASP.Net Integration
- New SchemaHandler for serving RDF schemas
- New FileHandler for serving single RDF files at fixed URIs e.g. FOAF files
- API Improvements/Changes (This release includes many breaking changes from the 0.1.x API)
- Renamed many classes to better conform to the Microsoft Class Library design guidelines
- Bug Fixes
- File Loader assigns absolute File URIs
- Many bug fixes to the SPARQL engine
- DATATYPE and LANGMATCHES work correctly
- Certain types of ASK now work correctly
- = and != operator do value equality on known types rather than term equality
- Relational operators do improved value relations on known types rather than term ordering
- Complex OPTIONALs and UNIONs work correctly (Leviathan support is far better than Labyrinth)
- Turtle Tokeniser
- Parses complex Language Specifiers correctly
- Parses boolean constants correctly in all cases
- TriG Tokeniser now parses long literals correctly in all cases
- Indexed Triple Collections failed to return Node enumerations as Distinct() enumerations which meant
many writers weren't using High Speed mode when they should have done
- Various parts of the Labyrinth engine rewritten, improved and bug fixed
- Support for all mandatory SPARQL 1.1 features in the latest working draft (not all features are supported by Labyrinth)
- Serialization Improvements
- All serializers are thread safe
- NTriples writers
- Fixes to output escaping for some writers to ensure valid syntax is always produced
- Standardised Node Output
- URIs containing special characters now get escaped correctly where necessary
- ASP.Net Integration
- SparqlHandler and FileSparqlHandler now support defining Custom Expression Factories
- VirtuosoGraph removed as offered no additional functionality over StoreGraph
0.1.3 Alpha
- Bug Fixes
- Some kinds of Graph which failed to serialize to RDF/XML are now serialized OK
- Sesame and AllegroGraph connectors now properly initialise the Base URI of the Graph they load into
- Collection output properly generated by Fast RDF/XML writer
- Turtle & Notation 3 Parsers no longer have any Blank Node handling issues
- TriG Parser now handles files containing comments better
- Storage Improvements
- Experimental support for Joseki
- Change to 4store connector to try and mitigate the high HTTP timeout rate
- Parsing Improvements
- Newly rewritten Turtle and Notation 3 parsers are marginally faster and much more maintainable
- Use of Parser Contexts on several parsers to make them fully Thread Safe
- Query Improvements
- Basic Query optimisation by Triple Pattern reordering within each Graph Pattern
- Change to a few of the base implementations of functions of Triple Collections so even without full indexing
queries over two parts of the Triple should be faster
- Serialization Improvements
- Use of Writer Contexts for various writers to make them fully Thread Safe
- Eliminated a potential issue with outputting some Blank Nodes
0.1.2 Alpha
- Bug Fixes
- Error in URI Resolution of QNames in the default namespace when no default namespace is defined (i.e. resolution is against
the base URI has been fixed)
- Long queries passed to a SPARQLRemoteEndpoint get POSTed to the endpoint to avoid an issue with HttpWebRequest
- Query Improvements
- Eliminated the duplicate results bug
- Removed the obsolete constructors from SPARQLResultSet
- Better encapsulation of the data in a SPARQLResultSet
- Improved the ISPARQLResultsReader implementations to make them fully thread safe
- Improved Query Tokeniser
- Use of Indexing for significantly faster querying
- Experimental support for Inference
- All classes derived from TripleStore implement the new IInferencingTripleStore interface
- Ability to attach Reasoners to SPARQL Endpoints created with the SPARQL Handler
- Basic RDFS Class Hierarchy and SKOS Concept Hierarchy Reasoners provided
- Experimental support for SPARQL 1.1 Features (Note that SPARQL 1.1 is still in early working draft stage)
- Aggregate Functions: AVG, COUNT, MAX, MIN and SUM
- Projection Expression in SELECT Clauses
- GROUP BY and HAVING Clauses
- Storage Improvements
- Support for native query on Virtuoso
- Support for 4store
- Support for AllegroGraph
- Support for any server that supports the Sesame 2.0 HTTP Protocol
- Parsing Improvements
- New FileLoader class can be used to load an RDF Graph/Dataset from a file without instantiating a parser directly
- Support for additional dataset syntaxes - NQuads and TriX
- Serialization Improvements
- FastRDFXMLWriter now generates much nicer RDF/XML syntax at a speed of around 25,000 triples/second
- Support for serializing to NQuads and TriX
- Some bug fixes to our internal XML writer
- TriG writer uses the fast writing algorithm to improve it's output speed
- ASP.Net Integration Improvements
- Bug fixes to support running on IIS in non-integrated mode
- Added a NativeSPARQLHandler which lets you query a Talis/Virtuoso/4store/AllegroGraph/Sesame store from your web application
- Added a FileSPARQLHandler which lets you query an RDF file or folder of RDF files
- All SPARQL Handlers now allow you to control the Cache duration
- Other Improvements
- Improved NamespaceMapper imports other NamespaceMaps more intelligently
- New Global Option for controlling Default Compression Level on writers returned by MIMETypesHelper
- Use of indexing under the hood to make major improvements to
- New HashTable class used for storage and indexing in various places to give performance boosts
0.1.1 Re-release
- Bug Fixes
- New BlankNodeMapper ensures that users can't accidentally define Blank Node IDs which clash with auto-assigned IDs
- Faster writers don't produce invalid syntax when compression level is set to None
- NativeNTriplesParser parses simple literal objects correctly
0.1.1 Alpha
- Parsing Improvements
- Major performance improvements for Parsers thanks to changes in the underyling memory storage of Nodes and Triples
- Added RDJ/JSON and SPARQL Results JSON Support
- Added TriG support
- Added support for parsing raw RDF strings without the data needing to be in a File/Stream
- Full Unicode Escape Support in all Parsers which use it
- Serialization Improvements
- RDFXMLTreeWriter provides a more powerful RDF/XML Writer which can use most of the RDF/XML syntax compressions
- CompressingTurtleWriter provides a more powerful Turtle Writer which can use all of the Turtle syntax compressions
- NTriplesWriter now correctly converts non-ASCII characters into Unicode escapes
- Major improvements in speed to all the NTriples like (NTriples, Turtle and Notation 3) writers and the RDF/JSON writer
- FastRDFXMLWriter provides a fast RDF/XML writer but currently produces very verbose uncompressed syntax
- Storage Improvments
- Improved Database format now provides faster read speeds and significantly improved write speeds depending on usage
- Support for additional RDF Stores
- Improved API allows for easy integration of other Stores with the Library
- Added support for the Talis Platform
- Added support for Virtuoso Universal Server
- Added Thread Safe versions of Graph and SQLGraph
- Improvements to Node & Triple Equality calculation
- Some minor tweaks to SPARQL implementation
- Added more SPARQL Result Serializers
- Better Content Negotation Support
- Bug Fixes to retrieving RDF and SPARQL Results over HTTP
- Bug Fixes to URI Resolution
- Added a simple to configure SPARQLHandler to the Library
0.1.0 Alpha
- Initial API release