swish-0.9.0.7: A semantic web toolkit.

Portability | OverloadedStrings
Stability | experimental
Maintainer | Douglas Burke
Safe Haskell | None

Swish.QName

Description

This module defines an algebraic datatype for qualified names (QNames), which represents a `URI` as the combination of a namespace `URI` and a local component (`LName`), which can be empty.

Although RDF supports using IRIs, the use of `URI` here precludes this, which means that, for instance, `LName` only accepts a subset of valid characters. There is currently no attempt to convert from an IRI into a URI.

Synopsis

- data QName
- data LName
- emptyLName :: LName
- newLName :: Text -> Maybe LName
- getLName :: LName -> Text
- newQName :: URI -> LName -> QName
- qnameFromURI :: URI -> Maybe QName
- getNamespace :: QName -> URI
- getLocalName :: QName -> LName
- getQNameURI :: QName -> URI
- qnameFromFilePath :: FilePath -> IO QName

# Documentation

data QName Source

A qualified name, consisting of a namespace URI and the local part of the identifier, which can be empty. The serialisation of a QName is formed by concatanating the two components.

     Prelude> :set prompt "swish> "
     swish> :set -XOverloadedStrings
     swish> :m + Swish.QName
     swish> let qn1 = "http://example.com/" :: QName
     swish> let qn2 = "http://example.com/bob" :: QName
     swish> let qn3 = "http://example.com/bob/fred" :: QName
     swish> let qn4 = "http://example.com/bob/fred#x" :: QName
     swish> let qn5 = "http://example.com/bob/fred:joe" :: QName
     swish> map getLocalName [qn1, qn2, qn3, qn4, qn5]
     ["","bob","fred","x","fred:joe"]
     swish> getNamespace qn1
     http://example.com/
     swish> getNamespace qn2
     http://example.com/
     swish> getNamespace qn3
     http://example.com/bob/
     swish> getNamespace qn4
     http://example.com/bob/fred#

Instances

Eq QName | Equality is determined by a case sensitive comparison of the URI.
Ord QName | In `0.8.0.0` the ordering now uses the ordering defined in Network.URI.Ord rather than the `Show` instance. This should make no difference unless a password was included in the URI when using basic access authorization.
Show QName | The format used to display the URI is `<uri>`, and does not include the password if using basic access authorization.
IsString QName | This is not total since it will fail if the input string is not a valid URI.
FromRDFLabel QName | Converts from a Resource.
ToRDFLabel QName | Converts to a Resource.

data LName Source

A local name, which can be empty.

At present, the local name can not contain a space character and can only contain ascii characters (those that match `isAscii`).

In version `0.9.0.3` and earlier, the following characters were not allowed in local names: '#', ':', or '/' characters.

This is all rather experimental.

Instances

Eq LName |
Ord LName |
Show LName |
IsString LName | This is not total since attempting to convert a string containing invalid characters will cause an error.

emptyLName :: LName Source

The empty local name.

newLName :: Text -> Maybe LName Source

Create a local name.

getLName :: LName -> Text Source

Extract the local name.

newQName Source

Arguments

:: URI | Namespace
-> LName | Local component
-> QName |

Create a new qualified name with an explicit local component.

qnameFromURI Source

Arguments

:: URI | The URI will be deconstructed to find if it contains a local component.
-> Maybe QName | The failure case may be removed.

Create a new qualified name.

getNamespace :: QName -> URI Source

Return the URI of the namespace stored in the QName. This does not contain the local component.

getLocalName :: QName -> LName Source

Return the local component of the QName.

getQNameURI :: QName -> URI Source

Returns the full URI of the QName (ie the combination of the namespace and local components).

qnameFromFilePath :: FilePath -> IO QName Source

Convert a filepath to a file: URI stored in a QName. If the input file path is relative then the current working directory is used to convert it into an absolute path.

If the input represents a directory then it *must* end in the directory separator - so for Posix systems use `"/foo/bar/"` rather than `"/foo/bar"`.

This has not been tested on Windows.