{-# LANGUAGE CPP #-}
{-# LANGUAGE OverloadedStrings #-}
module Swish.RDF.Parser.N3
( ParseResult
, parseN3
, parseN3fromText
, parseAnyfromText
, parseTextFromText, parseAltFromText
, parseNameFromText
, parseAbsURIrefFromText, parseLexURIrefFromText, parseURIref2FromText
, N3Parser, N3State(..), SpecialMap
, getPrefix
, n3symbol
, quickVariable
, lexUriRef
, document, subgraph
, newBlankNode
)
where
import Swish.GraphClass (arc)
import Swish.Namespace
( Namespace
, ScopedName
, makeNamespace
, getNamespaceTuple
, getScopeNamespace
, getScopedNameURI
, getScopeNamespace
, makeURIScopedName
, makeQNameScopedName
, makeNSScopedName
, nullScopedName
)
import Swish.QName (QName, newLName)
import Swish.RDF.Graph
( RDFGraph, RDFLabel(..)
, ToRDFLabel(..)
, NamespaceMap
, LookupFormula(..)
, addArc
, setFormula
, setNamespaces
, emptyRDFGraph
)
import Swish.RDF.Datatype (makeDatatypedLiteral)
import Swish.RDF.Vocabulary
( LanguageTag
, toLangTag
, rdfType
, rdfFirst, rdfRest, rdfNil
, owlSameAs, logImplies
, xsdBoolean, xsdInteger, xsdDecimal, xsdDouble
)
import Swish.RDF.Parser.Utils
( SpecialMap
, ParseResult
, runParserWithError
, prefixTable
, specialTable
, ignore
, notFollowedBy
, endBy
, sepEndBy
, noneOf
, char
, ichar
, string
, stringT
, symbol
, lexeme
, whiteSpace
, hex4
, hex8
, appendURIs
)
import Control.Applicative
import Control.Monad (forM_, foldM)
import Data.Char (isSpace, isDigit, ord, isAsciiLower)
#if MIN_VERSION_base(4, 7, 0)
import Data.Functor (($>))
#endif
import Data.Maybe (fromMaybe, fromJust)
import Data.Word (Word32)
import Network.URI (URI(..), parseURIReference)
import Text.ParserCombinators.Poly.StateText
import qualified Data.Map as M
import qualified Data.Text as T
import qualified Data.Text.Lazy as L
#if !MIN_VERSION_base(4, 7, 0)
($>) :: Functor f => f a -> b -> f b
($>) = flip (<$)
#endif
data N3State = N3State
{ N3State -> RDFGraph
graphState :: RDFGraph
, N3State -> RDFLabel
thisNode :: RDFLabel
, N3State -> NamespaceMap
prefixUris :: NamespaceMap
, N3State -> SpecialMap
syntaxUris :: SpecialMap
, N3State -> Word32
nodeGen :: Word32
, N3State -> [Text]
keywordsList :: [T.Text]
, N3State -> Bool
allowLocalNames :: Bool
}
setPrefix :: Maybe T.Text -> URI -> N3State -> N3State
setPrefix :: Maybe Text -> URI -> N3State -> N3State
setPrefix Maybe Text
pre URI
uri N3State
st = N3State
st { prefixUris=p' }
where
p' :: NamespaceMap
p' = Maybe Text -> URI -> NamespaceMap -> NamespaceMap
forall k a. Ord k => k -> a -> Map k a -> Map k a
M.insert Maybe Text
pre URI
uri (N3State -> NamespaceMap
prefixUris N3State
st)
setSName :: String -> ScopedName -> N3State -> N3State
setSName :: [Char] -> ScopedName -> N3State -> N3State
setSName [Char]
nam ScopedName
snam N3State
st = N3State
st { syntaxUris=s' }
where
s' :: SpecialMap
s' = [Char] -> ScopedName -> SpecialMap -> SpecialMap
forall k a. Ord k => k -> a -> Map k a -> Map k a
M.insert [Char]
nam ScopedName
snam (N3State -> SpecialMap
syntaxUris N3State
st)
setSUri :: String -> URI -> N3State -> N3State
setSUri :: [Char] -> URI -> N3State -> N3State
setSUri [Char]
nam = [Char] -> ScopedName -> N3State -> N3State
setSName [Char]
nam (ScopedName -> N3State -> N3State)
-> (URI -> ScopedName) -> URI -> N3State -> N3State
forall b c a. (b -> c) -> (a -> b) -> a -> c
. URI -> ScopedName
makeURIScopedName
setKeywordsList :: [T.Text] -> N3State -> N3State
setKeywordsList :: [Text] -> N3State -> N3State
setKeywordsList [Text]
ks N3State
st = N3State
st { keywordsList = ks, allowLocalNames = True }
getSName :: N3State -> String -> ScopedName
getSName :: N3State -> [Char] -> ScopedName
getSName N3State
st [Char]
nam = ScopedName -> [Char] -> SpecialMap -> ScopedName
forall k a. Ord k => a -> k -> Map k a -> a
M.findWithDefault ScopedName
nullScopedName [Char]
nam (SpecialMap -> ScopedName) -> SpecialMap -> ScopedName
forall a b. (a -> b) -> a -> b
$ N3State -> SpecialMap
syntaxUris N3State
st
getSUri :: N3State -> String -> URI
getSUri :: N3State -> [Char] -> URI
getSUri N3State
st [Char]
nam = ScopedName -> URI
getScopedNameURI (ScopedName -> URI) -> ScopedName -> URI
forall a b. (a -> b) -> a -> b
$ N3State -> [Char] -> ScopedName
getSName N3State
st [Char]
nam
getPrefixURI :: N3State -> Maybe T.Text -> Maybe URI
getPrefixURI :: N3State -> Maybe Text -> Maybe URI
getPrefixURI N3State
st Maybe Text
pre = Maybe Text -> NamespaceMap -> Maybe URI
forall k a. Ord k => k -> Map k a -> Maybe a
M.lookup Maybe Text
pre (N3State -> NamespaceMap
prefixUris N3State
st)
getKeywordsList :: N3State -> [T.Text]
getKeywordsList :: N3State -> [Text]
getKeywordsList = N3State -> [Text]
keywordsList
getAllowLocalNames :: N3State -> Bool
getAllowLocalNames :: N3State -> Bool
getAllowLocalNames = N3State -> Bool
allowLocalNames
updateGraph :: (RDFGraph -> RDFGraph) -> N3State -> N3State
updateGraph :: (RDFGraph -> RDFGraph) -> N3State -> N3State
updateGraph RDFGraph -> RDFGraph
f N3State
s = N3State
s { graphState = f (graphState s) }
type N3Parser a = Parser N3State a
parseN3fromText ::
L.Text
-> ParseResult
parseN3fromText :: Text -> ParseResult
parseN3fromText = (Text -> Maybe QName -> ParseResult)
-> Maybe QName -> Text -> ParseResult
forall a b c. (a -> b -> c) -> b -> a -> c
flip Text -> Maybe QName -> ParseResult
parseN3 Maybe QName
forall a. Maybe a
Nothing
parseN3 ::
L.Text
-> Maybe QName
-> ParseResult
parseN3 :: Text -> Maybe QName -> ParseResult
parseN3 Text
txt Maybe QName
mbase = N3Parser RDFGraph -> Maybe QName -> Text -> ParseResult
forall a. N3Parser a -> Maybe QName -> Text -> Either [Char] a
parseAnyfromText N3Parser RDFGraph
document Maybe QName
mbase Text
txt
hashURI :: URI
hashURI :: URI
hashURI = Maybe URI -> URI
forall a. HasCallStack => Maybe a -> a
fromJust (Maybe URI -> URI) -> Maybe URI -> URI
forall a b. (a -> b) -> a -> b
$ [Char] -> Maybe URI
parseURIReference [Char]
"#"
emptyState ::
Maybe QName
-> N3State
emptyState :: Maybe QName -> N3State
emptyState Maybe QName
mbase =
let pmap :: Map (Maybe a) URI
pmap = Maybe a -> URI -> Map (Maybe a) URI
forall k a. k -> a -> Map k a
M.singleton Maybe a
forall a. Maybe a
Nothing URI
hashURI
muri :: Maybe ScopedName
muri = (QName -> ScopedName) -> Maybe QName -> Maybe ScopedName
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Maybe Text -> QName -> ScopedName
makeQNameScopedName Maybe Text
forall a. Maybe a
Nothing) Maybe QName
mbase
smap :: SpecialMap
smap = [([Char], ScopedName)] -> SpecialMap
forall k a. Ord k => [(k, a)] -> Map k a
M.fromList ([([Char], ScopedName)] -> SpecialMap)
-> [([Char], ScopedName)] -> SpecialMap
forall a b. (a -> b) -> a -> b
$ Maybe ScopedName -> [([Char], ScopedName)]
specialTable Maybe ScopedName
muri
in N3State
{ graphState :: RDFGraph
graphState = RDFGraph
emptyRDFGraph
, thisNode :: RDFLabel
thisNode = RDFLabel
NoNode
, prefixUris :: NamespaceMap
prefixUris = NamespaceMap
forall {a}. Map (Maybe a) URI
pmap
, syntaxUris :: SpecialMap
syntaxUris = SpecialMap
smap
, nodeGen :: Word32
nodeGen = Word32
0
, keywordsList :: [Text]
keywordsList = [Text
"a", Text
"is", Text
"of", Text
"true", Text
"false"]
, allowLocalNames :: Bool
allowLocalNames = Bool
False
}
parseAnyfromText :: N3Parser a
-> Maybe QName
-> L.Text
-> Either String a
parseAnyfromText :: forall a. N3Parser a -> Maybe QName -> Text -> Either [Char] a
parseAnyfromText N3Parser a
parser Maybe QName
mbase = N3Parser a -> N3State -> Text -> Either [Char] a
forall a b. Parser a b -> a -> Text -> Either [Char] b
runParserWithError N3Parser a
parser (Maybe QName -> N3State
emptyState Maybe QName
mbase)
newBlankNode :: N3Parser RDFLabel
newBlankNode :: N3Parser RDFLabel
newBlankNode = do
Word32
n <- (N3State -> Word32) -> Parser N3State Word32
forall s a. (s -> a) -> Parser s a
stQuery (Word32 -> Word32
forall a. Enum a => a -> a
succ (Word32 -> Word32) -> (N3State -> Word32) -> N3State -> Word32
forall b c a. (b -> c) -> (a -> b) -> a -> c
. N3State -> Word32
nodeGen)
(N3State -> N3State) -> Parser N3State ()
forall s. (s -> s) -> Parser s ()
stUpdate ((N3State -> N3State) -> Parser N3State ())
-> (N3State -> N3State) -> Parser N3State ()
forall a b. (a -> b) -> a -> b
$ \N3State
s -> N3State
s { nodeGen = n }
RDFLabel -> N3Parser RDFLabel
forall a. a -> Parser N3State a
forall (m :: * -> *) a. Monad m => a -> m a
return (RDFLabel -> N3Parser RDFLabel) -> RDFLabel -> N3Parser RDFLabel
forall a b. (a -> b) -> a -> b
$ [Char] -> RDFLabel
Blank (Word32 -> [Char]
forall a. Show a => a -> [Char]
show Word32
n)
parseTextFromText :: String -> L.Text -> Either String String
parseTextFromText :: [Char] -> Text -> Either [Char] [Char]
parseTextFromText [Char]
s =
N3Parser [Char] -> Maybe QName -> Text -> Either [Char] [Char]
forall a. N3Parser a -> Maybe QName -> Text -> Either [Char] a
parseAnyfromText ([Char] -> N3Parser [Char]
forall s. [Char] -> Parser s [Char]
string [Char]
s) Maybe QName
forall a. Maybe a
Nothing
parseAltFromText :: String -> String -> L.Text -> Either String String
parseAltFromText :: [Char] -> [Char] -> Text -> Either [Char] [Char]
parseAltFromText [Char]
s1 [Char]
s2 =
N3Parser [Char] -> Maybe QName -> Text -> Either [Char] [Char]
forall a. N3Parser a -> Maybe QName -> Text -> Either [Char] a
parseAnyfromText ([Char] -> N3Parser [Char]
forall s. [Char] -> Parser s [Char]
string [Char]
s1 N3Parser [Char] -> N3Parser [Char] -> N3Parser [Char]
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> N3Parser [Char]
forall s. [Char] -> Parser s [Char]
string [Char]
s2) Maybe QName
forall a. Maybe a
Nothing
parseNameFromText :: L.Text -> Either String String
parseNameFromText :: Text -> Either [Char] [Char]
parseNameFromText =
N3Parser [Char] -> Maybe QName -> Text -> Either [Char] [Char]
forall a. N3Parser a -> Maybe QName -> Text -> Either [Char] a
parseAnyfromText N3Parser [Char]
n3NameStr Maybe QName
forall a. Maybe a
Nothing
addTestPrefixes :: N3Parser ()
addTestPrefixes :: Parser N3State ()
addTestPrefixes = (N3State -> N3State) -> Parser N3State ()
forall s. (s -> s) -> Parser s ()
stUpdate ((N3State -> N3State) -> Parser N3State ())
-> (N3State -> N3State) -> Parser N3State ()
forall a b. (a -> b) -> a -> b
$ \N3State
st -> N3State
st { prefixUris =
M.fromList
$ map getNamespaceTuple prefixTable
}
parseAbsURIrefFromText :: L.Text -> Either String URI
parseAbsURIrefFromText :: Text -> Either [Char] URI
parseAbsURIrefFromText =
N3Parser URI -> Maybe QName -> Text -> Either [Char] URI
forall a. N3Parser a -> Maybe QName -> Text -> Either [Char] a
parseAnyfromText N3Parser URI
explicitURI Maybe QName
forall a. Maybe a
Nothing
parseLexURIrefFromText :: L.Text -> Either String URI
parseLexURIrefFromText :: Text -> Either [Char] URI
parseLexURIrefFromText =
N3Parser URI -> Maybe QName -> Text -> Either [Char] URI
forall a. N3Parser a -> Maybe QName -> Text -> Either [Char] a
parseAnyfromText N3Parser URI
lexUriRef Maybe QName
forall a. Maybe a
Nothing
parseURIref2FromText :: L.Text -> Either String ScopedName
parseURIref2FromText :: Text -> Either [Char] ScopedName
parseURIref2FromText =
N3Parser ScopedName
-> Maybe QName -> Text -> Either [Char] ScopedName
forall a. N3Parser a -> Maybe QName -> Text -> Either [Char] a
parseAnyfromText (Parser N3State ()
addTestPrefixes Parser N3State () -> N3Parser ScopedName -> N3Parser ScopedName
forall a b.
Parser N3State a -> Parser N3State b -> Parser N3State b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> N3Parser ScopedName
n3symbol) Maybe QName
forall a. Maybe a
Nothing
comma, semiColon , fullStop :: N3Parser ()
comma :: Parser N3State ()
comma = N3Parser [Char] -> Parser N3State ()
forall (f :: * -> *) a. Applicative f => f a -> f ()
ignore (N3Parser [Char] -> Parser N3State ())
-> N3Parser [Char] -> Parser N3State ()
forall a b. (a -> b) -> a -> b
$ [Char] -> N3Parser [Char]
forall s. [Char] -> Parser s [Char]
symbol [Char]
","
semiColon :: Parser N3State ()
semiColon = N3Parser [Char] -> Parser N3State ()
forall (f :: * -> *) a. Applicative f => f a -> f ()
ignore (N3Parser [Char] -> Parser N3State ())
-> N3Parser [Char] -> Parser N3State ()
forall a b. (a -> b) -> a -> b
$ [Char] -> N3Parser [Char]
forall s. [Char] -> Parser s [Char]
symbol [Char]
";"
fullStop :: Parser N3State ()
fullStop = N3Parser [Char] -> Parser N3State ()
forall (f :: * -> *) a. Applicative f => f a -> f ()
ignore (N3Parser [Char] -> Parser N3State ())
-> N3Parser [Char] -> Parser N3State ()
forall a b. (a -> b) -> a -> b
$ [Char] -> N3Parser [Char]
forall s. [Char] -> Parser s [Char]
symbol [Char]
"."
br :: String -> String -> N3Parser a -> N3Parser a
br :: forall a. [Char] -> [Char] -> N3Parser a -> N3Parser a
br [Char]
lsym [Char]
rsym = N3Parser [Char]
-> N3Parser [Char] -> Parser N3State a -> Parser N3State a
forall (p :: * -> *) bra ket a.
PolyParse p =>
p bra -> p ket -> p a -> p a
bracket ([Char] -> N3Parser [Char]
forall s. [Char] -> Parser s [Char]
symbol [Char]
lsym) ([Char] -> N3Parser [Char]
forall s. [Char] -> Parser s [Char]
symbol [Char]
rsym)
between :: Parser s lbr -> Parser s rbr -> Parser s a -> Parser s a
between :: forall s lbr rbr a.
Parser s lbr -> Parser s rbr -> Parser s a -> Parser s a
between = Parser s lbr -> Parser s rbr -> Parser s a -> Parser s a
forall (p :: * -> *) bra ket a.
PolyParse p =>
p bra -> p ket -> p a -> p a
bracket
atSign :: T.Text -> N3Parser ()
atSign :: Text -> Parser N3State ()
atSign Text
s = do
N3State
st <- Parser N3State N3State
forall s. Parser s s
stGet
let p :: Parser s ()
p = Char -> Parser s ()
forall s. Char -> Parser s ()
ichar Char
'@'
if Text
s Text -> [Text] -> Bool
forall a. Eq a => a -> [a] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` N3State -> [Text]
getKeywordsList N3State
st
then Parser N3State (Maybe ()) -> Parser N3State ()
forall (f :: * -> *) a. Applicative f => f a -> f ()
ignore (Parser N3State (Maybe ()) -> Parser N3State ())
-> Parser N3State (Maybe ()) -> Parser N3State ()
forall a b. (a -> b) -> a -> b
$ Parser N3State () -> Parser N3State (Maybe ())
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional Parser N3State ()
forall {s}. Parser s ()
p
else Parser N3State ()
forall {s}. Parser s ()
p
atWord :: T.Text -> N3Parser T.Text
atWord :: Text -> N3Parser Text
atWord Text
s = do
Text -> Parser N3State ()
atSign Text
s
Parser N3State () -> Parser N3State ()
forall s a. Parser s a -> Parser s a
lexeme (Parser N3State () -> Parser N3State ())
-> Parser N3State () -> Parser N3State ()
forall a b. (a -> b) -> a -> b
$ Text -> N3Parser Text
forall s. Text -> Parser s Text
stringT Text
s N3Parser Text -> Parser N3State () -> Parser N3State ()
forall a b.
Parser N3State a -> Parser N3State b -> Parser N3State b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> (Char -> Bool) -> Parser N3State ()
forall s. (Char -> Bool) -> Parser s ()
notFollowedBy (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
':')
Text -> N3Parser Text
forall a. a -> Parser N3State a
forall (m :: * -> *) a. Monad m => a -> m a
return Text
s
operatorLabel :: ScopedName -> N3Parser RDFLabel
operatorLabel :: ScopedName -> N3Parser RDFLabel
operatorLabel ScopedName
snam = do
N3State
st <- Parser N3State N3State
forall s. Parser s s
stGet
let (Maybe Text
pkey, URI
pval) = Namespace -> (Maybe Text, URI)
getNamespaceTuple (Namespace -> (Maybe Text, URI)) -> Namespace -> (Maybe Text, URI)
forall a b. (a -> b) -> a -> b
$ ScopedName -> Namespace
getScopeNamespace ScopedName
snam
opmap :: NamespaceMap
opmap = N3State -> NamespaceMap
prefixUris N3State
st
rval :: RDFLabel
rval = ScopedName -> RDFLabel
Res ScopedName
snam
case Maybe Text -> NamespaceMap -> Maybe URI
forall k a. Ord k => k -> Map k a -> Maybe a
M.lookup Maybe Text
pkey NamespaceMap
opmap of
Just URI
val | URI
val URI -> URI -> Bool
forall a. Eq a => a -> a -> Bool
== URI
pval -> RDFLabel -> N3Parser RDFLabel
forall a. a -> Parser N3State a
forall (m :: * -> *) a. Monad m => a -> m a
return RDFLabel
rval
| Bool
otherwise -> do
(N3State -> N3State) -> Parser N3State ()
forall s. (s -> s) -> Parser s ()
stUpdate ((N3State -> N3State) -> Parser N3State ())
-> (N3State -> N3State) -> Parser N3State ()
forall a b. (a -> b) -> a -> b
$ \N3State
s -> N3State
s { prefixUris = M.insert pkey pval opmap }
RDFLabel -> N3Parser RDFLabel
forall a. a -> Parser N3State a
forall (m :: * -> *) a. Monad m => a -> m a
return RDFLabel
rval
Maybe URI
_ -> do
(N3State -> N3State) -> Parser N3State ()
forall s. (s -> s) -> Parser s ()
stUpdate ((N3State -> N3State) -> Parser N3State ())
-> (N3State -> N3State) -> Parser N3State ()
forall a b. (a -> b) -> a -> b
$ \N3State
s -> N3State
s { prefixUris = M.insert pkey pval opmap }
RDFLabel -> N3Parser RDFLabel
forall a. a -> Parser N3State a
forall (m :: * -> *) a. Monad m => a -> m a
return RDFLabel
rval
type AddStatement = RDFLabel -> N3Parser ()
addStatement :: RDFLabel -> RDFLabel -> AddStatement
addStatement :: RDFLabel -> RDFLabel -> AddStatement
addStatement RDFLabel
s RDFLabel
p o :: RDFLabel
o@(TypedLit Text
_ ScopedName
dtype) | ScopedName
dtype ScopedName -> [ScopedName] -> Bool
forall a. Eq a => a -> [a] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` [ScopedName
xsdBoolean, ScopedName
xsdInteger, ScopedName
xsdDecimal, ScopedName
xsdDouble] = do
N3State
ost <- Parser N3State N3State
forall s. Parser s s
stGet
let stmt :: Arc RDFLabel
stmt = RDFLabel -> RDFLabel -> RDFLabel -> Arc RDFLabel
forall lb. lb -> lb -> lb -> Arc lb
arc RDFLabel
s RDFLabel
p RDFLabel
o
oldp :: NamespaceMap
oldp = N3State -> NamespaceMap
prefixUris N3State
ost
ogs :: RDFGraph
ogs = N3State -> RDFGraph
graphState N3State
ost
(Maybe Text
ns, URI
uri) = Namespace -> (Maybe Text, URI)
getNamespaceTuple (Namespace -> (Maybe Text, URI)) -> Namespace -> (Maybe Text, URI)
forall a b. (a -> b) -> a -> b
$ ScopedName -> Namespace
getScopeNamespace ScopedName
dtype
newp :: NamespaceMap
newp = Maybe Text -> URI -> NamespaceMap -> NamespaceMap
forall k a. Ord k => k -> a -> Map k a -> Map k a
M.insert Maybe Text
ns URI
uri NamespaceMap
oldp
(N3State -> N3State) -> Parser N3State ()
forall s. (s -> s) -> Parser s ()
stUpdate ((N3State -> N3State) -> Parser N3State ())
-> (N3State -> N3State) -> Parser N3State ()
forall a b. (a -> b) -> a -> b
$ \N3State
st -> N3State
st { prefixUris = newp, graphState = addArc stmt ogs }
addStatement RDFLabel
s RDFLabel
p RDFLabel
o = (N3State -> N3State) -> Parser N3State ()
forall s. (s -> s) -> Parser s ()
stUpdate ((RDFGraph -> RDFGraph) -> N3State -> N3State
updateGraph (Arc RDFLabel -> RDFGraph -> RDFGraph
forall lb. Label lb => Arc lb -> NSGraph lb -> NSGraph lb
addArc (RDFLabel -> RDFLabel -> RDFLabel -> Arc RDFLabel
forall lb. lb -> lb -> lb -> Arc lb
arc RDFLabel
s RDFLabel
p RDFLabel
o) ))
addStatementRev :: RDFLabel -> RDFLabel -> AddStatement
addStatementRev :: RDFLabel -> RDFLabel -> AddStatement
addStatementRev RDFLabel
o RDFLabel
p RDFLabel
s = RDFLabel -> RDFLabel -> AddStatement
addStatement RDFLabel
s RDFLabel
p RDFLabel
o
isaz, is09, isaz09 :: Char -> Bool
isaz :: Char -> Bool
isaz = Char -> Bool
isAsciiLower
is09 :: Char -> Bool
is09 = Char -> Bool
isDigit
isaz09 :: Char -> Bool
isaz09 Char
c = Char -> Bool
isaz Char
c Bool -> Bool -> Bool
|| Char -> Bool
is09 Char
c
match :: (Ord a) => a -> [(a,a)] -> Bool
match :: forall a. Ord a => a -> [(a, a)] -> Bool
match a
v = ((a, a) -> Bool) -> [(a, a)] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
any (\(a
l,a
h) -> a
v a -> a -> Bool
forall a. Ord a => a -> a -> Bool
>= a
l Bool -> Bool -> Bool
&& a
v a -> a -> Bool
forall a. Ord a => a -> a -> Bool
<= a
h)
startChar :: Char -> Bool
startChar :: Char -> Bool
startChar Char
c = let i :: Int
i = Char -> Int
ord Char
c
in Char
c Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'_' Bool -> Bool -> Bool
||
Char -> [(Char, Char)] -> Bool
forall a. Ord a => a -> [(a, a)] -> Bool
match Char
c [(Char
'A', Char
'Z'), (Char
'a', Char
'z')] Bool -> Bool -> Bool
||
Int -> [(Int, Int)] -> Bool
forall a. Ord a => a -> [(a, a)] -> Bool
match Int
i [(Int
0x00c0, Int
0x00d6), (Int
0x00d8, Int
0x00f6), (Int
0x00f8, Int
0x02ff),
(Int
0x0370, Int
0x037d),
(Int
0x037f, Int
0x1fff), (Int
0x200c, Int
0x200d),
(Int
0x2070, Int
0x218f), (Int
0x2c00, Int
0x2fef), (Int
0x3001, Int
0xd7ff),
(Int
0xf900, Int
0xfdcf), (Int
0xfdf0, Int
0xfffd),
(Int
0x00010000, Int
0x000effff)]
inBody :: Char -> Bool
inBody :: Char -> Bool
inBody Char
c = let i :: Int
i = Char -> Int
ord Char
c
in Char
c Char -> [Char] -> Bool
forall a. Eq a => a -> [a] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` ([Char]
"-_"::String) Bool -> Bool -> Bool
|| Int
i Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
0x007 Bool -> Bool -> Bool
||
Char -> [(Char, Char)] -> Bool
forall a. Ord a => a -> [(a, a)] -> Bool
match Char
c [(Char
'0', Char
'9'), (Char
'A', Char
'Z'), (Char
'a', Char
'z')] Bool -> Bool -> Bool
||
Int -> [(Int, Int)] -> Bool
forall a. Ord a => a -> [(a, a)] -> Bool
match Int
i [(Int
0x00c0, Int
0x00d6), (Int
0x00d8, Int
0x00f6), (Int
0x00f8, Int
0x037d),
(Int
0x037f, Int
0x1fff), (Int
0x200c, Int
0x200d), (Int
0x203f, Int
0x2040),
(Int
0x2070, Int
0x218f), (Int
0x2c00, Int
0x2fef), (Int
0x3001, Int
0xd7ff),
(Int
0xf900, Int
0xfdcf), (Int
0xfdf0, Int
0xfffd),
(Int
0x00010000, Int
0x000effff)]
n3Name :: N3Parser T.Text
n3Name :: N3Parser Text
n3Name = Char -> Text -> Text
T.cons (Char -> Text -> Text)
-> Parser N3State Char -> Parser N3State (Text -> Text)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser N3State Char
forall {s}. Parser s Char
n3Init Parser N3State (Text -> Text) -> N3Parser Text -> N3Parser Text
forall a b.
Parser N3State (a -> b) -> Parser N3State a -> Parser N3State b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> N3Parser Text
forall {s}. Parser s Text
n3Body
where
n3Init :: Parser s Char
n3Init = (Char -> Bool) -> Parser s Char
forall s. (Char -> Bool) -> Parser s Char
satisfy Char -> Bool
startChar
n3Body :: Parser s Text
n3Body = Text -> Text
L.toStrict (Text -> Text) -> Parser s Text -> Parser s Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Char -> Bool) -> Parser s Text
forall s. (Char -> Bool) -> Parser s Text
manySatisfy Char -> Bool
inBody
n3NameStr :: N3Parser String
n3NameStr :: N3Parser [Char]
n3NameStr = Text -> [Char]
T.unpack (Text -> [Char]) -> N3Parser Text -> N3Parser [Char]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> N3Parser Text
n3Name
quickVariable :: N3Parser RDFLabel
quickVariable :: N3Parser RDFLabel
quickVariable = Char -> Parser N3State Char
forall s. Char -> Parser s Char
char Char
'?' Parser N3State Char -> N3Parser RDFLabel -> N3Parser RDFLabel
forall a b.
Parser N3State a -> Parser N3State b -> Parser N3State b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> ([Char] -> RDFLabel
Var ([Char] -> RDFLabel) -> N3Parser [Char] -> N3Parser RDFLabel
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> N3Parser [Char]
n3NameStr)
n3string :: N3Parser T.Text
n3string :: N3Parser Text
n3string = N3Parser Text
tripleQuoted N3Parser Text -> N3Parser Text -> N3Parser Text
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> N3Parser Text
singleQuoted
digit :: N3Parser Char
digit :: Parser N3State Char
digit = (Char -> Bool) -> Parser N3State Char
forall s. (Char -> Bool) -> Parser s Char
satisfy Char -> Bool
isDigit
protectedChar :: N3Parser Char
protectedChar :: Parser N3State Char
protectedChar =
(Char -> Parser N3State Char
forall s. Char -> Parser s Char
char Char
't' Parser N3State Char -> Char -> Parser N3State Char
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Char
'\t')
Parser N3State Char -> Parser N3State Char -> Parser N3State Char
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> (Char -> Parser N3State Char
forall s. Char -> Parser s Char
char Char
'n' Parser N3State Char -> Char -> Parser N3State Char
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Char
'\n')
Parser N3State Char -> Parser N3State Char -> Parser N3State Char
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> (Char -> Parser N3State Char
forall s. Char -> Parser s Char
char Char
'r' Parser N3State Char -> Char -> Parser N3State Char
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Char
'\r')
Parser N3State Char -> Parser N3State Char -> Parser N3State Char
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> (Char -> Parser N3State Char
forall s. Char -> Parser s Char
char Char
'"' Parser N3State Char -> Char -> Parser N3State Char
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Char
'"')
Parser N3State Char -> Parser N3State Char -> Parser N3State Char
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> (Char -> Parser N3State Char
forall s. Char -> Parser s Char
char Char
'\'' Parser N3State Char -> Char -> Parser N3State Char
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Char
'\'')
Parser N3State Char -> Parser N3State Char -> Parser N3State Char
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> (Char -> Parser N3State Char
forall s. Char -> Parser s Char
char Char
'\\' Parser N3State Char -> Char -> Parser N3State Char
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Char
'\\')
Parser N3State Char -> Parser N3State Char -> Parser N3State Char
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> (Char -> Parser N3State Char
forall s. Char -> Parser s Char
char Char
'u' Parser N3State Char -> Parser N3State Char -> Parser N3State Char
forall a b.
Parser N3State a -> Parser N3State b -> Parser N3State b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser N3State Char
forall {s}. Parser s Char
hex4)
Parser N3State Char -> Parser N3State Char -> Parser N3State Char
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> (Char -> Parser N3State Char
forall s. Char -> Parser s Char
char Char
'U' Parser N3State Char -> Parser N3State Char -> Parser N3State Char
forall a b.
Parser N3State a -> Parser N3State b -> Parser N3State b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser N3State Char
forall {s}. Parser s Char
hex8)
n3Character :: N3Parser Char
n3Character :: Parser N3State Char
n3Character =
(Char -> Parser N3State Char
forall s. Char -> Parser s Char
char Char
'\\' Parser N3State Char -> Parser N3State Char -> Parser N3State Char
forall a b.
Parser N3State a -> Parser N3State b -> Parser N3State b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> (Parser N3State Char
protectedChar Parser N3State Char -> Parser N3State Char -> Parser N3State Char
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Char -> Parser N3State Char
forall a. a -> Parser N3State a
forall (m :: * -> *) a. Monad m => a -> m a
return Char
'\\'))
Parser N3State Char -> Parser N3State Char -> Parser N3State Char
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Parser N3State Char
forall s. [Char] -> Parser s Char
noneOf [Char]
"\"\n"
sQuot :: N3Parser Char
sQuot :: Parser N3State Char
sQuot = Char -> Parser N3State Char
forall s. Char -> Parser s Char
char Char
'"'
singleQuoted :: N3Parser T.Text
singleQuoted :: N3Parser Text
singleQuoted = [Char] -> Text
T.pack ([Char] -> Text) -> N3Parser [Char] -> N3Parser Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser N3State Char
-> Parser N3State Char -> N3Parser [Char] -> N3Parser [Char]
forall (p :: * -> *) bra ket a.
PolyParse p =>
p bra -> p ket -> p a -> p a
bracket Parser N3State Char
sQuot Parser N3State Char
sQuot (Parser N3State Char -> N3Parser [Char]
forall a. Parser N3State a -> Parser N3State [a]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many Parser N3State Char
n3Character)
tripleQuoted :: N3Parser T.Text
tripleQuoted :: N3Parser Text
tripleQuoted =
let sep :: N3Parser [Char]
sep = Int -> Parser N3State Char -> N3Parser [Char]
forall (p :: * -> *) a. PolyParse p => Int -> p a -> p [a]
exactly Int
3 Parser N3State Char
sQuot
in [Text] -> Text
T.concat ([Text] -> Text) -> Parser N3State [Text] -> N3Parser Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> N3Parser [Char]
-> N3Parser [Char]
-> Parser N3State [Text]
-> Parser N3State [Text]
forall (p :: * -> *) bra ket a.
PolyParse p =>
p bra -> p ket -> p a -> p a
bracket N3Parser [Char]
sep N3Parser [Char]
sep (N3Parser Text -> Parser N3State [Text]
forall a. Parser N3State a -> Parser N3State [a]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many N3Parser Text
_tCharsLong)
oneOrTwo :: N3Parser T.Text
oneOrTwo :: N3Parser Text
oneOrTwo = do
Parser N3State Char -> Parser N3State ()
forall (f :: * -> *) a. Applicative f => f a -> f ()
ignore (Parser N3State Char -> Parser N3State ())
-> Parser N3State Char -> Parser N3State ()
forall a b. (a -> b) -> a -> b
$ Char -> Parser N3State Char
forall s. Char -> Parser s Char
char Char
'"'
Maybe Char
mb <- Parser N3State Char -> Parser N3State (Maybe Char)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Char -> Parser N3State Char
forall s. Char -> Parser s Char
char Char
'"')
case Maybe Char
mb of
Just Char
_ -> Text -> N3Parser Text
forall a. a -> Parser N3State a
forall (m :: * -> *) a. Monad m => a -> m a
return Text
"\"\""
Maybe Char
_ -> Text -> N3Parser Text
forall a. a -> Parser N3State a
forall (m :: * -> *) a. Monad m => a -> m a
return Text
"\""
_multiQuote :: N3Parser T.Text
_multiQuote :: N3Parser Text
_multiQuote = do
Maybe Text
mq <- N3Parser Text -> Parser N3State (Maybe Text)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional N3Parser Text
oneOrTwo
Char
r <- [Char] -> Parser N3State Char
forall s. [Char] -> Parser s Char
noneOf [Char]
"\"\\"
Text -> N3Parser Text
forall a. a -> Parser N3State a
forall (m :: * -> *) a. Monad m => a -> m a
return (Text -> N3Parser Text) -> Text -> N3Parser Text
forall a b. (a -> b) -> a -> b
$ Text -> Maybe Text -> Text
forall a. a -> Maybe a -> a
fromMaybe Text
T.empty Maybe Text
mq Text -> Char -> Text
`T.snoc` Char
r
_tCharsLong :: N3Parser T.Text
_tCharsLong :: N3Parser Text
_tCharsLong =
Char -> Text
T.singleton (Char -> Text) -> Parser N3State Char -> N3Parser Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser N3State Char
_protChar
N3Parser Text -> N3Parser Text -> N3Parser Text
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> N3Parser Text
_multiQuote
_protChar :: N3Parser Char
_protChar :: Parser N3State Char
_protChar = Char -> Parser N3State Char
forall s. Char -> Parser s Char
char Char
'\\' Parser N3State Char -> Parser N3State Char -> Parser N3State Char
forall a b.
Parser N3State a -> Parser N3State b -> Parser N3State b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> (Parser N3State Char
_echar' Parser N3State Char -> Parser N3State Char -> Parser N3State Char
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser N3State Char
_uchar')
_echar' :: N3Parser Char
_echar' :: Parser N3State Char
_echar' =
(Char -> Parser N3State Char
forall s. Char -> Parser s Char
char Char
't' Parser N3State Char -> Char -> Parser N3State Char
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Char
'\t') Parser N3State Char -> Parser N3State Char -> Parser N3State Char
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|>
(Char -> Parser N3State Char
forall s. Char -> Parser s Char
char Char
'b' Parser N3State Char -> Char -> Parser N3State Char
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Char
'\b') Parser N3State Char -> Parser N3State Char -> Parser N3State Char
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|>
(Char -> Parser N3State Char
forall s. Char -> Parser s Char
char Char
'n' Parser N3State Char -> Char -> Parser N3State Char
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Char
'\n') Parser N3State Char -> Parser N3State Char -> Parser N3State Char
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|>
(Char -> Parser N3State Char
forall s. Char -> Parser s Char
char Char
'r' Parser N3State Char -> Char -> Parser N3State Char
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Char
'\r') Parser N3State Char -> Parser N3State Char -> Parser N3State Char
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|>
(Char -> Parser N3State Char
forall s. Char -> Parser s Char
char Char
'f' Parser N3State Char -> Char -> Parser N3State Char
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Char
'\f') Parser N3State Char -> Parser N3State Char -> Parser N3State Char
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|>
(Char -> Parser N3State Char
forall s. Char -> Parser s Char
char Char
'\\' Parser N3State Char -> Char -> Parser N3State Char
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Char
'\\') Parser N3State Char -> Parser N3State Char -> Parser N3State Char
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|>
(Char -> Parser N3State Char
forall s. Char -> Parser s Char
char Char
'"' Parser N3State Char -> Char -> Parser N3State Char
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Char
'"') Parser N3State Char -> Parser N3State Char -> Parser N3State Char
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|>
(Char -> Parser N3State Char
forall s. Char -> Parser s Char
char Char
'\'' Parser N3State Char -> Char -> Parser N3State Char
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Char
'\'')
_uchar' :: N3Parser Char
_uchar' :: Parser N3State Char
_uchar' =
(Char -> Parser N3State Char
forall s. Char -> Parser s Char
char Char
'u' Parser N3State Char -> Parser N3State Char -> Parser N3State Char
forall a b.
Parser N3State a -> Parser N3State b -> Parser N3State b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser N3State Char -> Parser N3State Char
forall a. Parser N3State a -> Parser N3State a
forall (p :: * -> *) a. Commitment p => p a -> p a
commit Parser N3State Char
forall {s}. Parser s Char
hex4)
Parser N3State Char -> Parser N3State Char -> Parser N3State Char
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|>
(Char -> Parser N3State Char
forall s. Char -> Parser s Char
char Char
'U' Parser N3State Char -> Parser N3State Char -> Parser N3State Char
forall a b.
Parser N3State a -> Parser N3State b -> Parser N3State b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser N3State Char -> Parser N3State Char
forall a. Parser N3State a -> Parser N3State a
forall (p :: * -> *) a. Commitment p => p a -> p a
commit Parser N3State Char
forall {s}. Parser s Char
hex8)
getDefaultPrefix :: N3Parser Namespace
getDefaultPrefix :: N3Parser Namespace
getDefaultPrefix = do
N3State
s <- Parser N3State N3State
forall s. Parser s s
stGet
case N3State -> Maybe Text -> Maybe URI
getPrefixURI N3State
s Maybe Text
forall a. Maybe a
Nothing of
Just URI
uri -> Namespace -> N3Parser Namespace
forall a. a -> Parser N3State a
forall (m :: * -> *) a. Monad m => a -> m a
return (Namespace -> N3Parser Namespace)
-> Namespace -> N3Parser Namespace
forall a b. (a -> b) -> a -> b
$ Maybe Text -> URI -> Namespace
makeNamespace Maybe Text
forall a. Maybe a
Nothing URI
uri
Maybe URI
_ -> [Char] -> N3Parser Namespace
forall a. [Char] -> Parser N3State a
forall (m :: * -> *) a. MonadFail m => [Char] -> m a
fail [Char]
"No default prefix defined; how unexpected!"
addBase :: URI -> N3Parser ()
addBase :: URI -> Parser N3State ()
addBase = (N3State -> N3State) -> Parser N3State ()
forall s. (s -> s) -> Parser s ()
stUpdate ((N3State -> N3State) -> Parser N3State ())
-> (URI -> N3State -> N3State) -> URI -> Parser N3State ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> URI -> N3State -> N3State
setSUri [Char]
"base"
addPrefix :: Maybe T.Text -> URI -> N3Parser ()
addPrefix :: Maybe Text -> URI -> Parser N3State ()
addPrefix Maybe Text
p = (N3State -> N3State) -> Parser N3State ()
forall s. (s -> s) -> Parser s ()
stUpdate ((N3State -> N3State) -> Parser N3State ())
-> (URI -> N3State -> N3State) -> URI -> Parser N3State ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Maybe Text -> URI -> N3State -> N3State
setPrefix Maybe Text
p
updateKeywordsList :: [T.Text] -> N3Parser ()
updateKeywordsList :: [Text] -> Parser N3State ()
updateKeywordsList = (N3State -> N3State) -> Parser N3State ()
forall s. (s -> s) -> Parser s ()
stUpdate ((N3State -> N3State) -> Parser N3State ())
-> ([Text] -> N3State -> N3State) -> [Text] -> Parser N3State ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Text] -> N3State -> N3State
setKeywordsList
document :: N3Parser RDFGraph
document :: N3Parser RDFGraph
document = N3State -> RDFGraph
mkGr (N3State -> RDFGraph)
-> Parser N3State N3State -> N3Parser RDFGraph
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Parser N3State ()
forall {s}. Parser s ()
whiteSpace Parser N3State () -> Parser N3State () -> Parser N3State ()
forall a b.
Parser N3State a -> Parser N3State b -> Parser N3State b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser N3State ()
statementsOptional Parser N3State () -> Parser N3State () -> Parser N3State ()
forall a b.
Parser N3State a -> Parser N3State b -> Parser N3State b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser N3State ()
forall {s}. Parser s ()
eof Parser N3State ()
-> Parser N3State N3State -> Parser N3State N3State
forall a b.
Parser N3State a -> Parser N3State b -> Parser N3State b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser N3State N3State
forall s. Parser s s
stGet)
where
mkGr :: N3State -> RDFGraph
mkGr N3State
s = NamespaceMap -> RDFGraph -> RDFGraph
forall lb. NamespaceMap -> NSGraph lb -> NSGraph lb
setNamespaces (N3State -> NamespaceMap
prefixUris N3State
s) (N3State -> RDFGraph
graphState N3State
s)
statementsOptional :: N3Parser ()
statementsOptional :: Parser N3State ()
statementsOptional = Parser N3State [()] -> Parser N3State ()
forall (f :: * -> *) a. Applicative f => f a -> f ()
ignore (Parser N3State [()] -> Parser N3State ())
-> Parser N3State [()] -> Parser N3State ()
forall a b. (a -> b) -> a -> b
$ Parser N3State () -> Parser N3State () -> Parser N3State [()]
forall s a b. Parser s a -> Parser s b -> Parser s [a]
endBy (Parser N3State () -> Parser N3State ()
forall s a. Parser s a -> Parser s a
lexeme Parser N3State ()
statement) Parser N3State ()
fullStop
statement :: N3Parser ()
statement :: Parser N3State ()
statement =
Parser N3State ()
declaration
Parser N3State () -> Parser N3State () -> Parser N3State ()
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser N3State ()
existential
Parser N3State () -> Parser N3State () -> Parser N3State ()
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser N3State ()
universal
Parser N3State () -> Parser N3State () -> Parser N3State ()
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser N3State ()
simpleStatement
declaration :: N3Parser ()
declaration :: Parser N3State ()
declaration = [Parser N3State ()] -> Parser N3State ()
forall (p :: * -> *) a. PolyParse p => [p a] -> p a
oneOf [
Text -> N3Parser Text
atWord Text
"base" N3Parser Text -> N3Parser URI -> N3Parser URI
forall a b.
Parser N3State a -> Parser N3State b -> Parser N3State b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> N3Parser URI
explicitURI N3Parser URI -> (URI -> Parser N3State ()) -> Parser N3State ()
forall a b.
Parser N3State a -> (a -> Parser N3State b) -> Parser N3State b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= URI -> Parser N3State ()
addBase,
Text -> N3Parser Text
atWord Text
"keywords" N3Parser Text -> Parser N3State [Text] -> Parser N3State [Text]
forall a b.
Parser N3State a -> Parser N3State b -> Parser N3State b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Parser N3State [Text]
bareNameCsl Parser N3State [Text]
-> ([Text] -> Parser N3State ()) -> Parser N3State ()
forall a b.
Parser N3State a -> (a -> Parser N3State b) -> Parser N3State b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= [Text] -> Parser N3State ()
updateKeywordsList,
Text -> N3Parser Text
atWord Text
"prefix" N3Parser Text -> Parser N3State () -> Parser N3State ()
forall a b.
Parser N3State a -> Parser N3State b -> Parser N3State b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser N3State ()
getPrefix
]
getPrefix :: N3Parser ()
getPrefix :: Parser N3State ()
getPrefix = do
Maybe Text
p <- Parser N3State (Maybe Text) -> Parser N3State (Maybe Text)
forall s a. Parser s a -> Parser s a
lexeme Parser N3State (Maybe Text)
prefix
URI
u <- N3Parser URI
explicitURI
Maybe Text -> URI -> Parser N3State ()
addPrefix Maybe Text
p URI
u
explicitURI :: N3Parser URI
explicitURI :: N3Parser URI
explicitURI = do
Parser N3State Char -> Parser N3State ()
forall (f :: * -> *) a. Applicative f => f a -> f ()
ignore (Parser N3State Char -> Parser N3State ())
-> Parser N3State Char -> Parser N3State ()
forall a b. (a -> b) -> a -> b
$ Char -> Parser N3State Char
forall s. Char -> Parser s Char
char Char
'<'
[Char]
ustr <- Parser N3State Char -> Parser N3State Char -> N3Parser [Char]
forall (p :: * -> *) a z.
(PolyParse p, Show a) =>
p a -> p z -> p [a]
manyFinally' (((Char -> Bool) -> Parser N3State Char
forall s. (Char -> Bool) -> Parser s Char
satisfy Char -> Bool
isSpace Parser N3State Char -> Parser N3State Char -> Parser N3State Char
forall a b.
Parser N3State a -> Parser N3State b -> Parser N3State b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser N3State Char
forall {s}. Parser s Char
next) Parser N3State Char -> Parser N3State Char -> Parser N3State Char
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser N3State Char
forall {s}. Parser s Char
next) (Char -> Parser N3State Char
forall s. Char -> Parser s Char
char Char
'>')
case [Char] -> Maybe URI
parseURIReference [Char]
ustr of
Maybe URI
Nothing -> [Char] -> N3Parser URI
forall (p :: * -> *) a. PolyParse p => [Char] -> p a
failBad ([Char] -> N3Parser URI) -> [Char] -> N3Parser URI
forall a b. (a -> b) -> a -> b
$ [Char]
"Invalid URI: <" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
ustr [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
">"
Just URI
uref -> do
N3State
s <- Parser N3State N3State
forall s. Parser s s
stGet
let base :: URI
base = N3State -> [Char] -> URI
getSUri N3State
s [Char]
"base"
([Char] -> N3Parser URI)
-> (URI -> N3Parser URI) -> Either [Char] URI -> N3Parser URI
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either [Char] -> N3Parser URI
forall a. [Char] -> Parser N3State a
forall (m :: * -> *) a. MonadFail m => [Char] -> m a
fail URI -> N3Parser URI
forall a. a -> Parser N3State a
forall (m :: * -> *) a. Monad m => a -> m a
return (Either [Char] URI -> N3Parser URI)
-> Either [Char] URI -> N3Parser URI
forall a b. (a -> b) -> a -> b
$ URI -> URI -> Either [Char] URI
appendURIs URI
base URI
uref
lexUriRef :: N3Parser URI
lexUriRef :: N3Parser URI
lexUriRef = N3Parser URI -> N3Parser URI
forall s a. Parser s a -> Parser s a
lexeme N3Parser URI
explicitURI
bareNameCsl :: N3Parser [T.Text]
bareNameCsl :: Parser N3State [Text]
bareNameCsl = N3Parser Text -> Parser N3State () -> Parser N3State [Text]
forall (p :: * -> *) a sep. PolyParse p => p a -> p sep -> p [a]
sepBy (N3Parser Text -> N3Parser Text
forall s a. Parser s a -> Parser s a
lexeme N3Parser Text
bareName) Parser N3State ()
comma
bareName :: N3Parser T.Text
bareName :: N3Parser Text
bareName = N3Parser Text
n3Name
prefix :: N3Parser (Maybe T.Text)
prefix :: Parser N3State (Maybe Text)
prefix = N3Parser Text -> Parser N3State (Maybe Text)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (N3Parser Text -> N3Parser Text
forall s a. Parser s a -> Parser s a
lexeme N3Parser Text
n3Name) Parser N3State (Maybe Text)
-> Parser N3State Char -> Parser N3State (Maybe Text)
forall a b.
Parser N3State a -> Parser N3State b -> Parser N3State a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Char -> Parser N3State Char
forall s. Char -> Parser s Char
char Char
':'
n3symbol :: N3Parser ScopedName
n3symbol :: N3Parser ScopedName
n3symbol =
(URI -> ScopedName
makeURIScopedName (URI -> ScopedName) -> N3Parser URI -> N3Parser ScopedName
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> N3Parser URI
explicitURI)
N3Parser ScopedName -> N3Parser ScopedName -> N3Parser ScopedName
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> N3Parser ScopedName
qname
symbolCsl :: N3Parser [ScopedName]
symbolCsl :: N3Parser [ScopedName]
symbolCsl = N3Parser ScopedName -> Parser N3State () -> N3Parser [ScopedName]
forall (p :: * -> *) a sep. PolyParse p => p a -> p sep -> p [a]
sepBy (N3Parser ScopedName -> N3Parser ScopedName
forall s a. Parser s a -> Parser s a
lexeme N3Parser ScopedName
n3symbol) Parser N3State ()
comma
toName :: Namespace -> T.Text -> ScopedName
toName :: Namespace -> Text -> ScopedName
toName Namespace
ns Text
l =
case Text -> Maybe LName
newLName Text
l of
Just LName
local -> Namespace -> LName -> ScopedName
makeNSScopedName Namespace
ns LName
local
Maybe LName
_ -> [Char] -> ScopedName
forall a. HasCallStack => [Char] -> a
error ([Char] -> ScopedName) -> [Char] -> ScopedName
forall a b. (a -> b) -> a -> b
$ [Char]
"Invalid local name: " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ Text -> [Char]
T.unpack Text
l
qname :: N3Parser ScopedName
qname :: N3Parser ScopedName
qname = N3Parser ScopedName
qname1 N3Parser ScopedName -> N3Parser ScopedName -> N3Parser ScopedName
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> N3Parser ScopedName
qname2
qname1 :: N3Parser ScopedName
qname1 :: N3Parser ScopedName
qname1 = ((Namespace, Text) -> ScopedName)
-> Parser N3State (Namespace, Text) -> N3Parser ScopedName
forall a b. (a -> b) -> Parser N3State a -> Parser N3State b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((Namespace -> Text -> ScopedName)
-> (Namespace, Text) -> ScopedName
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Namespace -> Text -> ScopedName
toName) (Char -> Parser N3State Char
forall s. Char -> Parser s Char
char Char
':' Parser N3State Char
-> Parser N3State (Namespace, Text)
-> Parser N3State (Namespace, Text)
forall a b.
Parser N3State a -> Parser N3State b -> Parser N3State b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Parser N3State (Namespace, Text)
g)
where
g :: Parser N3State (Namespace, Text)
g = (,) (Namespace -> Text -> (Namespace, Text))
-> N3Parser Namespace -> Parser N3State (Text -> (Namespace, Text))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> N3Parser Namespace
getDefaultPrefix Parser N3State (Text -> (Namespace, Text))
-> N3Parser Text -> Parser N3State (Namespace, Text)
forall a b.
Parser N3State (a -> b) -> Parser N3State a -> Parser N3State b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (N3Parser Text
n3Name N3Parser Text -> N3Parser Text -> N3Parser Text
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> N3Parser Text
forall a. a -> Parser N3State a
forall (m :: * -> *) a. Monad m => a -> m a
return Text
"")
qname2 :: N3Parser ScopedName
qname2 :: N3Parser ScopedName
qname2 = N3Parser Text
n3Name N3Parser Text
-> (Text -> N3Parser ScopedName) -> N3Parser ScopedName
forall a b.
Parser N3State a -> (a -> Parser N3State b) -> Parser N3State b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Text -> N3Parser ScopedName
fullOrLocalQName
fullOrLocalQName :: T.Text -> N3Parser ScopedName
fullOrLocalQName :: Text -> N3Parser ScopedName
fullOrLocalQName Text
name =
(Char -> Parser N3State Char
forall s. Char -> Parser s Char
char Char
':' Parser N3State Char -> N3Parser ScopedName -> N3Parser ScopedName
forall a b.
Parser N3State a -> Parser N3State b -> Parser N3State b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Text -> N3Parser ScopedName
fullQName Text
name)
N3Parser ScopedName -> N3Parser ScopedName -> N3Parser ScopedName
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> N3Parser ScopedName
localQName Text
name
fullQName :: T.Text -> N3Parser ScopedName
fullQName :: Text -> N3Parser ScopedName
fullQName Text
name = Namespace -> Text -> ScopedName
toName (Namespace -> Text -> ScopedName)
-> N3Parser Namespace -> Parser N3State (Text -> ScopedName)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text -> N3Parser Namespace
findPrefix Text
name Parser N3State (Text -> ScopedName)
-> N3Parser Text -> N3Parser ScopedName
forall a b.
Parser N3State (a -> b) -> Parser N3State a -> Parser N3State b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (N3Parser Text
n3Name N3Parser Text -> N3Parser Text -> N3Parser Text
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> N3Parser Text
forall a. a -> Parser N3State a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"")
findPrefix :: T.Text -> N3Parser Namespace
findPrefix :: Text -> N3Parser Namespace
findPrefix Text
pre = do
N3State
st <- Parser N3State N3State
forall s. Parser s s
stGet
case Maybe Text -> NamespaceMap -> Maybe URI
forall k a. Ord k => k -> Map k a -> Maybe a
M.lookup (Text -> Maybe Text
forall a. a -> Maybe a
Just Text
pre) (N3State -> NamespaceMap
prefixUris N3State
st) of
Just URI
uri -> Namespace -> N3Parser Namespace
forall a. a -> Parser N3State a
forall (m :: * -> *) a. Monad m => a -> m a
return (Namespace -> N3Parser Namespace)
-> Namespace -> N3Parser Namespace
forall a b. (a -> b) -> a -> b
$ Maybe Text -> URI -> Namespace
makeNamespace (Text -> Maybe Text
forall a. a -> Maybe a
Just Text
pre) URI
uri
Maybe URI
Nothing -> [Char] -> N3Parser Namespace
forall (p :: * -> *) a. PolyParse p => [Char] -> p a
failBad ([Char] -> N3Parser Namespace) -> [Char] -> N3Parser Namespace
forall a b. (a -> b) -> a -> b
$ [Char]
"Prefix '" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ Text -> [Char]
T.unpack Text
pre [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
":' not bound."
localQName :: T.Text -> N3Parser ScopedName
localQName :: Text -> N3Parser ScopedName
localQName Text
name = do
N3State
st <- Parser N3State N3State
forall s. Parser s s
stGet
if N3State -> Bool
getAllowLocalNames N3State
st
then let g :: Parser N3State (Namespace, Text)
g = (,) (Namespace -> Text -> (Namespace, Text))
-> N3Parser Namespace -> Parser N3State (Text -> (Namespace, Text))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> N3Parser Namespace
getDefaultPrefix Parser N3State (Text -> (Namespace, Text))
-> N3Parser Text -> Parser N3State (Namespace, Text)
forall a b.
Parser N3State (a -> b) -> Parser N3State a -> Parser N3State b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> N3Parser Text
forall a. a -> Parser N3State a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
name
in (Namespace -> Text -> ScopedName)
-> (Namespace, Text) -> ScopedName
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Namespace -> Text -> ScopedName
toName ((Namespace, Text) -> ScopedName)
-> Parser N3State (Namespace, Text) -> N3Parser ScopedName
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser N3State (Namespace, Text)
g
else [Char] -> N3Parser ScopedName
forall a. [Char] -> Parser N3State a
forall (m :: * -> *) a. MonadFail m => [Char] -> m a
fail ([Char]
"Invalid 'bare' word: " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ Text -> [Char]
T.unpack Text
name)
existential :: N3Parser ()
existential :: Parser N3State ()
existential = (Text -> N3Parser Text
atWord Text
"forSome" N3Parser Text -> N3Parser [ScopedName] -> N3Parser [ScopedName]
forall a b.
Parser N3State a -> Parser N3State b -> Parser N3State b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> N3Parser [ScopedName]
symbolCsl) N3Parser [ScopedName] -> () -> Parser N3State ()
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> ()
simpleStatement :: N3Parser ()
simpleStatement :: Parser N3State ()
simpleStatement = N3Parser RDFLabel
subject N3Parser RDFLabel -> AddStatement -> Parser N3State ()
forall a b.
Parser N3State a -> (a -> Parser N3State b) -> Parser N3State b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= AddStatement
propertyListWith
subject :: N3Parser RDFLabel
subject :: N3Parser RDFLabel
subject = N3Parser RDFLabel -> N3Parser RDFLabel
forall s a. Parser s a -> Parser s a
lexeme N3Parser RDFLabel
expression
expression :: N3Parser RDFLabel
expression :: N3Parser RDFLabel
expression = do
RDFLabel
i <- N3Parser RDFLabel
pathItem
let backwardExpr :: Parser s (RDFLabel -> RDFLabel -> AddStatement)
backwardExpr = Char -> Parser s Char
forall s. Char -> Parser s Char
char Char
'!' Parser s Char
-> (RDFLabel -> RDFLabel -> AddStatement)
-> Parser s (RDFLabel -> RDFLabel -> AddStatement)
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> RDFLabel -> RDFLabel -> AddStatement
addStatementRev
forwardExpr :: Parser s (RDFLabel -> RDFLabel -> AddStatement)
forwardExpr = Char -> Parser s Char
forall s. Char -> Parser s Char
char Char
'^' Parser s Char
-> (RDFLabel -> RDFLabel -> AddStatement)
-> Parser s (RDFLabel -> RDFLabel -> AddStatement)
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> RDFLabel -> RDFLabel -> AddStatement
addStatement
Maybe (RDFLabel -> RDFLabel -> AddStatement, RDFLabel)
mpt <- Parser N3State (RDFLabel -> RDFLabel -> AddStatement, RDFLabel)
-> Parser
N3State (Maybe (RDFLabel -> RDFLabel -> AddStatement, RDFLabel))
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional
( (,) ((RDFLabel -> RDFLabel -> AddStatement)
-> RDFLabel -> (RDFLabel -> RDFLabel -> AddStatement, RDFLabel))
-> Parser N3State (RDFLabel -> RDFLabel -> AddStatement)
-> Parser
N3State
(RDFLabel -> (RDFLabel -> RDFLabel -> AddStatement, RDFLabel))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser N3State (RDFLabel -> RDFLabel -> AddStatement)
-> Parser N3State (RDFLabel -> RDFLabel -> AddStatement)
forall s a. Parser s a -> Parser s a
lexeme (Parser N3State (RDFLabel -> RDFLabel -> AddStatement)
forall {s}. Parser s (RDFLabel -> RDFLabel -> AddStatement)
forwardExpr Parser N3State (RDFLabel -> RDFLabel -> AddStatement)
-> Parser N3State (RDFLabel -> RDFLabel -> AddStatement)
-> Parser N3State (RDFLabel -> RDFLabel -> AddStatement)
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser N3State (RDFLabel -> RDFLabel -> AddStatement)
forall {s}. Parser s (RDFLabel -> RDFLabel -> AddStatement)
backwardExpr) Parser
N3State
(RDFLabel -> (RDFLabel -> RDFLabel -> AddStatement, RDFLabel))
-> N3Parser RDFLabel
-> Parser N3State (RDFLabel -> RDFLabel -> AddStatement, RDFLabel)
forall a b.
Parser N3State (a -> b) -> Parser N3State a -> Parser N3State b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> N3Parser RDFLabel -> N3Parser RDFLabel
forall s a. Parser s a -> Parser s a
lexeme N3Parser RDFLabel
expression )
case Maybe (RDFLabel -> RDFLabel -> AddStatement, RDFLabel)
mpt of
Maybe (RDFLabel -> RDFLabel -> AddStatement, RDFLabel)
Nothing -> RDFLabel -> N3Parser RDFLabel
forall a. a -> Parser N3State a
forall (m :: * -> *) a. Monad m => a -> m a
return RDFLabel
i
Just (RDFLabel -> RDFLabel -> AddStatement
addFunc, RDFLabel
pt) -> do
RDFLabel
bNode <- N3Parser RDFLabel
newBlankNode
RDFLabel -> RDFLabel -> AddStatement
addFunc RDFLabel
bNode RDFLabel
pt RDFLabel
i
RDFLabel -> N3Parser RDFLabel
forall a. a -> Parser N3State a
forall (m :: * -> *) a. Monad m => a -> m a
return RDFLabel
bNode
pathItem :: N3Parser RDFLabel
pathItem :: N3Parser RDFLabel
pathItem =
[Char] -> [Char] -> N3Parser RDFLabel -> N3Parser RDFLabel
forall a. [Char] -> [Char] -> N3Parser a -> N3Parser a
br [Char]
"(" [Char]
")" N3Parser RDFLabel
pathList
N3Parser RDFLabel -> N3Parser RDFLabel -> N3Parser RDFLabel
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> [Char] -> N3Parser RDFLabel -> N3Parser RDFLabel
forall a. [Char] -> [Char] -> N3Parser a -> N3Parser a
br [Char]
"[" [Char]
"]" N3Parser RDFLabel
propertyListBNode
N3Parser RDFLabel -> N3Parser RDFLabel -> N3Parser RDFLabel
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> [Char] -> N3Parser RDFLabel -> N3Parser RDFLabel
forall a. [Char] -> [Char] -> N3Parser a -> N3Parser a
br [Char]
"{" [Char]
"}" N3Parser RDFLabel
formulaContent
N3Parser RDFLabel -> N3Parser RDFLabel -> N3Parser RDFLabel
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> N3Parser RDFLabel
boolean
N3Parser RDFLabel -> N3Parser RDFLabel -> N3Parser RDFLabel
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> N3Parser RDFLabel
literal
N3Parser RDFLabel -> N3Parser RDFLabel -> N3Parser RDFLabel
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> N3Parser RDFLabel
numericLiteral
N3Parser RDFLabel -> N3Parser RDFLabel -> N3Parser RDFLabel
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> N3Parser RDFLabel
quickVariable
N3Parser RDFLabel -> N3Parser RDFLabel -> N3Parser RDFLabel
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> RDFLabel
Blank ([Char] -> RDFLabel) -> N3Parser [Char] -> N3Parser RDFLabel
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ([Char] -> N3Parser [Char]
forall s. [Char] -> Parser s [Char]
string [Char]
"_:" N3Parser [Char] -> N3Parser [Char] -> N3Parser [Char]
forall a b.
Parser N3State a -> Parser N3State b -> Parser N3State b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> N3Parser [Char]
n3NameStr)
N3Parser RDFLabel -> N3Parser RDFLabel -> N3Parser RDFLabel
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> ScopedName -> RDFLabel
Res (ScopedName -> RDFLabel)
-> N3Parser ScopedName -> N3Parser RDFLabel
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> N3Parser ScopedName
n3symbol
pathList :: N3Parser RDFLabel
pathList :: N3Parser RDFLabel
pathList = do
[RDFLabel]
cts <- N3Parser RDFLabel -> Parser N3State [RDFLabel]
forall a. Parser N3State a -> Parser N3State [a]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many (N3Parser RDFLabel -> N3Parser RDFLabel
forall s a. Parser s a -> Parser s a
lexeme N3Parser RDFLabel
expression)
RDFLabel
eNode <- ScopedName -> N3Parser RDFLabel
operatorLabel ScopedName
rdfNil
case [RDFLabel]
cts of
[] -> RDFLabel -> N3Parser RDFLabel
forall a. a -> Parser N3State a
forall (m :: * -> *) a. Monad m => a -> m a
return RDFLabel
eNode
(RDFLabel
c:[RDFLabel]
cs) -> do
RDFLabel
sNode <- N3Parser RDFLabel
newBlankNode
RDFLabel
first <- ScopedName -> N3Parser RDFLabel
operatorLabel ScopedName
rdfFirst
RDFLabel -> RDFLabel -> AddStatement
addStatement RDFLabel
sNode RDFLabel
first RDFLabel
c
RDFLabel
lNode <- (RDFLabel -> RDFLabel -> N3Parser RDFLabel)
-> RDFLabel -> [RDFLabel] -> N3Parser RDFLabel
forall (t :: * -> *) (m :: * -> *) b a.
(Foldable t, Monad m) =>
(b -> a -> m b) -> b -> t a -> m b
foldM RDFLabel -> RDFLabel -> N3Parser RDFLabel
addElem RDFLabel
sNode [RDFLabel]
cs
RDFLabel
rest <- ScopedName -> N3Parser RDFLabel
operatorLabel ScopedName
rdfRest
RDFLabel -> RDFLabel -> AddStatement
addStatement RDFLabel
lNode RDFLabel
rest RDFLabel
eNode
RDFLabel -> N3Parser RDFLabel
forall a. a -> Parser N3State a
forall (m :: * -> *) a. Monad m => a -> m a
return RDFLabel
sNode
where
addElem :: RDFLabel -> RDFLabel -> N3Parser RDFLabel
addElem RDFLabel
prevNode RDFLabel
curElem = do
RDFLabel
bNode <- N3Parser RDFLabel
newBlankNode
RDFLabel
first <- ScopedName -> N3Parser RDFLabel
operatorLabel ScopedName
rdfFirst
RDFLabel
rest <- ScopedName -> N3Parser RDFLabel
operatorLabel ScopedName
rdfRest
RDFLabel -> RDFLabel -> AddStatement
addStatement RDFLabel
prevNode RDFLabel
rest RDFLabel
bNode
RDFLabel -> RDFLabel -> AddStatement
addStatement RDFLabel
bNode RDFLabel
first RDFLabel
curElem
RDFLabel -> N3Parser RDFLabel
forall a. a -> Parser N3State a
forall (m :: * -> *) a. Monad m => a -> m a
return RDFLabel
bNode
restoreState :: N3State -> N3Parser N3State
restoreState :: N3State -> Parser N3State N3State
restoreState N3State
origState = do
N3State
oldState <- Parser N3State N3State
forall s. Parser s s
stGet
(N3State -> N3State) -> Parser N3State ()
forall s. (s -> s) -> Parser s ()
stUpdate ((N3State -> N3State) -> Parser N3State ())
-> (N3State -> N3State) -> Parser N3State ()
forall a b. (a -> b) -> a -> b
$ N3State -> N3State -> N3State
forall a b. a -> b -> a
const N3State
origState { nodeGen = nodeGen oldState }
N3State -> Parser N3State N3State
forall a. a -> Parser N3State a
forall (m :: * -> *) a. Monad m => a -> m a
return N3State
oldState
formulaContent :: N3Parser RDFLabel
formulaContent :: N3Parser RDFLabel
formulaContent = do
RDFLabel
bNode <- N3Parser RDFLabel
newBlankNode
N3State
pstate <- Parser N3State N3State
forall s. Parser s s
stGet
(N3State -> N3State) -> Parser N3State ()
forall s. (s -> s) -> Parser s ()
stUpdate ((N3State -> N3State) -> Parser N3State ())
-> (N3State -> N3State) -> Parser N3State ()
forall a b. (a -> b) -> a -> b
$ \N3State
st -> N3State
st { graphState = emptyRDFGraph, thisNode = bNode }
Parser N3State ()
statementList
N3State
oldState <- N3State -> Parser N3State N3State
restoreState N3State
pstate
(N3State -> N3State) -> Parser N3State ()
forall s. (s -> s) -> Parser s ()
stUpdate ((N3State -> N3State) -> Parser N3State ())
-> (N3State -> N3State) -> Parser N3State ()
forall a b. (a -> b) -> a -> b
$ (RDFGraph -> RDFGraph) -> N3State -> N3State
updateGraph ((RDFGraph -> RDFGraph) -> N3State -> N3State)
-> (RDFGraph -> RDFGraph) -> N3State -> N3State
forall a b. (a -> b) -> a -> b
$ Formula RDFLabel -> RDFGraph -> RDFGraph
forall lb. Label lb => Formula lb -> NSGraph lb -> NSGraph lb
setFormula (RDFLabel -> RDFGraph -> Formula RDFLabel
forall lb gr. lb -> gr -> LookupFormula lb gr
Formula RDFLabel
bNode (N3State -> RDFGraph
graphState N3State
oldState))
RDFLabel -> N3Parser RDFLabel
forall a. a -> Parser N3State a
forall (m :: * -> *) a. Monad m => a -> m a
return RDFLabel
bNode
subgraph :: RDFLabel -> N3Parser RDFGraph
subgraph :: RDFLabel -> N3Parser RDFGraph
subgraph RDFLabel
this = do
N3State
pstate <- Parser N3State N3State
forall s. Parser s s
stGet
(N3State -> N3State) -> Parser N3State ()
forall s. (s -> s) -> Parser s ()
stUpdate ((N3State -> N3State) -> Parser N3State ())
-> (N3State -> N3State) -> Parser N3State ()
forall a b. (a -> b) -> a -> b
$ \N3State
st -> N3State
st { graphState = emptyRDFGraph, thisNode = this }
Parser N3State ()
statementsOptional
N3State
oldState <- N3State -> Parser N3State N3State
restoreState N3State
pstate
RDFGraph -> N3Parser RDFGraph
forall a. a -> Parser N3State a
forall (m :: * -> *) a. Monad m => a -> m a
return (RDFGraph -> N3Parser RDFGraph) -> RDFGraph -> N3Parser RDFGraph
forall a b. (a -> b) -> a -> b
$ N3State -> RDFGraph
graphState N3State
oldState
statementList :: N3Parser ()
statementList :: Parser N3State ()
statementList = Parser N3State [()] -> Parser N3State ()
forall (f :: * -> *) a. Applicative f => f a -> f ()
ignore (Parser N3State [()] -> Parser N3State ())
-> Parser N3State [()] -> Parser N3State ()
forall a b. (a -> b) -> a -> b
$ Parser N3State () -> Parser N3State () -> Parser N3State [()]
forall s a b. Parser s a -> Parser s b -> Parser s [a]
sepEndBy (Parser N3State () -> Parser N3State ()
forall s a. Parser s a -> Parser s a
lexeme Parser N3State ()
statement) Parser N3State ()
fullStop
boolean :: N3Parser RDFLabel
boolean :: N3Parser RDFLabel
boolean = ScopedName -> Text -> RDFLabel
makeDatatypedLiteral ScopedName
xsdBoolean (Text -> RDFLabel) -> N3Parser Text -> N3Parser RDFLabel
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
(Text -> N3Parser Text
atWord Text
"false" N3Parser Text -> N3Parser Text -> N3Parser Text
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> N3Parser Text
atWord Text
"true")
literal :: N3Parser RDFLabel
literal :: N3Parser RDFLabel
literal = do
Text
lit <- N3Parser Text
n3string
Maybe (Either LanguageTag ScopedName)
opt <- Parser N3State (Either LanguageTag ScopedName)
-> Parser N3State (Maybe (Either LanguageTag ScopedName))
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional Parser N3State (Either LanguageTag ScopedName)
dtlang
RDFLabel -> N3Parser RDFLabel
forall a. a -> Parser N3State a
forall (m :: * -> *) a. Monad m => a -> m a
return (RDFLabel -> N3Parser RDFLabel) -> RDFLabel -> N3Parser RDFLabel
forall a b. (a -> b) -> a -> b
$ case Maybe (Either LanguageTag ScopedName)
opt of
Just (Left LanguageTag
lcode) -> Text -> LanguageTag -> RDFLabel
LangLit Text
lit LanguageTag
lcode
Just (Right ScopedName
dtype) -> Text -> ScopedName -> RDFLabel
TypedLit Text
lit ScopedName
dtype
Maybe (Either LanguageTag ScopedName)
_ -> Text -> RDFLabel
Lit Text
lit
dtlang :: N3Parser (Either LanguageTag ScopedName)
dtlang :: Parser N3State (Either LanguageTag ScopedName)
dtlang =
(Char -> Parser N3State Char
forall s. Char -> Parser s Char
char Char
'@' Parser N3State Char
-> Parser N3State (Either LanguageTag ScopedName)
-> Parser N3State (Either LanguageTag ScopedName)
forall a b.
Parser N3State a -> Parser N3State b -> Parser N3State b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> (LanguageTag -> Either LanguageTag ScopedName
forall a b. a -> Either a b
Left (LanguageTag -> Either LanguageTag ScopedName)
-> Parser N3State LanguageTag
-> Parser N3State (Either LanguageTag ScopedName)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser N3State LanguageTag
langcode))
Parser N3State (Either LanguageTag ScopedName)
-> Parser N3State (Either LanguageTag ScopedName)
-> Parser N3State (Either LanguageTag ScopedName)
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> N3Parser [Char]
forall s. [Char] -> Parser s [Char]
string [Char]
"^^" N3Parser [Char]
-> Parser N3State (Either LanguageTag ScopedName)
-> Parser N3State (Either LanguageTag ScopedName)
forall a b.
Parser N3State a -> Parser N3State b -> Parser N3State b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> (ScopedName -> Either LanguageTag ScopedName
forall a b. b -> Either a b
Right (ScopedName -> Either LanguageTag ScopedName)
-> N3Parser ScopedName
-> Parser N3State (Either LanguageTag ScopedName)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> N3Parser ScopedName
n3symbol)
langcode :: N3Parser LanguageTag
langcode :: Parser N3State LanguageTag
langcode = do
Text
h <- (Char -> Bool) -> Parser N3State Text
forall s. (Char -> Bool) -> Parser s Text
many1Satisfy Char -> Bool
isaz
Maybe Text
mt <- Parser N3State Text -> Parser N3State (Maybe Text)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Char -> Text -> Text
L.cons (Char -> Text -> Text)
-> Parser N3State Char -> Parser N3State (Text -> Text)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Char -> Parser N3State Char
forall s. Char -> Parser s Char
char Char
'-' Parser N3State (Text -> Text)
-> Parser N3State Text -> Parser N3State Text
forall a b.
Parser N3State (a -> b) -> Parser N3State a -> Parser N3State b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Char -> Bool) -> Parser N3State Text
forall s. (Char -> Bool) -> Parser s Text
many1Satisfy Char -> Bool
isaz09)
let lbl :: Text
lbl = Text -> Text
L.toStrict (Text -> Text) -> Text -> Text
forall a b. (a -> b) -> a -> b
$ Text -> Text -> Text
L.append Text
h (Text -> Text) -> Text -> Text
forall a b. (a -> b) -> a -> b
$ Text -> Maybe Text -> Text
forall a. a -> Maybe a -> a
fromMaybe Text
L.empty Maybe Text
mt
case Text -> Maybe LanguageTag
toLangTag Text
lbl of
Just LanguageTag
lt -> LanguageTag -> Parser N3State LanguageTag
forall a. a -> Parser N3State a
forall (m :: * -> *) a. Monad m => a -> m a
return LanguageTag
lt
Maybe LanguageTag
_ -> [Char] -> Parser N3State LanguageTag
forall a. [Char] -> Parser N3State a
forall (m :: * -> *) a. MonadFail m => [Char] -> m a
fail ([Char]
"Invalid language tag: " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ Text -> [Char]
T.unpack Text
lbl)
numericLiteral :: N3Parser RDFLabel
numericLiteral :: N3Parser RDFLabel
numericLiteral =
[Char] -> RDFLabel
d2s ([Char] -> RDFLabel) -> N3Parser [Char] -> N3Parser RDFLabel
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> N3Parser [Char]
n3double
N3Parser RDFLabel -> N3Parser RDFLabel -> N3Parser RDFLabel
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> ScopedName -> Text -> RDFLabel
makeDatatypedLiteral ScopedName
xsdDecimal (Text -> RDFLabel) -> ([Char] -> Text) -> [Char] -> RDFLabel
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> Text
T.pack ([Char] -> RDFLabel) -> N3Parser [Char] -> N3Parser RDFLabel
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> N3Parser [Char]
n3decimal
N3Parser RDFLabel -> N3Parser RDFLabel -> N3Parser RDFLabel
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> ScopedName -> Text -> RDFLabel
makeDatatypedLiteral ScopedName
xsdInteger (Text -> RDFLabel) -> ([Char] -> Text) -> [Char] -> RDFLabel
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> Text
T.pack ([Char] -> RDFLabel) -> N3Parser [Char] -> N3Parser RDFLabel
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> N3Parser [Char]
n3integer
n3sign :: N3Parser Char
n3sign :: Parser N3State Char
n3sign = Char -> Parser N3State Char
forall s. Char -> Parser s Char
char Char
'+' Parser N3State Char -> Parser N3State Char -> Parser N3State Char
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Char -> Parser N3State Char
forall s. Char -> Parser s Char
char Char
'-'
n3integer :: N3Parser String
n3integer :: N3Parser [Char]
n3integer = do
Maybe Char
ms <- Parser N3State Char -> Parser N3State (Maybe Char)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional Parser N3State Char
n3sign
[Char]
ds <- Parser N3State Char -> N3Parser [Char]
forall (p :: * -> *) a. PolyParse p => p a -> p [a]
many1 Parser N3State Char
digit
case Maybe Char
ms of
Just Char
s -> [Char] -> N3Parser [Char]
forall a. a -> Parser N3State a
forall (m :: * -> *) a. Monad m => a -> m a
return ([Char] -> N3Parser [Char]) -> [Char] -> N3Parser [Char]
forall a b. (a -> b) -> a -> b
$ Char
s Char -> [Char] -> [Char]
forall a. a -> [a] -> [a]
: [Char]
ds
Maybe Char
_ -> [Char] -> N3Parser [Char]
forall a. a -> Parser N3State a
forall (m :: * -> *) a. Monad m => a -> m a
return [Char]
ds
n3decimal :: N3Parser String
n3decimal :: N3Parser [Char]
n3decimal = [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
(++) ([Char] -> [Char] -> [Char])
-> N3Parser [Char] -> Parser N3State ([Char] -> [Char])
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> N3Parser [Char]
n3integer Parser N3State ([Char] -> [Char])
-> N3Parser [Char] -> N3Parser [Char]
forall a b.
Parser N3State (a -> b) -> Parser N3State a -> Parser N3State b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ( (:) (Char -> [Char] -> [Char])
-> Parser N3State Char -> Parser N3State ([Char] -> [Char])
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Char -> Parser N3State Char
forall s. Char -> Parser s Char
char Char
'.' Parser N3State ([Char] -> [Char])
-> N3Parser [Char] -> N3Parser [Char]
forall a b.
Parser N3State (a -> b) -> Parser N3State a -> Parser N3State b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser N3State Char -> N3Parser [Char]
forall a. Parser N3State a -> Parser N3State [a]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many Parser N3State Char
digit )
n3double :: N3Parser String
n3double :: N3Parser [Char]
n3double = [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
(++)
([Char] -> [Char] -> [Char])
-> N3Parser [Char] -> Parser N3State ([Char] -> [Char])
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> N3Parser [Char]
n3decimal
Parser N3State ([Char] -> [Char])
-> N3Parser [Char] -> N3Parser [Char]
forall a b.
Parser N3State (a -> b) -> Parser N3State a -> Parser N3State b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ( (:) (Char -> [Char] -> [Char])
-> Parser N3State Char -> Parser N3State ([Char] -> [Char])
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Char -> Bool) -> Parser N3State Char
forall s. (Char -> Bool) -> Parser s Char
satisfy (Char -> [Char] -> Bool
forall a. Eq a => a -> [a] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` ([Char]
"eE"::String)) Parser N3State ([Char] -> [Char])
-> N3Parser [Char] -> N3Parser [Char]
forall a b.
Parser N3State (a -> b) -> Parser N3State a -> Parser N3State b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> N3Parser [Char]
n3integer )
d2s :: String -> RDFLabel
d2s :: [Char] -> RDFLabel
d2s [Char]
s = Double -> RDFLabel
forall a. ToRDFLabel a => a -> RDFLabel
toRDFLabel ([Char] -> Double
forall a. Read a => [Char] -> a
read [Char]
s :: Double)
propertyListBNode :: N3Parser RDFLabel
propertyListBNode :: N3Parser RDFLabel
propertyListBNode = do
[((RDFLabel -> RDFLabel -> AddStatement, RDFLabel), [RDFLabel])]
plist <- Parser
N3State
((RDFLabel -> RDFLabel -> AddStatement, RDFLabel), [RDFLabel])
-> Parser N3State ()
-> Parser
N3State
[((RDFLabel -> RDFLabel -> AddStatement, RDFLabel), [RDFLabel])]
forall s a b. Parser s a -> Parser s b -> Parser s [a]
sepEndBy ((,) ((RDFLabel -> RDFLabel -> AddStatement, RDFLabel)
-> [RDFLabel]
-> ((RDFLabel -> RDFLabel -> AddStatement, RDFLabel), [RDFLabel]))
-> Parser N3State (RDFLabel -> RDFLabel -> AddStatement, RDFLabel)
-> Parser
N3State
([RDFLabel]
-> ((RDFLabel -> RDFLabel -> AddStatement, RDFLabel), [RDFLabel]))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser N3State (RDFLabel -> RDFLabel -> AddStatement, RDFLabel)
-> Parser N3State (RDFLabel -> RDFLabel -> AddStatement, RDFLabel)
forall s a. Parser s a -> Parser s a
lexeme Parser N3State (RDFLabel -> RDFLabel -> AddStatement, RDFLabel)
verb Parser
N3State
([RDFLabel]
-> ((RDFLabel -> RDFLabel -> AddStatement, RDFLabel), [RDFLabel]))
-> Parser N3State [RDFLabel]
-> Parser
N3State
((RDFLabel -> RDFLabel -> AddStatement, RDFLabel), [RDFLabel])
forall a b.
Parser N3State (a -> b) -> Parser N3State a -> Parser N3State b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser N3State [RDFLabel]
objectList) Parser N3State ()
semiColon
RDFLabel
bNode <- N3Parser RDFLabel
newBlankNode
let addList :: ((RDFLabel -> t -> a -> m b, t), t a) -> m ()
addList ((RDFLabel -> t -> a -> m b
addFunc,t
vrb),t a
items) = (a -> m b) -> t a -> m ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ (RDFLabel -> t -> a -> m b
addFunc RDFLabel
bNode t
vrb) t a
items
[((RDFLabel -> RDFLabel -> AddStatement, RDFLabel), [RDFLabel])]
-> (((RDFLabel -> RDFLabel -> AddStatement, RDFLabel), [RDFLabel])
-> Parser N3State ())
-> Parser N3State ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
t a -> (a -> m b) -> m ()
forM_ [((RDFLabel -> RDFLabel -> AddStatement, RDFLabel), [RDFLabel])]
plist ((RDFLabel -> RDFLabel -> AddStatement, RDFLabel), [RDFLabel])
-> Parser N3State ()
forall {t :: * -> *} {m :: * -> *} {t} {a} {b}.
(Foldable t, Monad m) =>
((RDFLabel -> t -> a -> m b, t), t a) -> m ()
addList
RDFLabel -> N3Parser RDFLabel
forall a. a -> Parser N3State a
forall (m :: * -> *) a. Monad m => a -> m a
return RDFLabel
bNode
propertyListWith :: RDFLabel -> N3Parser ()
propertyListWith :: AddStatement
propertyListWith RDFLabel
subj =
let
term :: Parser N3State ()
term = Parser N3State (RDFLabel -> RDFLabel -> AddStatement, RDFLabel)
-> Parser N3State (RDFLabel -> RDFLabel -> AddStatement, RDFLabel)
forall s a. Parser s a -> Parser s a
lexeme Parser N3State (RDFLabel -> RDFLabel -> AddStatement, RDFLabel)
verb Parser N3State (RDFLabel -> RDFLabel -> AddStatement, RDFLabel)
-> ((RDFLabel -> RDFLabel -> AddStatement, RDFLabel)
-> Parser N3State ())
-> Parser N3State ()
forall a b.
Parser N3State a -> (a -> Parser N3State b) -> Parser N3State b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \(RDFLabel -> RDFLabel -> AddStatement
addFunc, RDFLabel
vrb) -> AddStatement -> Parser N3State ()
objectListWith (RDFLabel -> RDFLabel -> AddStatement
addFunc RDFLabel
subj RDFLabel
vrb)
in Parser N3State [()] -> Parser N3State ()
forall (f :: * -> *) a. Applicative f => f a -> f ()
ignore (Parser N3State [()] -> Parser N3State ())
-> Parser N3State [()] -> Parser N3State ()
forall a b. (a -> b) -> a -> b
$ Parser N3State () -> Parser N3State () -> Parser N3State [()]
forall s a b. Parser s a -> Parser s b -> Parser s [a]
sepEndBy Parser N3State ()
term Parser N3State ()
semiColon
object :: N3Parser RDFLabel
object :: N3Parser RDFLabel
object = N3Parser RDFLabel -> N3Parser RDFLabel
forall s a. Parser s a -> Parser s a
lexeme N3Parser RDFLabel
expression
objectList :: N3Parser [RDFLabel]
objectList :: Parser N3State [RDFLabel]
objectList = N3Parser RDFLabel -> Parser N3State () -> Parser N3State [RDFLabel]
forall (p :: * -> *) a sep. PolyParse p => p a -> p sep -> p [a]
sepBy1 N3Parser RDFLabel
object Parser N3State ()
comma
objectWith :: AddStatement -> N3Parser ()
objectWith :: AddStatement -> Parser N3State ()
objectWith AddStatement
addFunc = N3Parser RDFLabel
object N3Parser RDFLabel -> AddStatement -> Parser N3State ()
forall a b.
Parser N3State a -> (a -> Parser N3State b) -> Parser N3State b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= AddStatement
addFunc
objectListWith :: AddStatement -> N3Parser ()
objectListWith :: AddStatement -> Parser N3State ()
objectListWith AddStatement
addFunc =
Parser N3State [()] -> Parser N3State ()
forall (f :: * -> *) a. Applicative f => f a -> f ()
ignore (Parser N3State [()] -> Parser N3State ())
-> Parser N3State [()] -> Parser N3State ()
forall a b. (a -> b) -> a -> b
$ Parser N3State () -> Parser N3State () -> Parser N3State [()]
forall (p :: * -> *) a sep. PolyParse p => p a -> p sep -> p [a]
sepBy1 (AddStatement -> Parser N3State ()
objectWith AddStatement
addFunc) Parser N3State ()
comma
verb :: N3Parser (RDFLabel -> RDFLabel -> AddStatement, RDFLabel)
verb :: Parser N3State (RDFLabel -> RDFLabel -> AddStatement, RDFLabel)
verb =
(,) RDFLabel -> RDFLabel -> AddStatement
addStatementRev (RDFLabel -> (RDFLabel -> RDFLabel -> AddStatement, RDFLabel))
-> N3Parser RDFLabel
-> Parser N3State (RDFLabel -> RDFLabel -> AddStatement, RDFLabel)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> N3Parser RDFLabel
verbReverse
Parser N3State (RDFLabel -> RDFLabel -> AddStatement, RDFLabel)
-> Parser N3State (RDFLabel -> RDFLabel -> AddStatement, RDFLabel)
-> Parser N3State (RDFLabel -> RDFLabel -> AddStatement, RDFLabel)
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> (,) RDFLabel -> RDFLabel -> AddStatement
addStatement (RDFLabel -> (RDFLabel -> RDFLabel -> AddStatement, RDFLabel))
-> N3Parser RDFLabel
-> Parser N3State (RDFLabel -> RDFLabel -> AddStatement, RDFLabel)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> N3Parser RDFLabel
verbForward
verbReverse :: N3Parser RDFLabel
verbReverse :: N3Parser RDFLabel
verbReverse =
[Char] -> N3Parser [Char]
forall s. [Char] -> Parser s [Char]
string [Char]
"<=" N3Parser [Char] -> N3Parser RDFLabel -> N3Parser RDFLabel
forall a b.
Parser N3State a -> Parser N3State b -> Parser N3State b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> ScopedName -> N3Parser RDFLabel
operatorLabel ScopedName
logImplies
N3Parser RDFLabel -> N3Parser RDFLabel -> N3Parser RDFLabel
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> N3Parser Text
-> N3Parser Text -> N3Parser RDFLabel -> N3Parser RDFLabel
forall s lbr rbr a.
Parser s lbr -> Parser s rbr -> Parser s a -> Parser s a
between (Text -> N3Parser Text
atWord Text
"is") (Text -> N3Parser Text
atWord Text
"of") (N3Parser RDFLabel -> N3Parser RDFLabel
forall s a. Parser s a -> Parser s a
lexeme N3Parser RDFLabel
expression)
verbForward :: N3Parser RDFLabel
verbForward :: N3Parser RDFLabel
verbForward =
([Char] -> N3Parser [Char]
forall s. [Char] -> Parser s [Char]
string [Char]
"=>" N3Parser [Char] -> N3Parser RDFLabel -> N3Parser RDFLabel
forall a b.
Parser N3State a -> Parser N3State b -> Parser N3State b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> ScopedName -> N3Parser RDFLabel
operatorLabel ScopedName
logImplies)
N3Parser RDFLabel -> N3Parser RDFLabel -> N3Parser RDFLabel
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> ([Char] -> N3Parser [Char]
forall s. [Char] -> Parser s [Char]
string [Char]
"=" N3Parser [Char] -> N3Parser RDFLabel -> N3Parser RDFLabel
forall a b.
Parser N3State a -> Parser N3State b -> Parser N3State b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> ScopedName -> N3Parser RDFLabel
operatorLabel ScopedName
owlSameAs)
N3Parser RDFLabel -> N3Parser RDFLabel -> N3Parser RDFLabel
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> (Text -> N3Parser Text
atWord Text
"a" N3Parser Text -> N3Parser RDFLabel -> N3Parser RDFLabel
forall a b.
Parser N3State a -> Parser N3State b -> Parser N3State b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> ScopedName -> N3Parser RDFLabel
operatorLabel ScopedName
rdfType)
N3Parser RDFLabel -> N3Parser RDFLabel -> N3Parser RDFLabel
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> (Text -> N3Parser Text
atWord Text
"has" N3Parser Text -> N3Parser RDFLabel -> N3Parser RDFLabel
forall a b.
Parser N3State a -> Parser N3State b -> Parser N3State b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> N3Parser RDFLabel -> N3Parser RDFLabel
forall s a. Parser s a -> Parser s a
lexeme N3Parser RDFLabel
expression)
N3Parser RDFLabel -> N3Parser RDFLabel -> N3Parser RDFLabel
forall a. Parser N3State a -> Parser N3State a -> Parser N3State a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> N3Parser RDFLabel -> N3Parser RDFLabel
forall s a. Parser s a -> Parser s a
lexeme N3Parser RDFLabel
expression
universal :: N3Parser ()
universal :: Parser N3State ()
universal =
Text -> N3Parser Text
atWord Text
"forAll" N3Parser Text -> Parser N3State () -> Parser N3State ()
forall a b.
Parser N3State a -> Parser N3State b -> Parser N3State b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
[Char] -> Parser N3State ()
forall (p :: * -> *) a. PolyParse p => [Char] -> p a
failBad [Char]
"universal (@forAll) currently unsupported."