SemWeb RDF C# Library version 1.0

I didn't plan it this way, but it was exactly two years ago to the day 
that I emailed the list announcing a relatively new project, a RDF 
library in C#. This post announces version 1.0 of the project.

SemWeb: RDF Library for .NET
============================

http://razor.occams.info/code/semweb/
Version 1.0

Mail list: http://groups.yahoo.com/group/semweb-dotnet/

Overview
--------

SemWeb is my Semantic Web/RDF library written in C# for Microsoft's .NET 
1.1/2.0 or Mono. The library can be used for reading and writing RDF 
(XML, N3), keeping RDF in persistent storage (memory, MySQL, etc.), and 
querying persistent storage via simple graph matching and SPARQL, and 
making SPARQL queries to remote endpoints. Limited RDFS and 
general-purpose inferencing is also possible. SemWeb's API is 
straight-forward and flexible.

SemWeb is released under the terms of the Creative Commons Attribution 
License (why? I dunno). SPARQL support is based on Ryan Levering's 
SPARQL implementation in Java, converted to .NET with IKVM. The Euler 
class for general-purpose inferencing is adapted from Jos De Roo's 
JavaScript Euler inferencing engine.

Benchmarks
----------

I've used the library to create a triple store of over 50 million 
triples, and I'd have gone higher if I had the hard drive space. Loading 
the LUBM(50) benchmark of 6.9M triples into a MySQL backend, on modest 
desktop hardware, took 30 minutes (3.8k stmts/sec), and 769 MB (117 
bytes/stmt). Many of the LUBM sample queries were possible and finished 
in about 2 seconds (not great).

Features
--------

* Straightforward and consistent API; really easy to deploy; no 
platform-specific dependencies.
* RDF/XML: Reading and writing RDF/XML.
* Notation 3: Reading/writing NTriples, Turtle, and most of Notation 3.
* SQL DB-backed persistent storage for MySQL, Sqlite, and PostgreSQL. 
  * There is of course also a memory-backed store.
* Persistent storage supports an extended Select operation to query many 
things at once (much faster than making individual calls to the 
underlying database).
* Reasoning: RDFS reasoning (though not complete) and rule-based 
reasoning based on the backward-chaining Euler engine, over any data.
* 4-Tuples: Statements are quads, not triples. The fourth meta field can 
be used for application-specific purposes, like storing provenance, 
grouping statements, or storing N3 formulas.
* Querying: Simple graph entailment tests and SPARQL queries over any 
data source, a remote SPARQL store (read-only persistent storage backed 
by a remote SPARQL-over-HTTP service and methods for making arbitrary 
SPARQL queries), and an ASP.NET SPARQL Protocol handler.
* Extensibility: Implementing new persistent storage or sources of 
statements is as simple as implementing an interface.
* Experimental/undocumented algorithms for finding MSGs and making 
graphs lean.

That's it
---------

(Thanks to everyone who has sent in bug reports over the last two years!)

-- 
- Josh Tauberer

http://razor.occams.info

"Yields falsehood when preceded by its quotation!  Yields
falsehood when preceded by its quotation!" Achilles to
Tortoise (in "Gödel, Escher, Bach" by Douglas Hofstadter)

Received on Sunday, 10 June 2007 21:33:06 UTC