The swish package
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).
RDF graph isomorphism testing and merging.
Display of differences between RDF graphs.
Inference operations in forward chaining, backward chaining and proof-checking modes.
Simple Horn-style rule implementations, extendable through variable binding modifiers and filters.
Class restriction rule implementation, primarily for datatype inferences.
RDF formal semantics entailment rule implementation.
Complete, ready-to-run, command-line and script-driven programs.
Changes in version 0.7.0.2:
The Swish.QName.LName type now requires all characters to be ASCII. This avoids downstream errors when trying to convert a QName to a URI.
Changes in version 0.7.0.1:
Internal changes to parsing of URI values for NTriples, Turtle, and N3 parsers (error messages will be slightly different when IRIs are used). Unfortunately IRIs are still not supported.
Changes in version 0.7.0.0:
For code that uses the Swish script language, the main change is to import Swish rather than Swish.RDF.SwishMain, and to note that the other Swish.RDF.Swish* modules are now called Swish.*.
For code that uses the graph library, the main changes are that Swish.RDF.RDFGraph is now called Swish.RDF.Graph, the Lit constructor of the RDFLabel has been split into three (Lit, LangLit, and TypedLit) and a new LanguageTag type introduced, local names now use the LName type (previously they were just Text values), and the parsers and formatters have renamed to Swish.RDF.Parser.* and Swish.RDF.Formatter.*.
Moved a number of modules around: generic code directly into Swish and the Swish.RDF.RDF* forms renamed to Swish.RDF.*. Some modules have been moved out of the Swish.Utils.* namespace. Generic modules have been placed into the Data.* namespace. The Swish.RDF.Swish* modules have been moved to Swish.* and Swish.RDF.SwishMain has been removed; use Swish instead.
Parsing modules are now in the Swish.RDF.Parser hierarchy and Swish.RDF.RDFParser has been renamed to Swish.RDF.Parser.Utils.
Formatting modules are now in the Swish.RDF.Formatter hierarchy.
RDF literals are now stored using the Lit, LangLit, or TypedLit constructors (RDFLabel) rather than using just Lit. Language codes are now represented by Swish.RDF.Vocabulary.LanguageTag rather than as a ScopedName.
Local names are now represented by the Swish.QName.LName type rather than as a Text value. A few routines now return a Maybe value rather than error-ing out on invalid input.
Make use of Data.List.NonEmpty in a few cases.
Removed mkTypedLit from Swish.RDF.RDFParser; use Swish.RDF.RDFDatatype.makeDataTypedLiteral instead.
Removed asubj, apred and aobj from Swish.RDF.GraphClass and Swish.RDF.RDFGraph; use arcSubj, arcPred or arcObj instead.
Removed un-used containedIn element of the LDGraph type class. The arguments to setArcs have been flipped, replaceArcs removed, add renamed to addGraphs, and emptyGraph added.
Removed un-used exports from Swish.Utils.PartOrderedCollection: partCompareOrd, partCompareMaybe, partCompareListOrd, and partCompareListPartOrd.
Removed the Swish.Utils.MiscHelpers module and moved single-use functionality out of Swish.Utils.ListHelpers.
Removed various exported symbols from a range of modules as they were unused.
Use Word32 rather than Int for label indexes (Swish.GraphMatch.LabelIndex) and in the bnode counts when formatting to N3/Turtle.
Minor clean up of the LookupMap module: mergeReplaceOrAdd and mergeReplace are now combined into mergeReplace; mapSelect, mapApplyToAll, and mapTranslate* have been removed; documentation slightly improved; and a few minor internal clean ups.
Clarified that Swish.RDF.RDFDatatypeXsdDecimal is for xsd:decimal rather than xsd:double.
Support using versions 0.8 or 0.9 of the intern package and version 0.5 of containers.
Switch to Control.Exception.try to avoid deprecation warnings from System.IO.Error.try.
Changes in previous versions can be found at https://bitbucket.org/doug_burke/swish/src/tip/CHANGES.
|Versions||0.2.1, 0.3.0.0, 0.3.0.1, 0.3.0.2, 0.3.0.3, 0.3.1.0, 0.3.1.1, 0.3.1.2, 0.3.2.0, 0.3.2.1, 0.4.0.0, 0.5.0.0, 0.5.0.1, 0.5.0.2, 0.5.0.3, 0.6.0.0, 0.6.0.1, 0.6.1.0, 0.6.1.1, 0.6.1.2, 0.6.2.1, 0.6.3.0, 0.6.4.0, 0.6.5.0, 0.6.5.1, 0.6.5.2, 0.7.0.0, 0.7.0.1, 0.7.0.2, 0.8.0.0, 0.8.0.2, 0.8.0.3, 0.9.0.0, 0.9.0.1, 0.9.0.2|
|Dependencies||base (≥3 & <5), binary (0.5.*), containers (≥0.3 & <0.6), directory (≥1.0 & <1.2), filepath (≥1.1 & <1.4), hashable (1.1.*), mtl (2.*), network (≥2.2 & <2.4), old-locale (1.0.*), polyparse (≥1.6 & <1.9), semigroups (≥0.5 & <0.9), text (0.11.*), time (≥1.1 & <1.5)|
|Copyright||(c) 2003, 2004 G. Klyne; 2009 Vasili I Galchin; 2011, 2012 Doug Burke; All rights reserved.|
|Author||Graham Klyne - GK@ninebynine.org|
|Source repository||hg clone https://bitbucket.org/doug_burke/swish|
|Upload date||Wed Aug 8 16:27:51 UTC 2012|