swish-0.9.1.7: A semantic web toolkit.

Copyright | (c) 2003, Graham Klyne, 2009 Vasili I Galchin, 2011, 2012, 2013, 2014, 2015, 2016 Douglas Burke
License | GPL V2
Maintainer | Douglas Burke
Stability | experimental
Portability | CPP, FlexibleInstances, MultiParamTypeClasses, OverloadedStrings
Safe Haskell | None
Language | Haskell98

Swish.RDF.Graph

Contents

- Labels
- RDF Graphs
- Re-export from GraphClass
- Selected RDFLabel values
  - RDF terms
  - RDF Schema terms
    - Classes
    - Properties
    - Containers
    - Collections
    - Reification Vocabulary
    - Utility Properties
  - OWL
  - Miscellaneous
- Exported for testing

Description

This module defines a memory-based RDF graph instance. At present only RDF 1.0 is explicitly supported; I have not gone through the RDF 1.1 changes to see how the code needs to be updated. This means that you can have untyped strings in your graph that do not match the same content but with an explicit `xsd:string` datatype.

Note that the identifiers for blank nodes may not be propogated when a graph is written out using one of the formatters, such as `Turtle`. There is limited support for generating new blank nodes from an existing set of triples; e.g. `newNode` and `newNodes`.

Synopsis

- data RDFLabel
  - = Res ScopedName
  - | Lit Text
  - | LangLit Text LanguageTag
  - | TypedLit Text ScopedName
  - | Blank String
  - | Var String
  - | NoNode
- class ToRDFLabel a where
  - toRDFLabel :: a -> RDFLabel
- class FromRDFLabel a where
  - fromRDFLabel :: RDFLabel -> Maybe a
- isLiteral :: RDFLabel -> Bool
- isUntypedLiteral :: RDFLabel -> Bool
- isTypedLiteral :: RDFLabel -> Bool
- isXMLLiteral :: RDFLabel -> Bool
- isDatatyped :: ScopedName -> RDFLabel -> Bool
- isMemberProp :: RDFLabel -> Bool
- isUri :: RDFLabel -> Bool
- isBlank :: RDFLabel -> Bool
- isQueryVar :: RDFLabel -> Bool
- getLiteralText :: RDFLabel -> Text
- getScopedName :: RDFLabel -> ScopedName
- makeBlank :: RDFLabel -> RDFLabel
- quote :: Bool -> String -> String
- quoteT :: Bool -> Text -> Text
- type RDFArcSet = ArcSet RDFLabel
- type RDFTriple = Arc RDFLabel
- toRDFTriple :: (ToRDFLabel s, ToRDFLabel p, ToRDFLabel o) => s -> p -> o -> RDFTriple
- fromRDFTriple :: (FromRDFLabel s, FromRDFLabel p, FromRDFLabel o) => RDFTriple -> Maybe (s, p, o)
- data NSGraph lb = NSGraph {
  - namespaces :: NamespaceMap
  - formulae :: FormulaMap lb
  - statements :: ArcSet lb
  }
- type RDFGraph = NSGraph RDFLabel
- toRDFGraph :: RDFArcSet -> RDFGraph
- emptyRDFGraph :: RDFGraph
- type NamespaceMap = Map (Maybe Text) URI
- emptyNamespaceMap :: NamespaceMap
- data LookupFormula lb gr = Formula {
  - formLabel :: lb
  - formGraph :: gr
  }
- type Formula lb = LookupFormula lb (NSGraph lb)
- type FormulaMap lb = Map lb (NSGraph lb)
- emptyFormulaMap :: FormulaMap RDFLabel
- addArc :: Label lb => Arc lb -> NSGraph lb -> NSGraph lb
- merge :: Label lb => NSGraph lb -> NSGraph lb -> NSGraph lb
- allLabels :: Label lb => (lb -> Bool) -> NSGraph lb -> Set lb
- allNodes :: Label lb => (lb -> Bool) -> NSGraph lb -> Set lb
- remapLabels :: Label lb => [lb] -> [lb] -> (lb -> lb) -> NSGraph lb -> NSGraph lb
- remapLabelList :: Label lb => [lb] -> [lb] -> [(lb, lb)]
- newNode :: Label lb => lb -> [lb] -> lb
- newNodes :: Label lb => lb -> [lb] -> [lb]
- setNamespaces :: NamespaceMap -> NSGraph lb -> NSGraph lb
- getNamespaces :: NSGraph lb -> NamespaceMap
- setFormulae :: FormulaMap lb -> NSGraph lb -> NSGraph lb
- getFormulae :: NSGraph lb -> FormulaMap lb
- setFormula :: Label lb => Formula lb -> NSGraph lb -> NSGraph lb
- getFormula :: Label lb => NSGraph lb -> lb -> Maybe (NSGraph lb)
- fmapNSGraph :: Ord lb => (lb -> lb) -> NSGraph lb -> NSGraph lb
- traverseNSGraph :: (Applicative f, Ord a) => (a -> f a) -> NSGraph a -> f (NSGraph a)
- class LDGraph lg lb where
  - emptyGraph :: lg lb
  - setArcs :: lg lb -> ArcSet lb -> lg lb
  - getArcs :: lg lb -> ArcSet lb
  - extract :: Ord lb => Selector lb -> lg lb -> lg lb
  - addGraphs :: Ord lb => lg lb -> lg lb -> lg lb
  - delete :: Ord lb => lg lb -> lg lb -> lg lb
  - labels :: Ord lb => lg lb -> Set lb
  - nodes :: Ord lb => lg lb -> Set lb
  - update :: (ArcSet lb -> ArcSet lb) -> lg lb -> lg lb
- class (Ord lb, Show lb) => Label lb where
  - labelIsVar :: lb -> Bool
  - labelHash :: Int -> lb -> Int
  - getLocal :: lb -> String
  - makeLabel :: String -> lb
- data Arc lb = Arc {
  - arcSubj :: lb
  - arcPred :: lb
  - arcObj :: lb
  }
- arc :: lb -> lb -> lb -> Arc lb
- type Selector lb = Arc lb -> Bool
- resRdfRDF :: RDFLabel
- resRdfDescription :: RDFLabel
- resRdfID :: RDFLabel
- resRdfAbout :: RDFLabel
- resRdfParseType :: RDFLabel
- resRdfResource :: RDFLabel
- resRdfLi :: RDFLabel
- resRdfNodeID :: RDFLabel
- resRdfDatatype :: RDFLabel
- resRdf1 :: RDFLabel
- resRdf2 :: RDFLabel
- resRdfn :: Word32 -> RDFLabel
- resRdfsResource :: RDFLabel
- resRdfsClass :: RDFLabel
- resRdfsLiteral :: RDFLabel
- resRdfsDatatype :: RDFLabel
- resRdfXMLLiteral :: RDFLabel
- resRdfProperty :: RDFLabel
- resRdfsRange :: RDFLabel
- resRdfsDomain :: RDFLabel
- resRdfType :: RDFLabel
- resRdfsSubClassOf :: RDFLabel
- resRdfsSubPropertyOf :: RDFLabel
- resRdfsLabel :: RDFLabel
- resRdfsComment :: RDFLabel
- resRdfsContainer :: RDFLabel
- resRdfBag :: RDFLabel
- resRdfSeq :: RDFLabel
- resRdfAlt :: RDFLabel
- resRdfsContainerMembershipProperty :: RDFLabel
- resRdfsMember :: RDFLabel
- resRdfList :: RDFLabel
- resRdfFirst :: RDFLabel
- resRdfRest :: RDFLabel
- resRdfNil :: RDFLabel
- resRdfStatement :: RDFLabel
- resRdfSubject :: RDFLabel
- resRdfPredicate :: RDFLabel
- resRdfObject :: RDFLabel
- resRdfsSeeAlso :: RDFLabel
- resRdfsIsDefinedBy :: RDFLabel
- resRdfValue :: RDFLabel
- resOwlSameAs :: RDFLabel
- resRdfdGeneralRestriction :: RDFLabel
- resRdfdOnProperties :: RDFLabel
- resRdfdConstraint :: RDFLabel
- resRdfdMaxCardinality :: RDFLabel
- resLogImplies :: RDFLabel
- grMatchMap :: Label lb => NSGraph lb -> NSGraph lb -> (Bool, LabelMap (ScopedLabel lb))
- grEq :: Label lb => NSGraph lb -> NSGraph lb -> Bool
- mapnode :: Label lb => [lb] -> [lb] -> (lb -> lb) -> lb -> lb
- maplist :: Label lb => [lb] -> [lb] -> (lb -> lb) -> [(lb, lb)] -> [(lb, lb)]

# Labels

data RDFLabel Source

RDF graph node values

cf. http://www.w3.org/TR/rdf-concepts/#section-Graph-syntax version 1.0

This is extended from the RDF abstract graph syntax in the following ways:

(a) a graph can be part of a resource node or blank node (cf. Notation3 formulae)

(b) a "variable" node option is distinguished from a blank node. I have found this useful for encoding and handling queries, even though query variables can be expressed as blank nodes.

(c) a "NoNode" option is defined. This might otherwise be handled by `Maybe (RDFLabel g)`.

Prior to version `0.7.0.0`, literals were represented by a single constructor, `Lit`, with an optional argument. Language codes for literals was also stored as a `ScopedName` rather than as a `LanguageTag`.

Constructors

Res ScopedName | resource
Lit Text | plain literal (http://www.w3.org/TR/rdf-concepts/#dfn-plain-literal)
LangLit Text LanguageTag | plain literal
TypedLit Text ScopedName | typed literal (http://www.w3.org/TR/rdf-concepts/#dfn-typed-literal)
Blank String | blank node
Var String | variable (not used in ordinary graphs)
NoNode | no node (not used in ordinary graphs)

Instances

Eq RDFLabel Source | Define equality of nodes possibly based on different graph types. The equality of literals is taken from section 6.5.1 ("Literal Equality") of the RDF Concepts and Abstract Document, http://www.w3.org/TR/2004/REC-rdf-concepts-20040210/#section-Literal-Equality.
Ord RDFLabel Source |
Show RDFLabel Source |
IsString RDFLabel Source |
Label RDFLabel Source |
FromRDFLabel RDFLabel Source | This is just `Just . id`.
ToRDFLabel RDFLabel Source | This is just `id`.

class ToRDFLabel a where Source

A type that can be converted to a RDF Label.

The String instance converts to an untyped literal (so no language tag is assumed).

The `UTCTime` and `Day` instances assume values are in UTC.

The conversion for XSD types attempts to use the canonical form described in section 2.3.1 of http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/#lexical-space.

Note that this is similar to `toRDFLabel`; the code should probably be combined at some point.

Methods

toRDFLabel :: a -> RDFLabel Source

Instances

ToRDFLabel Bool Source | Converts to a literal with a `xsd:boolean` datatype.
ToRDFLabel Char Source | The character is converted to an untyped literal of length one.
ToRDFLabel Double Source | Converts to a literal with a `xsd:double` datatype.
ToRDFLabel Float Source | Converts to a literal with a `xsd:float` datatype.
ToRDFLabel Int Source | Converts to a literal with a `xsd:integer` datatype.
ToRDFLabel Integer Source | Converts to a literal with a `xsd:integer` datatype.
ToRDFLabel String Source | Strings are converted to untyped literals.
ToRDFLabel URI Source | Converts to a Resource.
ToRDFLabel UTCTime Source | Converts to a literal with a `xsd:datetime` datatype.
ToRDFLabel Day Source | Converts to a literal with a `xsd:date` datatype.
ToRDFLabel QName Source | Converts to a Resource.
ToRDFLabel ScopedName Source | Converts to a Resource.
ToRDFLabel RDFLabel Source | This is just `id`.

class FromRDFLabel a where Source

A type that can be converted from a RDF Label, with the possibility of failure.

The String instance converts from an untyped literal (so it can not be used with a string with a language tag).

The following conversions are supported for common XSD types (out-of-band values result in `Nothing`):

- `xsd:boolean` to `Bool`
- `xsd:integer` to `Int` and `Integer`
- `xsd:float` to `Float`
- `xsd:double` to `Double`
- `xsd:dateTime` to `UTCTime`
- `xsd:date` to `Day`

Note that this is similar to `fromRDFLabel`; the code should probably be combined at some point.

Methods

fromRDFLabel :: RDFLabel -> Maybe a Source

Instances

FromRDFLabel Bool Source | Converts from a literal with a `xsd:boolean` datatype. The literal can be any of the supported XSD forms - e.g. "0" or "true".
FromRDFLabel Char Source | The label must be an untyped literal containing a single character.
FromRDFLabel Double Source | Converts from a literal with a `xsd:double` datatype.
FromRDFLabel Float Source | Converts from a literal with a `xsd:float` datatype. The conversion will fail if the value is outside the valid range of a Haskell `Float`.
FromRDFLabel Int Source | Converts from a literal with a `xsd:integer` datatype. The conversion will fail if the value is outside the valid range of a Haskell `Int`.
FromRDFLabel Integer Source | Converts from a literal with a `xsd:integer` datatype.
FromRDFLabel String Source | Only untyped literals are converted to strings.
FromRDFLabel URI Source | Converts from a Resource.
FromRDFLabel UTCTime Source | Converts from a literal with a `xsd:datetime` datatype.
FromRDFLabel Day Source | Converts from a literal with a `xsd:date` datatype.
FromRDFLabel QName Source | Converts from a Resource.
FromRDFLabel ScopedName Source | Converts from a Resource.
FromRDFLabel RDFLabel Source | This is just `Just . id`.

isLiteral :: RDFLabel -> Bool Source

Test if supplied labal is a literal node (`Lit`, `LangLit`, or `TypedLit`).

isUntypedLiteral :: RDFLabel -> Bool Source

Test if supplied labal is an untyped literal node (either `Lit` or `LangLit`).

isTypedLiteral :: RDFLabel -> Bool Source

Test if supplied labal is a typed literal node (`TypedLit`).

isXMLLiteral :: RDFLabel -> Bool Source

Test if supplied labal is a XML literal node

isDatatyped :: ScopedName -> RDFLabel -> Bool Source

Test if supplied label is a typed literal node of a given datatype

isMemberProp :: RDFLabel -> Bool Source

Test if supplied label is a container membership property

Check for namespace is RDF namespace and first character of local name is '_' and remaining characters of local name are all digits

isUri :: RDFLabel -> Bool Source

Test if supplied labal is a URI resource node

isBlank :: RDFLabel -> Bool Source

Test if supplied labal is a blank node

isQueryVar :: RDFLabel -> Bool Source

Test if supplied labal is a query variable

getLiteralText :: RDFLabel -> Text Source

Extract text value from a literal node (including the Language and Typed variants). The empty string is returned for other nodes.

getScopedName :: RDFLabel -> ScopedName Source

Extract the ScopedName value from a resource node (`nullScopedName` is returned for non-resource nodes).

makeBlank :: RDFLabel -> RDFLabel Source

Make a blank node from a supplied query variable, or return the supplied label unchanged. (Use this in when substituting an existential for an unsubstituted query variable.)

quote Source

Arguments

:: Bool | `True` if the string is to be displayed using one rather than three quotes.
-> String | String to quote.
-> String | The string does not contain the surrounding quote marks.

Turtle-style quoting rules for a string.

At present the choice is between using one or three double quote (`"`) characters to surround the string; i.e. using single quote (`'`) characters is not supported.

As of Swish 0.9.0.6, the `\f` character is converted to `\u000C` rather than left as is to aid interoperability with some other tools.

quoteT :: Bool -> Text -> Text Source

See `quote`.

# RDF Graphs

type RDFArcSet = ArcSet RDFLabel Source

A set of RDF triples.

type RDFTriple = Arc RDFLabel Source

RDF Triple (statement)

At present there is no check or type-level constraint that stops the subject or predicate of the triple from being a literal.

toRDFTriple Source

Arguments

:: (ToRDFLabel s, ToRDFLabel p, ToRDFLabel o) |
=> s | Subject
-> p | Predicate
-> o | Object
-> RDFTriple |

Convert 3 RDF labels to a RDF triple.

See also `Swish.RDF.GraphClass.arcFromTriple`.

fromRDFTriple Source

Arguments

:: (FromRDFLabel s, FromRDFLabel p, FromRDFLabel o) |
=> RDFTriple |
-> Maybe (s, p, o) | The conversion only succeeds if all three components can be converted to the correct Haskell types.

Extract the contents of a RDF triple.

See also `Swish.RDF.GraphClass.arcToTriple`.

data NSGraph lb Source

Memory-based graph with namespaces and subgraphs.

The primary means for adding arcs to an existing graph are:

- `setArcs` from the `LDGraph` instance, which replaces the existing set of arcs and does not change the namespace map.
- `addArc` which checks that the arc is unknown before adding it but does not change the namespace map or re-label any blank nodes in the arc.

Constructors

NSGraph |

Fields

namespaces :: NamespaceMap

  the namespaces to use

formulae :: FormulaMap lb

  any associated formulae (a.k.a. sub- or named- graps)

statements :: ArcSet lb

  the statements in the graph

Instances

LDGraph NSGraph lb Source |
Label lb => Eq (NSGraph lb) Source |
Label lb => Ord (NSGraph lb) Source |
Label lb => Show (NSGraph lb) Source |
Label lb => Show (Formula lb) Source |
Label lb => Monoid (NSGraph lb) Source | The `mappend` operation uses `merge` rather than `addGraphs`.

type RDFGraph = NSGraph RDFLabel Source

Memory-based RDF graph type

toRDFGraph :: RDFArcSet -> RDFGraph Source

Create a new RDF graph from a supplied set of arcs.

This version will attempt to fill up the namespace map of the graph based on the input labels (including datatypes on literals). For faster creation of a graph you can use:

    emptyRDFGraph { statements = arcs }

which is how this routine was defined in version `0.3.1.1` and earlier.

emptyRDFGraph :: RDFGraph Source

Create a new, empty RDF graph (it is just `mempty`).

type NamespaceMap = Map (Maybe Text) URI Source

Namespace prefix list entry

A map for name spaces (key is the prefix).

emptyNamespaceMap :: NamespaceMap Source

Create an empty namespace map.

data LookupFormula lb gr Source

Graph formula entry

Constructors

Formula |

Fields

formLabel :: lb

  The label for the formula

formGraph :: gr

  The contents of the formula

Instances

Label lb => Show (Formula lb) Source |
(Eq lb, Eq gr) => Eq (LookupFormula lb gr) Source |
(Ord lb, Ord gr) => Ord (LookupFormula lb gr) Source |

type Formula lb = LookupFormula lb (NSGraph lb) Source

A named formula.

type FormulaMap lb = Map lb (NSGraph lb) Source

A map for named formulae.

emptyFormulaMap :: FormulaMap RDFLabel Source

Create an empty formula map.

addArc :: Label lb => Arc lb -> NSGraph lb -> NSGraph lb Source

Add an arc to the graph. It does not relabel any blank nodes in the input arc, nor does it change the namespace map, but it does ensure that the arc is unknown before adding it.

merge :: Label lb => NSGraph lb -> NSGraph lb -> NSGraph lb Source

Merge RDF graphs, renaming blank and query variable nodes as needed to neep variable nodes from the two graphs distinct in the resulting graph.

Currently formulae are not guaranteed to be preserved across a merge.

allLabels :: Label lb => (lb -> Bool) -> NSGraph lb -> Set lb Source

Return list of all labels (including properties) in the graph satisfying a supplied filter predicate. This routine includes the labels in any formulae.

allNodes :: Label lb => (lb -> Bool) -> NSGraph lb -> Set lb Source

Return list of all subjects and objects in the graph satisfying a supplied filter predicate.

remapLabels Source

Arguments

:: Label lb |
=> [lb] | variable nodes to be renamed (`dupbn`)
-> [lb] | variable nodes used that must be avoided (`allbn`)
-> (lb -> lb) | node conversion function that is applied to nodes from `dupbn` in the graph that are to be replaced by new blank nodes. If no such conversion is required, supply `id`. The function `makeBlank` can be used to convert RDF query nodes into RDF blank nodes.
-> NSGraph lb | graph in which nodes are to be renamed
-> NSGraph lb |

Remap selected nodes in graph.

This is the node renaming operation that prevents graph-scoped variable nodes from being merged when two graphs are merged.

remapLabelList Source

Arguments

:: Label lb |
=> [lb] | labels to be remaped
-> [lb] | labels to be avoided by the remapping
-> [(lb, lb)] |

Externally callable function to construct a list of (old,new) values to be used for graph label remapping.

newNode :: Label lb => lb -> [lb] -> lb Source

Given a node and a list of existing nodes, find a new node for the supplied node that does not clash with any existing node. (Generates an non-terminating list of possible replacements, and picks the first one that isn't already in use.)

newNodes :: Label lb => lb -> [lb] -> [lb] Source

Given a node and a list of existing nodes, generate a list of new nodes for the supplied node that do not clash with any existing node.

setNamespaces :: NamespaceMap -> NSGraph lb -> NSGraph lb Source

Replace the namespace information in the graph.

getNamespaces :: NSGraph lb -> NamespaceMap Source

Retrieve the namespace map in the graph.

setFormulae :: FormulaMap lb -> NSGraph lb -> NSGraph lb Source

Replace the formulae in the graph.

getFormulae :: NSGraph lb -> FormulaMap lb Source

Retrieve the formulae in the graph.

setFormula :: Label lb => Formula lb -> NSGraph lb -> NSGraph lb Source

Add (or replace) a formula.

getFormula :: Label lb => NSGraph lb -> lb -> Maybe (NSGraph lb) Source

Find a formula in the graph, if it exists.

fmapNSGraph :: Ord lb => (lb -> lb) -> NSGraph lb -> NSGraph lb Source

`fmap` for `NSGraph` instances.

traverseNSGraph :: (Applicative f, Ord a) => (a -> f a) -> NSGraph a -> f (NSGraph a) Source

`traverse` for `NSGraph` instances.

# Re-export from GraphClass

Note that `asubj`, `apred` and `aobj` have been removed in version `0.7.0.0`; use `arcSubj`, `arcPred` or `arcObj` instead.

class LDGraph lg lb where Source

Labelled Directed Graph class.

Minimum required implementation: `emptyGraph`, `setArcs`, and `getArcs`.

Minimal complete definition

emptyGraph, setArcs, getArcs

Methods

emptyGraph :: lg lb Source

Create the empty graph.

setArcs :: lg lb -> ArcSet lb -> lg lb Source

Replace the existing arcs in the graph.

getArcs :: lg lb -> ArcSet lb Source

Extract all the arcs from a graph

extract :: Ord lb => Selector lb -> lg lb -> lg lb Source

Extract those arcs that match the given `Selector`.

addGraphs :: Ord lb => lg lb -> lg lb -> lg lb Source

Add the two graphs

delete Source

Arguments

:: Ord lb |
=> lg lb | g1
-> lg lb | g2
-> lg lb | g2 - g1 -> g3

Remove those arcs in the first graph from the second graph

labels :: Ord lb => lg lb -> Set lb Source

Enumerate the distinct labels contained in a graph; that is, any label that appears in the subject, predicate or object position of an `Arc`.

nodes :: Ord lb => lg lb -> Set lb Source

Enumerate the distinct nodes contained in a graph; that is, any label that appears in the subject or object position of an `Arc`.

update :: (ArcSet lb -> ArcSet lb) -> lg lb -> lg lb Source

Update the arcs in a graph using a supplied function.

Instances

LDGraph GraphMem lb Source |
LDGraph NSGraph lb Source |

class (Ord lb, Show lb) => Label lb where Source

Label class.

A label may have a fixed binding, which means that the label identifies (is) a particular graph node, and different such labels are always distinct nodes. Alternatively, a label may be unbound (variable), which means that it is a placeholder for an unknown node label. Unbound node labels are used as graph-local identifiers for indicating when the same node appears in several arcs.

For the purposes of graph-isomorphism testing, fixed labels are matched when they are the same. Variable labels may be matched with any other variable label. Our definition of isomorphism (for RDF graphs) does not match variable labels with fixed labels.

Methods

labelIsVar :: lb -> Bool Source

Does this node have a variable binding?

labelHash :: Int -> lb -> Int Source

Calculate the hash of the label using the supplied seed.

getLocal :: lb -> String Source

Extract the local id from a variable node.

makeLabel :: String -> lb Source

Make a label value from a local id.

Instances

Label LabelMem Source |
Label RDFLabel Source |
Label lb => Label (ScopedLabel lb) Source |

data Arc lb Source

Arc type.

Prior to `0.7.0.0` you could also use `asubj`, `apred` and `aobj` to access the elements of the arc.

Constructors

Arc |

Fields

arcSubj :: lb

  The subject of the arc.

arcPred :: lb

  The predicate (property) of the arc.

arcObj :: lb

  The object of the arc.

Instances

Functor Arc Source |
Foldable Arc Source |
Traversable Arc Source |
Eq lb => Eq (Arc lb) Source |
Ord lb => Ord (Arc lb) Source |
Show lb => Show (Arc lb) Source |
Hashable lb => Hashable (Arc lb) Source |

arc Source

Arguments

:: lb | The subject of the arc.
-> lb | The predicate of the arc.
-> lb | The object of the arc.
-> Arc lb |

Create an arc.

type Selector lb = Arc lb -> Bool Source

Identify arcs.

# Selected RDFLabel values

The `ToRDFLabel` instance of `ScopedName` can also be used to easily construct `RDFLabel` versions of the terms defined in Swish.RDF.Vocabulary.

## RDF terms

These terms are described in http://www.w3.org/TR/rdf-syntax-grammar/; the version used is "W3C Recommendation 10 February 2004", http://www.w3.org/TR/2004/REC-rdf-syntax-grammar-20040210/.

Some terms are listed within the RDF Schema terms below since their definition is given within the RDF Schema document.

resRdfRDF :: RDFLabel Source

`rdf:RDF`.

resRdfDescription :: RDFLabel Source

`rdf:Description`.

resRdfID :: RDFLabel Source

`rdf:ID`.

resRdfAbout :: RDFLabel Source

`rdf:about`.

resRdfParseType :: RDFLabel Source

`rdf:parseType`.

resRdfResource :: RDFLabel Source

`rdf:resource`.

resRdfLi :: RDFLabel Source

`rdf:li`.

resRdfNodeID :: RDFLabel Source

`rdf:nodeID`.

resRdfDatatype :: RDFLabel Source

`rdf:datatype`.

resRdf1 :: RDFLabel Source

`rdf:_1`.

resRdf2 :: RDFLabel Source

`rdf:_2`.

resRdfn :: Word32 -> RDFLabel Source

Create a `rdf:_n` entity.

There is no check that the argument is not `0`.

## RDF Schema terms

These are defined by http://www.w3.org/TR/rdf-schema/; the version used is "W3C Recommendation 10 February 2004", http://www.w3.org/TR/2004/REC-rdf-schema-20040210/.

### Classes

See the "Classes" section at http://www.w3.org/TR/rdf-schema/#ch_classes for more information.

resRdfsResource :: RDFLabel Source

`rdfs:Resource` from http://www.w3.org/TR/rdf-schema/#ch_resource.

resRdfsClass :: RDFLabel Source

`rdfs:Class` from http://www.w3.org/TR/rdf-schema/#ch_class.

resRdfsLiteral :: RDFLabel Source

`rdfs:Literal` from http://www.w3.org/TR/rdf-schema/#ch_literal.

resRdfsDatatype :: RDFLabel Source

`rdfs:Datatype` from http://www.w3.org/TR/rdf-schema/#ch_datatype.

resRdfXMLLiteral :: RDFLabel Source

`rdf:XMLLiteral` from http://www.w3.org/TR/rdf-schema/#ch_xmlliteral.

resRdfProperty :: RDFLabel Source

`rdf:Property` from http://www.w3.org/TR/rdf-schema/#ch_property.

### Properties

See the "Properties" section at http://www.w3.org/TR/rdf-schema/#ch_classes for more information.

resRdfsRange :: RDFLabel Source

`rdfs:range` from http://www.w3.org/TR/rdf-schema/#ch_range.

resRdfsDomain :: RDFLabel Source

`rdfs:domain` from http://www.w3.org/TR/rdf-schema/#ch_domain.

resRdfType :: RDFLabel Source

`rdf:type` from http://www.w3.org/TR/rdf-schema/#ch_type.

resRdfsSubClassOf :: RDFLabel Source

`rdfs:subClassOf` from http://www.w3.org/TR/rdf-schema/#ch_subclassof.

resRdfsSubPropertyOf :: RDFLabel Source

`rdfs:subPropertyOf` from http://www.w3.org/TR/rdf-schema/#ch_subpropertyof.

resRdfsLabel :: RDFLabel Source

`rdfs:label` from http://www.w3.org/TR/rdf-schema/#ch_label.

resRdfsComment :: RDFLabel Source

`rdfs:comment` from http://www.w3.org/TR/rdf-schema/#ch_comment.

### Containers

See the "Container Classes and Properties" section at http://www.w3.org/TR/rdf-schema/#ch_containervocab.

resRdfsContainer :: RDFLabel Source

`rdfs:Container` from http://www.w3.org/TR/rdf-schema/#ch_container.

resRdfBag :: RDFLabel Source

`rdf:Bag` from http://www.w3.org/TR/rdf-schema/#ch_bag.

resRdfSeq :: RDFLabel Source

`rdf:Seq` from http://www.w3.org/TR/rdf-schema/#ch_seq.

resRdfAlt :: RDFLabel Source

`rdf:Alt` from http://www.w3.org/TR/rdf-schema/#ch_alt.

resRdfsContainerMembershipProperty :: RDFLabel Source

`rdfs:ContainerMembershipProperty` from http://www.w3.org/TR/rdf-schema/#ch_containermembershipproperty.

resRdfsMember :: RDFLabel Source

`rdfs:member` from http://www.w3.org/TR/rdf-schema/#ch_member.

### Collections

See the "Collections" section at http://www.w3.org/TR/rdf-schema/#ch_collectionvocab.

resRdfList :: RDFLabel Source

`rdf:List` from http://www.w3.org/TR/rdf-schema/#ch_list.

resRdfFirst :: RDFLabel Source

`rdf:first` from http://www.w3.org/TR/rdf-schema/#ch_first.

resRdfRest :: RDFLabel Source

`rdf:rest` from http://www.w3.org/TR/rdf-schema/#ch_rest.

resRdfNil :: RDFLabel Source

`rdf:nil` from http://www.w3.org/TR/rdf-schema/#ch_nil.

### Reification Vocabulary

See the "Reification Vocabulary" section at http://www.w3.org/TR/rdf-schema/#ch_reificationvocab.

resRdfStatement :: RDFLabel Source

`rdf:Statement` from http://www.w3.org/TR/rdf-schema/#ch_statement.

resRdfSubject :: RDFLabel Source

`rdf:subject` from http://www.w3.org/TR/rdf-schema/#ch_subject.

resRdfPredicate :: RDFLabel Source

`rdf:predicate` from http://www.w3.org/TR/rdf-schema/#ch_predicate.

resRdfObject :: RDFLabel Source

`rdf:object` from http://www.w3.org/TR/rdf-schema/#ch_object.

### Utility Properties

See the "Utility Properties" section at http://www.w3.org/TR/rdf-schema/#ch_utilvocab.

resRdfsSeeAlso :: RDFLabel Source

`rdfs:seeAlso` from http://www.w3.org/TR/rdf-schema/#ch_seealso.

resRdfsIsDefinedBy :: RDFLabel Source

`rdfs:isDefinedBy` from http://www.w3.org/TR/rdf-schema/#ch_isdefinedby.

resRdfValue :: RDFLabel Source

`rdf:value` from http://www.w3.org/TR/rdf-schema/#ch_value.

## OWL

resOwlSameAs :: RDFLabel Source

`owl:sameAs`.

## Miscellaneous

resRdfdGeneralRestriction :: RDFLabel Source

`rdfd:GeneralRestriction`.

resRdfdOnProperties :: RDFLabel Source

`rdfd:onProperties`.

resRdfdConstraint :: RDFLabel Source

`rdfd:constraint`.

resRdfdMaxCardinality :: RDFLabel Source

`rdfd:maxCardinality`.

resLogImplies :: RDFLabel Source

`log:implies`.

# Exported for testing

grMatchMap :: Label lb => NSGraph lb -> NSGraph lb -> (Bool, LabelMap (ScopedLabel lb)) Source

Match graphs, returning `True` if they are equivalent, with a map of labels to equivalence class identifiers (see `graphMatch` for further details).

grEq :: Label lb => NSGraph lb -> NSGraph lb -> Bool Source

Graph equality.

mapnode :: Label lb => [lb] -> [lb] -> (lb -> lb) -> lb -> lb Source

Remap a single graph node.

If the node is not one of those to be remapped, the supplied value is returned unchanged.

maplist Source

Arguments

:: Label lb |
=> [lb] | oldnode values
-> [lb] | nodes to be avoided
-> (lb -> lb) |
-> [(lb, lb)] | accumulator
-> [(lb, lb)] |

Construct a list of (oldnode,newnode) values to be used for graph label remapping. The function operates recursively, adding new nodes generated to the accumulator and also to the list of nodes to be avoided.