swish-0.10.10.0: A semantic web toolkit.

Copyright | (c) 2003 Graham Klyne 2009 Vasili I Galchin 2011 2012 2020 Douglas Burke
License | GPL V2
Maintainer | Douglas Burke
Stability | experimental
Portability | H98
Safe Haskell | Safe-Inferred
Language | Haskell2010

Swish

Description

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

- data SwishStatus
  - = SwishSuccess
  - | SwishGraphCompareError
  - | SwishDataInputError
  - | SwishDataAccessError
  - | SwishArgumentError
  - | SwishExecutionError
- data SwishAction
- runSwish :: String -> IO ExitCode
- runSwishActions :: [SwishAction] -> IO SwishStatus
- displaySwishHelp :: IO ()
- splitArguments :: [String] -> ([String], [String])
- validateCommands :: [String] -> Either (String, SwishStatus) [SwishAction]

# 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

#### Instances

Instances details

Enum SwishStatus Source # |

Instance details

Defined in Swish.Monad

Methods

succ :: SwishStatus -> SwishStatus Source #

pred :: SwishStatus -> SwishStatus Source #

toEnum :: Int -> SwishStatus Source #

fromEnum :: SwishStatus -> Int Source #

enumFrom :: SwishStatus -> [SwishStatus] Source #

enumFromThen :: SwishStatus -> SwishStatus -> [SwishStatus] Source #

enumFromTo :: SwishStatus -> SwishStatus -> [SwishStatus] Source #

enumFromThenTo :: SwishStatus -> SwishStatus -> SwishStatus -> [SwishStatus] Source #

Show SwishStatus Source # |
Instance details Defined in Swish.Monad Methods showsPrec :: Int -> SwishStatus -> ShowS Source # show :: SwishStatus -> String Source # showList :: [SwishStatus] -> ShowS Source #
Eq SwishStatus Source # |
Instance details Defined in Swish.Monad Methods (==) :: SwishStatus -> SwishStatus -> Bool Source # (/=) :: SwishStatus -> SwishStatus -> Bool Source #

data SwishAction Source #

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

#### Instances

Instances details

Show SwishAction Source # |
Instance details Defined in Swish Methods showsPrec :: Int -> SwishAction -> ShowS Source # show :: SwishAction -> String Source # showList :: [SwishAction] -> ShowS Source #

runSwish :: String -> IO ExitCode Source #

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

runSwishActions :: [SwishAction] -> IO SwishStatus Source #

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.