March 5th, 2012· Changed
· 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)
March 1st, 2011Added:
· 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
· String Functions - CONCAT, CONTAINS, ENCODE_FOR_URI, LCASE, STRENDS, STRLEN, STRSTARTS, SUBSTR, UCASE
· Date Time Functions - DAY, HOURS, MINUTES, MONTH, NOW, SECONDS, TIMEZONE, TZ and YEAR
· 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
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
Removed:
· 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
August 12th, 2010Bug 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
· SPARQL
· Unified Tokeniser for SPARQL Query and Update
· SPARQL 1.1 Query
· Now only Leviathan engine present in the library
· 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
· 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
· 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
· 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
August 12th, 2010Bug Fixes:
· CDATA nodes in RDF/XML handled properly
August 12th, 2010Bug Fixes:
· Language Specifier handling for TriG and NTriples
· RDFa parsing of documents without a DOCTYPE
· Invalid QNames were output in some scenarios
· SparqlParameterizedString inserts variables in a more accurate way
General Improvements:
· Sub-graph matching
· Union collections for Triples and Nodes
Query Improvements:
· DISTINCT modifier for all aggregates
· xsd:float calculations for numeric aggregates
· Full property path support
· IN and NOT IN operator support
· New COALESCE, IRI, STRDT and STRLANG functions supported
· Limited IF ELSE support
· Major optimisations for much more scalable query on large datasets using Leviathan
· Initial API outline for OWL support (no implementation yet)
Parsing Improvements:
· Caching of Graphs by URI Loader for more efficient data retrieval
· Support for @prefix attribute in RDFa 1.1 (based on current working group drafts)
· Support for loading from data: URIs
· Ontology API
· New API for working with RDF data in terms of ontologies, resources, classes, properties and individuals
· ReasonerGraph class provides for having a Graph which wraps an existing Graph and materialises the triples
· inferred by a reasoner in itself without altering the wrapped Graph
August 12th, 2010Bug Fixes:
· SPARQL Parser accepts all Blank Node QNames
· Long Literals and Escapes in Turtle, N3 and TriG weren't correctly read in some cases
· Various fixes to Virtuoso support
· JSON Parser parses Language specifiers correctly
Parsing Improvements:
· Addition of an RDFa Parser
· Long Literals in Turtle, N3 and TriG which had quotes at the end now parse correctly
· Both Turtle & N3 Tokenisers refactored to derive from the standard BaseTokeniser class
· Turtle tokeniser handles escapes better
Query Improvements:
· ARQ function library now automatically registered
· Optimisation for GRAPH ?g {} pattern
· SparqlParameterizedString class for dynamically building queries and preventing SPARQL Injection
Serialization Improvements:
· More consistent and correct character escaping
· HTML Writer for Graphs now writes XHTML+RDFa
· IHtmlWriter interface provides for customising the CSS classes uses for page elements
· CSV and TSV writers for SPARQL Results don't write trailing commas/tabs to lines any more
Storage Improvements:
· Improvements Virtuoso support based on feedback from OpenLink software and end users
· Virtuoso 6 support (see Known Issues)
· Various fixes for communicating with Stores over RESTful HTTP APIs
· SparqlConnector allows you to disable local parsing so you can use vendor specific SPARQL extensions in
· queries
August 12th, 2010· 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
· Graph equality supported (may not work for very large/complex Graphs)
· Result Set equality supported (may not work for very large/complex Result Sets)
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
Storage Improvements:
· Joseki support tested and verified (exact support varies depending on the store the Joseki server exposes)
Query Improvements:
· 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)
· 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
· http://www.dotnetrdf.org/leviathan# - RDF description of function library
· NMAX/NMIN aggregates - numeric maxmimum/minimum
· MEDIAN and MODE aggregates
· LET assignment
· Brand new Leviathan engine which conforms much more closely to the SPARQL specification
· Algebra based evaluation model
· Now the default engine for executing queries in-memory SPARQL
· CSV and TSV Result serializers
· XSLT serializer
· 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
· 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
· SparqlHandler and FileSparqlHandler now support defining Custom Expression Factories
August 12th, 2010Bug 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
November 30th, 2009· 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
November 2nd, 2009· 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
November 2nd, 2009· 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