- From: Joshua Tauberer <jt@occams.info>
- Date: Sun, 10 Jun 2007 17:32:55 -0400
- To: semantic-web at W3C <semantic-web@w3c.org>
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