Swish is a framework, written in the purely functional
programming language Haskell, for performing deductions in
RDF data using a variety of techniques. Swish is conceived
as a toolkit for experimenting with RDF inference, and for
implementing stand-alone RDF file processors (usable in
similar style to CWM, but with a view to being extensible
in declarative style through added Haskell function and data
value declarations). It explores Haskell as "a scripting
language for the Semantic Web".

Swish is a work-in-progress, and currently incorporates:

Turtle, Notation3 and NTriples input and output. The N3 support is
incomplete (no handling of @forAll).

Corrected minimum mtl constraint from 1 to 2 and updated
the maximum time version to 1.4 from 1.3.

Version 0.6.1.1

Minor improvement to the error message produced by the
Turtle, Ntriples, and N3 parsers: a fragment of the remaining text is
included to provide some context (still lacking compared to the information
provided in version 0.3.2.1).

Version 0.6.1.0

Added support for Turtle format (added the
Swish.RDF.TurtleFormatter and Swish.RDF.TurtleParser modules).

Version 0.6.0.2

Minor internal changes.

Version 0.6.0.1

Moved to using hashing routine using the Data.Hashable
interface rather than Swish.Utils.MiscHelpers which is deprecated.

Version 0.6.0.0

Add Data.Interned.URI and use it to speed up the QName
equality check.

Version 0.5.0.3

Didn't get all the required FlexibleInstances.

Version 0.5.0.2

HUnit constraint is only added when the tests flag
is used. Removed random and bytestring constraints. Add FlexibleInstances
pragma for ghc 7.2 compatability.

Version 0.5.0.1

Update bounds on package constraints to try and get a
successful build on ghc 7.2; removed parallel constraint as not used.

Version 0.5.0.0

The constructors for ScopedName and QName have been
removed to hide some experimental optimisations (partly added in 0.4.0.0);
Namespace has seen a similar change but no optimisation. Output speed
should be improved but no systematic analysis has been performed.

Version 0.4.0.0

Moving to using polyparse for parsing and Text rather than
String where appropriate. Use of URI and Maybe Text rather than String in the Namespace
type. Removed the Swish.Utils.DateTime and Swish.Utils.TraceHelpers
modules. Symbols have been removed from the export lists of the following modules:
Swish.Utils.LookupMap, Swish.Utils.ListHelpers, Swish.Utils.MiscHelpers,
Swish.Utils.ShowM. Some significant improvements to parsing speed, but no
concerted effort or checks made yet.

Version 0.3.2.1

Marked a number of routines from the Swish.Utils modules
as deprecated. Use foldl' rather than foldl.

Version 0.3.2.0

The N3 parser no longer assumes a set of pre-defined namespaces.
There is no API change worthy of a bump to the minor version number, but it
is a large-enough change in behaviour that I felt the need for the update.

Version 0.3.1.2

Swish.RDF.RDFGraph.toRDFGraph now sets up the
namespace map of the graph based on the input labels (previously it
left the map empty).

Version 0.3.1.1

Bug fixes for N3 format: strings ending in a
double quote character are now written out correctly and
xsd:double values are not written using XSD canonical form/capital
E but with a lower-case e. On input of N3,
literals that match xsd:double are converted to XSD canonical form
(as stored in RDFLabel), which can make simple textual comparison
of literals fail. The Eq instance of RDFLabel now ignores the
case of the language tag for literals and the Show instance
uses XSD canonical form for xsd:boolean, xsd:integer,
xsd:decimal and xsd:double literals.
Noted that the ToRDFLable and FromRDFLabel classes replicate
existing functionality in the Swish.RDF.RDFDatatype module.

Version 0.3.1.0

Added the Swish.RDF.RDFGraph.ToRDFLabel and
Swish.RDF.RDFGraph.FromRDFLabel classes and the
Swish.RDF.RDFGraph.toRDFTriple and Swish.RDF.RDFGraph.fromRDFTriple
functions.
Added instances: IsString RDFLabel, IsString QName, IsString ScopedName
and Monoid NSGraph.
The modules Swish and Swish.RDF have been introduced to provide
documentation. The module Swish.Utils.DateTime is deprecated and
will be removed in a later release.
The N3 formatter now writes out literals with xsd:boolean, xsd:integer,
xsd:decimal and xsd:double types as literals rather than as a typed string.

Version 0.3.0.3

Changed scripts/SwishExample.ss script so that the
proof succeeds. Some documentation improvements, including a discussion
of the Swish script format (see Swish.RDF.SwishScript). Very minor
changes to behavior of Swish in several edge cases.

Version 0.3.0.2

Bugfix: stop losing triples with a bnode subject when
using the N3Formatter; this also makes the scripts/SwishTest.ss test
pass again. Several commands in Swish scripts now create screen
output (mainly to check what it is doing). Added the developer
flag for building.

Version 0.3.0.1

updates the Swish script parser to work with the
changes in 0.3.0.0 (reported by Rick Murphy).
Several example scripts are installed in the
scripts/ directory, although only VehicleCapacity.ss works
with this release.

Version 0.3.0.0

is an attempt to update
version 0.2.1 (http://hackage.haskell.org/package/swish-0.2.1/)
to build against
a recent ghc install, with some clean ups - including support for
the current N3 specification - and the addition of the
NTriples format. It has not been tested against ghc7.

Maintainer's Corner

Readme for swish-0.6.1.2

This is an update to Swish [1,2] so that it builds with a recent
Haskell platform (although it has not been tested against ghc-7 and
the 2011.2.0.0 Haskell Platform releases).
For more information on this release see [3].
[1] http://www.ninebynine.org/Software/Swish-0.2.0.html
[2] http://www.ninebynine.org/RDFNotes/Swish/Intro.html
[2] https://bitbucket.org/doug_burke/swish/wiki/Home