Re: ANNOUNCE: SW Inferencing Skeleton in Haskell (Swish)

Graham, this is very rdf-interesting!

Guido Naudts, doing his Masters thesis,
is also using Haskell succesfully.
There's a current *draft* at
http://www.agfa.com/w3c/2002/02/thesis/thesis.pdf
and test cases and running code at
http://www.agfa.com/w3c/2002/02/thesis/

Guido is still very busy; here's a sample session

__   __ __  __  ____   ___
_______________________________________________
||   || ||  || ||  || ||__      Hugs 98: Based on the Haskell 98 standard
||___|| ||__|| ||__||  __||     Copyright (c) 1994-2001
||---||         ___||           World Wide Web: http://haskell.org/hugs
||   ||                         Report bugs to: hugs-bugs@haskell.org
||   || Version: December 2001
_______________________________________________

Haskell 98 mode: Restart with command line option -98 to enable extensions

Reading file "C:\Hugs98\lib\Prelude.hs":

Hugs session for:
C:\Hugs98\lib\Prelude.hs
Type :? for help
Prelude> :l N3Engine
Reading file "N3Engine.hs":
Reading file "Utils.hs":
Reading file "IO.hs":
Reading file "C:\Hugs98\lib\Ix.hs":
Reading file "IO.hs":
Reading file "Utils.hs":
Reading file "TripleData.hs":
Reading file "XML.hs":
Reading file "N3Parser.hs":
Reading file "C:\Hugs98\lib\hugs\Interact.hs":
Reading file "C:\Hugs98\lib\exts\Observe.lhs":
Reading file "N3Parser.hs":
Reading file "C:\Hugs98\lib\Array.hs":
Reading file "C:\Hugs98\lib\List.hs":
Reading file "C:\Hugs98\lib\Maybe.hs":
Reading file "C:\Hugs98\lib\List.hs":
Reading file "C:\Hugs98\lib\Array.hs":
Reading file "LoadTree.hs":
Reading file "N3Unify.hs":
Reading file "UnifIn.hs":
Reading file "TripleApi.hs":
Reading file "Subgraphs.hs":
Reading file "GenerateDB.hs":
Reading file "Transform.hs":
Reading file "ToN3.hs":
Reading file "Transform.hs":
Reading file "Subgraphs.hs":
Reading file "N3Unify.hs":
Reading file "AltsOut.hs":
Reading file "AltsIn.hs":
Reading file "C:\Hugs98\lib\Time.hs":
Reading file "C:\Hugs98\lib\Locale.hs":
Reading file "C:\Hugs98\lib\Char.hs":
Reading file "C:\Hugs98\lib\exts\IOExts.hs":
Reading file "C:\Hugs98\lib\exts\IORef.lhs":
Reading file "C:\Hugs98\lib\exts\IOExts.hs":
Reading file "C:\Hugs98\lib\Time.hs":
Reading file "SubAnons.hs":
Reading file "N3Engine.hs":

Hugs session for:
C:\Hugs98\lib\Prelude.hs
C:\Hugs98\lib\Ix.hs
IO.hs
Utils.hs
TripleData.hs
XML.hs
C:\Hugs98\lib\hugs\Interact.hs
C:\Hugs98\lib\exts\Observe.lhs
N3Parser.hs
C:\Hugs98\lib\Maybe.hs
C:\Hugs98\lib\List.hs
C:\Hugs98\lib\Array.hs
LoadTree.hs
UnifIn.hs
TripleApi.hs
GenerateDB.hs
ToN3.hs
Transform.hs
Subgraphs.hs
N3Unify.hs
AltsOut.hs
AltsIn.hs
C:\Hugs98\lib\Locale.hs
C:\Hugs98\lib\Char.hs
C:\Hugs98\lib\exts\IORef.lhs
C:\Hugs98\lib\exts\IOExts.hs
C:\Hugs98\lib\Time.hs
SubAnons.hs
N3Engine.hs
N3Engine> en5
Starting the parse ...

N3Trace:

140
Query:

{:Frans gc:granddaughter __:x. }

Solution:

{:Frans gc:granddaughter :Goedele. }

Solution:

{:Frans gc:granddaughter :Veerle. }

Solution:

{:Frans gc:granddaughter :Nele. }

Solution:

{:Frans gc:granddaughter :Ann. }

Solution:

{:Frans gc:granddaughter :Ann_Sophie. }

Solution:

{:Frans gc:granddaughter :Valerie. }

Solution:

{:Frans gc:granddaughter :Stephanie. }

Solution:

{:Frans gc:granddaughter :Louise. }

Solution:

{:Frans gc:granddaughter :Bieke. }

Solution:

{:Frans gc:granddaughter :Tineke. }

Solution:

{:Frans gc:granddaughter :Stefanie. }

Solution:

{:Frans gc:granddaughter :Lien. }

Working time:
 seconds 86 micros 0

N3Engine>



--
Jos De Roo, AGFA http://www.agfa.com/w3c/jdroo/


                                                                                                                          
                    Graham Klyne                                                                                          
                    <gk@ninebynine.org>         To:     RDF interest group <www-rdf-interest@w3.org>                      
                    Sent by:                    cc:                                                                       
                    www-rdf-interest-requ       Subject:     ANNOUNCE: SW Inferencing Skeleton in Haskell (Swish)         
                    est@w3.org                                                                                            
                                                                                                                          
                                                                                                                          
                    2003-06-06 08:05 PM                                                                                   
                                                                                                                          
                                                                                                                          





I've been working on building some tools for semantic web inferencing using

Haskell.  (Haskell is a pure functional programming language with higher
order functions, lazy evaluation and more;  see http://www.haskell.org/ )

The first phase of this has been posted on my web site at:

   http://www.ninebynine.org/Software/Intro.html#Swish  (links)
   http://www.ninebynine.org/Software/Swish-0.1.zip     (software source)
   http://www.ninebynine.org/Software/swish-0.1.html    (documentation)

This first phase is just a platform for future development, consisting of:
- An data type and functions for manipulating RDF models
   (extended to handle N3 formulae), with a simple interface for creating
   combining, accessing and comparing graphs
- A Notation3 parser
- A basic Notation 3 formatter
- A command-line utility for testing the above
- Numerous test programs

The code's a bit tacky in places (by Haskell standards) but it does seem to
work pretty reliably.  It has been tested with the Hugs and GHC Haskell
systems (see document for details) -- GHC can be used to create a
stand-alone executable.

For anyone who tries to run this, I draw your attention to the Haskell
environment descriptions in section 4.3 of the document ... when my son
test-installed it he didn't read this and consequently some of the support
libraries were not located.

As it stands, it doesn't do much other than testing for graph equivalence
(allowing for differing bnode identifiers) and merging graphs (renaming
bnodes as needed to avoid introducing any additional entailments).  I'm
currently working on designing some modules for doing simple queries and
inferences on the RDF data.

#g


-------------------
Graham Klyne
<GK@NineByNine.org>
PGP: 0FAA 69FF C083 000B A2E9  A131 01B9 1C7A DBCA CB5E

Received on Sunday, 8 June 2003 13:14:25 UTC