- From: Geoff Chappell <geoff@sover.net>
- Date: Wed, 7 Nov 2001 18:46:04 -0500
- To: <www-rdf-rules@w3.org>
Hi dan, libby, et al, I'll go next... We've developed a query and inference server for RDF that runs on Win32 called RDF Gateway. For those of you who haven't seen it, it's an rdf-based deductive database with a SQL-like query language. It supports rules, transactions, federated queries against multiple triple tables and external data sources (rdf files, web sites, etc through an external data service interface), supports simultaneous connections, users with role-based security, and lots of other cool stuff. It's in-memory and provides persistence through sql backends (tested with ms sql server and oracle). It's accessed by clients via a socket-based protocol, win32 client libs, ADO, or JDBC( this last one's alpha quality). We've also written to go along with it a scriptable crawler, a query tool, and a nice management app. A 2nd beta was recently released an is available for download at www.intellidimension.com if you're interested in checking it out. We'd originally prototyped the server on top of SWI prolog, but switched to our own custom implementation of a deductive database when we found we couldn't get the performance we wanted. The set-at-a-time vs. tuple-at-a-time of the ddb vs prolog and simple comparison vs unification seem to make a big difference (especially if you have a lot of recursively inferred values). We type values internally (either Uri or Literal at this point) and type the return values as well. We'll likely add to those in the future (I'm watching the datatype discussions of the core wg with great interest.) We have a pretty good collection of functions - math, datetime, string (including regex), and a few aggregation functions (eg count). We support either triples or quads (pso + statement/context id). We support AND, OR, NOT (negation as failure), = (label and type only), and misc other operators. Our inference languages is pretty straight forward -allows you to infer a triple from what is syntactically equivalent to a select - for example: infer {[rdfs:subClassOf] ?a ?c} from {[rdfs:subClassOf] ?a ?b} and {[rdfs:subClassOf] ?b ?c} We currently give no explicit control over variable quantification. We do some level of query optimization but plan to do more. We make some attempt to resolve stratification issues but you can definitely break things (i.e. get incorrect results) with too much use of negation and aggregation functions. I'll stop...probably already more than you wanted to know :) Regards, Geoff Chappell
Received on Wednesday, 7 November 2001 20:22:22 UTC