swish-0.9.0.10: A semantic web toolkit.

PortabilityH98
Stabilityexperimental
MaintainerDouglas Burke
Safe HaskellNone

Swish

Description

Swish: Semantic Web Inference Scripting in Haskell

This program is a simple skeleton for constructing Semantic Web [1] inference tools in Haskell, using the RDF graph and several RDF parsers (at present Notation 3 and NTriples).

It might be viewed as a kind of embroyonic CWM [2] in Haskell, except that the intent is that Haskell will be used as a primary language for defining inferences. As such, Swish is an open-ended toolkit for constructing new special-purpose Semantic Web applications rather than a closed, self-contained general-purpose SW application. As such, it is part of another experiment along the lines described in [3].

The script format used by Swish is described in Swish.Script.

Users wishing to process RDF data directly may prefer to look at the following modules; Swish.RDF, Swish.RDF.Parser.Turtle, Swish.RDF.Parser.N3, Swish.RDF.Parser.NTriples, Swish.RDF.Formatter.Turtle, Swish.RDF.Formatter.N3 and Swish.RDF.Formatter.NTriples.

  1. Semantic web: http://www.w3.org/2001/sw/
  2. CWM: http://www.w3.org/2000/10/swap/doc/cwm.html
  3. Motivation: http://www.w3.org/2000/10/swap/doc/Motivation.html
  4. Notation 3: http://www.w3.org/TeamSubmission/2008/SUBM-n3-20080114/
  5. Turtle: http://www.w3.org/TR/turtle/
  6. RDF: http://www.w3.org/RDF/

Notes

I anticipate that this module may be used as a starting point for creating new programs rather then as a complete program in its own right. The functionality built into this code is selected with a view to testing the Haskell modules for handling RDF rather than for performing any particular application processing (though development as a tool with some broader utility is not ruled out).

With the following in ghci:

>>> :m + Swish
>>> :set prompt "swish> "

then we can run a Swish script (format described in Swish.Script) by saying:

>>> runSwish "-s=script.ss"
ExitSuccess

or convert a file from Turtle to NTriples format with:

>>> runSwish "-ttl -i=foo.ttl -nt -o=foo.nt"
ExitSuccess

You can also use validateCommands by giving it the individual commands, such as

>>> let Right cs = validateCommands ["-ttl", "-i=file1.ttl", "-c=file2.ttl"]
>>> cs
[SwishAction: -ttl,SwishAction: -i=file1.ttl,SwishAction: -c=file2.ttl]
>>> st <- runSwishActions cs
>>> st
The graphs do not compare as equal.

Synopsis

Documentation

data SwishStatus Source

Status of the processor

Constructors

SwishSuccess

successful run

SwishGraphCompareError

graphs do not compare

SwishDataInputError

input data problem (ie format/syntax)

SwishDataAccessError

data access error

SwishArgumentError

command-line argument error

SwishExecutionError

error executing a Swish script

data SwishAction Source

Represent a Swish action. At present there is no way to create these actions other than validateCommands.

Instances

runSwish :: String -> IO ExitCodeSource

Parse and run the given string as if given at the command line. The "quiet", "version" and "help" options are ignored.

runSwishActions :: [SwishAction] -> IO SwishStatusSource

Execute the given set of actions.

displaySwishHelp :: IO ()Source

Write out the help for Swish

splitArguments :: [String] -> ([String], [String])Source

Return any arguments that need processing immediately, namely the "help", "quiet" and "version" options.

validateCommands :: [String] -> Either (String, SwishStatus) [SwishAction]Source

Given a list of command-line arguments create the list of actions to perform or a string and status value indicating an input error.