- From: Sandro Hawke <sandro@w3.org>
- Date: Fri, 22 Feb 2002 15:11:11 -0500
- To: "Tim Berners-Lee" <timbl@w3.org>
- cc: "Norman Walsh" <ndw@nwalsh.com>, www-rdf-interest@w3.org, "Dan Connolly" <connolly@w3.org>
> (I need to clone it in C or machine code, but that's another matter)
Cwm is somewhat similar to a prolog interpeter, and that's an area for
optimization which has been heavily mined. I wrote experimental
(prolog) code to translate some cwm code into prolog [1], but it only
worked with log:forAll, log:implies, and log:Truth; and only acted
like cwm in "-think" mode. It also did not attempt an
optimal-performance mapping to prolog. At the time, I had trouble
finding rulesets on which people needed speed; it sounds like that
situation has changed.
It seems to my inexpert eye that cwm has these functional components:
1. Parse RDF (REC-rdf-syntax-19990222), n3, ntriples
2. Generate (pretty-print) RDF (REC-rdf-syntax-19990222), n3, ntriples
3. Flatten (encode n3 formulas in an RDF graph; has been broken for ages)
4. Reify (broken)
5. Apply/Rules/Think, do logical inference
6. Filter/Purge, use the logic language as a kind of query language
(There is some overlap in 3/4 and 5/6.) 5 and 6 are presumably the
interesting/slow bits here.
The logic language itself has been evolving as Tim experiments. I'd
love to know how different people (Tim, users) feel about the
different parts -- it would allow other implementations of the
language to track it better.
Personally, I'd like to see separate programs for 1+3 (reader), 2
(writer), 4 (reifier), 5 (thinker), and 6 (questioner). (I imagine
the programs piping N-Triples or maybe RDF/XML between them.) That
would make life easier for parallel development and for tracking the
evolution of the different components.
What do you think?
-- sandro
[1] http://www.w3.org/2001/04/pl/semweb.P
Received on Friday, 22 February 2002 15:14:51 UTC