{-# 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 pre :: Maybe Text
pre uri :: URI
uri st :: N3State
st = N3State
st { prefixUris :: NamespaceMap
prefixUris=NamespaceMap
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 :: String -> ScopedName -> N3State -> N3State
setSName nam :: String
nam snam :: ScopedName
snam st :: N3State
st = N3State
st { syntaxUris :: SpecialMap
syntaxUris=SpecialMap
s' }
where
s' :: SpecialMap
s' = String -> ScopedName -> SpecialMap -> SpecialMap
forall k a. Ord k => k -> a -> Map k a -> Map k a
M.insert String
nam ScopedName
snam (N3State -> SpecialMap
syntaxUris N3State
st)
setSUri :: String -> URI -> N3State -> N3State
setSUri :: String -> URI -> N3State -> N3State
setSUri nam :: String
nam = String -> ScopedName -> N3State -> N3State
setSName String
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 ks :: [Text]
ks st :: N3State
st = N3State
st { keywordsList :: [Text]
keywordsList = [Text]
ks, allowLocalNames :: Bool
allowLocalNames = Bool
True }
getSName :: N3State -> String -> ScopedName
getSName :: N3State -> String -> ScopedName
getSName st :: N3State
st nam :: String
nam = ScopedName -> String -> SpecialMap -> ScopedName
forall k a. Ord k => a -> k -> Map k a -> a
M.findWithDefault ScopedName
nullScopedName String
nam (SpecialMap -> ScopedName) -> SpecialMap -> ScopedName
forall a b. (a -> b) -> a -> b
$ N3State -> SpecialMap
syntaxUris N3State
st
getSUri :: N3State -> String -> URI
getSUri :: N3State -> String -> URI
getSUri st :: N3State
st nam :: String
nam = ScopedName -> URI
getScopedNameURI (ScopedName -> URI) -> ScopedName -> URI
forall a b. (a -> b) -> a -> b
$ N3State -> String -> ScopedName
getSName N3State
st String
nam
getPrefixURI :: N3State -> Maybe T.Text -> Maybe URI
getPrefixURI :: N3State -> Maybe Text -> Maybe URI
getPrefixURI st :: N3State
st pre :: 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 f :: RDFGraph -> RDFGraph
f s :: N3State
s = N3State
s { graphState :: RDFGraph
graphState = RDFGraph -> RDFGraph
f (N3State -> RDFGraph
graphState N3State
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 txt :: Text
txt mbase :: Maybe QName
mbase = N3Parser RDFGraph -> Maybe QName -> Text -> ParseResult
forall a. N3Parser a -> Maybe QName -> Text -> Either String 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
$ String -> Maybe URI
parseURIReference "#"
emptyState ::
Maybe QName
-> N3State
emptyState :: Maybe QName -> N3State
emptyState mbase :: 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 (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 = [(String, ScopedName)] -> SpecialMap
forall k a. Ord k => [(k, a)] -> Map k a
M.fromList ([(String, ScopedName)] -> SpecialMap)
-> [(String, ScopedName)] -> SpecialMap
forall a b. (a -> b) -> a -> b
$ Maybe ScopedName -> [(String, ScopedName)]
specialTable Maybe ScopedName
muri
in N3State :: RDFGraph
-> RDFLabel
-> NamespaceMap
-> SpecialMap
-> Word32
-> [Text]
-> Bool
-> N3State
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 = 0
, keywordsList :: [Text]
keywordsList = ["a", "is", "of", "true", "false"]
, allowLocalNames :: Bool
allowLocalNames = Bool
False
}
parseAnyfromText :: N3Parser a
-> Maybe QName
-> L.Text
-> Either String a
parseAnyfromText :: N3Parser a -> Maybe QName -> Text -> Either String a
parseAnyfromText parser :: N3Parser a
parser mbase :: Maybe QName
mbase = N3Parser a -> N3State -> Text -> Either String a
forall a b. Parser a b -> a -> Text -> Either String 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
$ \s :: N3State
s -> N3State
s { nodeGen :: Word32
nodeGen = Word32
n }
RDFLabel -> N3Parser RDFLabel
forall (m :: * -> *) a. Monad m => a -> m a
return (RDFLabel -> N3Parser RDFLabel) -> RDFLabel -> N3Parser RDFLabel
forall a b. (a -> b) -> a -> b
$ String -> RDFLabel
Blank (Word32 -> String
forall a. Show a => a -> String
show Word32
n)
parseTextFromText :: String -> L.Text -> Either String String
parseTextFromText :: String -> Text -> Either String String
parseTextFromText s :: String
s =
N3Parser String -> Maybe QName -> Text -> Either String String
forall a. N3Parser a -> Maybe QName -> Text -> Either String a
parseAnyfromText (String -> N3Parser String
forall s. String -> Parser s String
string String
s) Maybe QName
forall a. Maybe a
Nothing
parseAltFromText :: String -> String -> L.Text -> Either String String
parseAltFromText :: String -> String -> Text -> Either String String
parseAltFromText s1 :: String
s1 s2 :: String
s2 =
N3Parser String -> Maybe QName -> Text -> Either String String
forall a. N3Parser a -> Maybe QName -> Text -> Either String a
parseAnyfromText (String -> N3Parser String
forall s. String -> Parser s String
string String
s1 N3Parser String -> N3Parser String -> N3Parser String
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> N3Parser String
forall s. String -> Parser s String
string String
s2) Maybe QName
forall a. Maybe a
Nothing
parseNameFromText :: L.Text -> Either String String
parseNameFromText :: Text -> Either String String
parseNameFromText =
N3Parser String -> Maybe QName -> Text -> Either String String
forall a. N3Parser a -> Maybe QName -> Text -> Either String a
parseAnyfromText N3Parser String
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
$ \st :: N3State
st -> N3State
st { prefixUris :: NamespaceMap
prefixUris =
[(Maybe Text, URI)] -> NamespaceMap
forall k a. Ord k => [(k, a)] -> Map k a
M.fromList
([(Maybe Text, URI)] -> NamespaceMap)
-> [(Maybe Text, URI)] -> NamespaceMap
forall a b. (a -> b) -> a -> b
$ (Namespace -> (Maybe Text, URI))
-> [Namespace] -> [(Maybe Text, URI)]
forall a b. (a -> b) -> [a] -> [b]
map Namespace -> (Maybe Text, URI)
getNamespaceTuple [Namespace]
prefixTable
}
parseAbsURIrefFromText :: L.Text -> Either String URI
parseAbsURIrefFromText :: Text -> Either String URI
parseAbsURIrefFromText =
N3Parser URI -> Maybe QName -> Text -> Either String URI
forall a. N3Parser a -> Maybe QName -> Text -> Either String a
parseAnyfromText N3Parser URI
explicitURI Maybe QName
forall a. Maybe a
Nothing
parseLexURIrefFromText :: L.Text -> Either String URI
parseLexURIrefFromText :: Text -> Either String URI
parseLexURIrefFromText =
N3Parser URI -> Maybe QName -> Text -> Either String URI
forall a. N3Parser a -> Maybe QName -> Text -> Either String a
parseAnyfromText N3Parser URI
lexUriRef Maybe QName
forall a. Maybe a
Nothing
parseURIref2FromText :: L.Text -> Either String ScopedName
parseURIref2FromText :: Text -> Either String ScopedName
parseURIref2FromText =
N3Parser ScopedName
-> Maybe QName -> Text -> Either String ScopedName
forall a. N3Parser a -> Maybe QName -> Text -> Either String a
parseAnyfromText (Parser N3State ()
addTestPrefixes Parser N3State () -> N3Parser ScopedName -> N3Parser ScopedName
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 String -> Parser N3State ()
forall (f :: * -> *) a. Applicative f => f a -> f ()
ignore (N3Parser String -> Parser N3State ())
-> N3Parser String -> Parser N3State ()
forall a b. (a -> b) -> a -> b
$ String -> N3Parser String
forall s. String -> Parser s String
symbol ","
semiColon :: Parser N3State ()
semiColon = N3Parser String -> Parser N3State ()
forall (f :: * -> *) a. Applicative f => f a -> f ()
ignore (N3Parser String -> Parser N3State ())
-> N3Parser String -> Parser N3State ()
forall a b. (a -> b) -> a -> b
$ String -> N3Parser String
forall s. String -> Parser s String
symbol ";"
fullStop :: Parser N3State ()
fullStop = N3Parser String -> Parser N3State ()
forall (f :: * -> *) a. Applicative f => f a -> f ()
ignore (N3Parser String -> Parser N3State ())
-> N3Parser String -> Parser N3State ()
forall a b. (a -> b) -> a -> b
$ String -> N3Parser String
forall s. String -> Parser s String
symbol "."
br :: String -> String -> N3Parser a -> N3Parser a
br :: String -> String -> N3Parser a -> N3Parser a
br lsym :: String
lsym rsym :: String
rsym = N3Parser String -> N3Parser String -> N3Parser a -> N3Parser a
forall (p :: * -> *) bra ket a.
PolyParse p =>
p bra -> p ket -> p a -> p a
bracket (String -> N3Parser String
forall s. String -> Parser s String
symbol String
lsym) (String -> N3Parser String
forall s. String -> Parser s String
symbol String
rsym)
between :: 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
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 s :: 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 '@'
if Text
s Text -> [Text] -> 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 s :: 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 (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
== ':')
Text -> N3Parser Text
forall (m :: * -> *) a. Monad m => a -> m a
return Text
s
operatorLabel :: ScopedName -> N3Parser RDFLabel
operatorLabel :: ScopedName -> N3Parser RDFLabel
operatorLabel snam :: ScopedName
snam = do
N3State
st <- Parser N3State N3State
forall s. Parser s s
stGet
let (pkey :: Maybe Text
pkey, pval :: 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 val :: URI
val | URI
val URI -> URI -> Bool
forall a. Eq a => a -> a -> Bool
== URI
pval -> RDFLabel -> N3Parser RDFLabel
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
$ \s :: N3State
s -> N3State
s { prefixUris :: NamespaceMap
prefixUris = Maybe Text -> URI -> NamespaceMap -> NamespaceMap
forall k a. Ord k => k -> a -> Map k a -> Map k a
M.insert Maybe Text
pkey URI
pval NamespaceMap
opmap }
RDFLabel -> N3Parser RDFLabel
forall (m :: * -> *) a. Monad m => a -> m a
return RDFLabel
rval
_ -> 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
$ \s :: N3State
s -> N3State
s { prefixUris :: NamespaceMap
prefixUris = Maybe Text -> URI -> NamespaceMap -> NamespaceMap
forall k a. Ord k => k -> a -> Map k a -> Map k a
M.insert Maybe Text
pkey URI
pval NamespaceMap
opmap }
RDFLabel -> N3Parser RDFLabel
forall (m :: * -> *) a. Monad m => a -> m a
return RDFLabel
rval
type AddStatement = RDFLabel -> N3Parser ()
addStatement :: RDFLabel -> RDFLabel -> AddStatement
addStatement :: RDFLabel -> RDFLabel -> AddStatement
addStatement s :: RDFLabel
s p :: RDFLabel
p o :: RDFLabel
o@(TypedLit _ dtype :: ScopedName
dtype) | ScopedName
dtype ScopedName -> [ScopedName] -> 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
(ns :: Maybe Text
ns, uri :: 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
$ \st :: N3State
st -> N3State
st { prefixUris :: NamespaceMap
prefixUris = NamespaceMap
newp, graphState :: RDFGraph
graphState = Arc RDFLabel -> RDFGraph -> RDFGraph
forall lb. Label lb => Arc lb -> NSGraph lb -> NSGraph lb
addArc Arc RDFLabel
stmt RDFGraph
ogs }
addStatement s :: RDFLabel
s p :: RDFLabel
p o :: 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 o :: RDFLabel
o p :: RDFLabel
p s :: 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 c :: Char
c = Char -> Bool
isaz Char
c Bool -> Bool -> Bool
|| Char -> Bool
is09 Char
c
match :: (Ord a) => a -> [(a,a)] -> Bool
match :: a -> [(a, a)] -> Bool
match v :: a
v = ((a, a) -> Bool) -> [(a, a)] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
any (\(l :: a
l,h :: 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 c :: Char
c = let i :: Int
i = Char -> Int
ord Char
c
in Char
c Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== '_' Bool -> Bool -> Bool
||
Char -> [(Char, Char)] -> Bool
forall a. Ord a => a -> [(a, a)] -> Bool
match Char
c [('A', 'Z'), ('a', 'z')] Bool -> Bool -> Bool
||
Int -> [(Int, Int)] -> Bool
forall a. Ord a => a -> [(a, a)] -> Bool
match Int
i [(0x00c0, 0x00d6), (0x00d8, 0x00f6), (0x00f8, 0x02ff),
(0x0370, 0x037d),
(0x037f, 0x1fff), (0x200c, 0x200d),
(0x2070, 0x218f), (0x2c00, 0x2fef), (0x3001, 0xd7ff),
(0xf900, 0xfdcf), (0xfdf0, 0xfffd),
(0x00010000, 0x000effff)]
inBody :: Char -> Bool
inBody :: Char -> Bool
inBody c :: Char
c = let i :: Int
i = Char -> Int
ord Char
c
in Char
c Char -> String -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` ("-_"::String) Bool -> Bool -> Bool
|| Int
i Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== 0x007 Bool -> Bool -> Bool
||
Char -> [(Char, Char)] -> Bool
forall a. Ord a => a -> [(a, a)] -> Bool
match Char
c [('0', '9'), ('A', 'Z'), ('a', 'z')] Bool -> Bool -> Bool
||
Int -> [(Int, Int)] -> Bool
forall a. Ord a => a -> [(a, a)] -> Bool
match Int
i [(0x00c0, 0x00d6), (0x00d8, 0x00f6), (0x00f8, 0x037d),
(0x037f, 0x1fff), (0x200c, 0x200d), (0x203f, 0x2040),
(0x2070, 0x218f), (0x2c00, 0x2fef), (0x3001, 0xd7ff),
(0xf900, 0xfdcf), (0xfdf0, 0xfffd),
(0x00010000, 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 (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 String
n3NameStr = Text -> String
T.unpack (Text -> String) -> N3Parser Text -> N3Parser String
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 '?' Parser N3State Char -> N3Parser RDFLabel -> N3Parser RDFLabel
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> (String -> RDFLabel
Var (String -> RDFLabel) -> N3Parser String -> N3Parser RDFLabel
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> N3Parser String
n3NameStr)
n3string :: N3Parser T.Text
n3string :: N3Parser Text
n3string = N3Parser Text
tripleQuoted N3Parser Text -> N3Parser Text -> N3Parser Text
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 't' Parser N3State Char -> Char -> Parser N3State Char
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> '\t')
Parser N3State Char -> Parser N3State Char -> Parser N3State Char
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> (Char -> Parser N3State Char
forall s. Char -> Parser s Char
char 'n' Parser N3State Char -> Char -> Parser N3State Char
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> '\n')
Parser N3State Char -> Parser N3State Char -> Parser N3State Char
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> (Char -> Parser N3State Char
forall s. Char -> Parser s Char
char 'r' Parser N3State Char -> Char -> Parser N3State Char
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> '\r')
Parser N3State Char -> Parser N3State Char -> Parser N3State Char
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> (Char -> Parser N3State Char
forall s. Char -> Parser s Char
char '"' Parser N3State Char -> Char -> Parser N3State Char
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> '"')
Parser N3State Char -> Parser N3State Char -> Parser N3State Char
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> (Char -> Parser N3State Char
forall s. Char -> Parser s Char
char '\'' Parser N3State Char -> Char -> Parser N3State Char
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> '\'')
Parser N3State Char -> Parser N3State Char -> Parser N3State Char
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> (Char -> Parser N3State Char
forall s. Char -> Parser s Char
char '\\' Parser N3State Char -> Char -> Parser N3State Char
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> '\\')
Parser N3State Char -> Parser N3State Char -> Parser N3State Char
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> (Char -> Parser N3State Char
forall s. Char -> Parser s Char
char 'u' Parser N3State Char -> Parser N3State Char -> Parser N3State Char
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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> (Char -> Parser N3State Char
forall s. Char -> Parser s Char
char 'U' Parser N3State Char -> Parser N3State Char -> Parser N3State Char
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 '\\' Parser N3State Char -> Parser N3State Char -> Parser N3State Char
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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Char -> Parser N3State Char
forall (m :: * -> *) a. Monad m => a -> m a
return '\\'))
Parser N3State Char -> Parser N3State Char -> Parser N3State Char
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Parser N3State Char
forall s. String -> Parser s Char
noneOf "\"\n"
sQuot :: N3Parser Char
sQuot :: Parser N3State Char
sQuot = Char -> Parser N3State Char
forall s. Char -> Parser s Char
char '"'
singleQuoted :: N3Parser T.Text
singleQuoted :: N3Parser Text
singleQuoted = String -> Text
T.pack (String -> Text) -> N3Parser String -> N3Parser Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser N3State Char
-> Parser N3State Char -> N3Parser String -> N3Parser String
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 String
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 String
sep = Int -> Parser N3State Char -> N3Parser String
forall (p :: * -> *) a. PolyParse p => Int -> p a -> p [a]
exactly 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 String
-> N3Parser String
-> Parser N3State [Text]
-> Parser N3State [Text]
forall (p :: * -> *) bra ket a.
PolyParse p =>
p bra -> p ket -> p a -> p a
bracket N3Parser String
sep N3Parser String
sep (N3Parser Text -> Parser N3State [Text]
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 '"'
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 '"')
case Maybe Char
mb of
Just _ -> Text -> N3Parser Text
forall (m :: * -> *) a. Monad m => a -> m a
return "\"\""
_ -> Text -> N3Parser Text
forall (m :: * -> *) a. Monad m => a -> m a
return "\""
_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 <- String -> Parser N3State Char
forall s. String -> Parser s Char
noneOf "\"\\"
Text -> N3Parser Text
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 (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 '\\' Parser N3State Char -> Parser N3State Char -> Parser N3State Char
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 (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 't' Parser N3State Char -> Char -> Parser N3State Char
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> '\t') Parser N3State Char -> Parser N3State Char -> Parser N3State Char
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|>
(Char -> Parser N3State Char
forall s. Char -> Parser s Char
char 'b' Parser N3State Char -> Char -> Parser N3State Char
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> '\b') Parser N3State Char -> Parser N3State Char -> Parser N3State Char
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|>
(Char -> Parser N3State Char
forall s. Char -> Parser s Char
char 'n' Parser N3State Char -> Char -> Parser N3State Char
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> '\n') Parser N3State Char -> Parser N3State Char -> Parser N3State Char
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|>
(Char -> Parser N3State Char
forall s. Char -> Parser s Char
char 'r' Parser N3State Char -> Char -> Parser N3State Char
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> '\r') Parser N3State Char -> Parser N3State Char -> Parser N3State Char
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|>
(Char -> Parser N3State Char
forall s. Char -> Parser s Char
char 'f' Parser N3State Char -> Char -> Parser N3State Char
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> '\f') Parser N3State Char -> Parser N3State Char -> Parser N3State Char
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|>
(Char -> Parser N3State Char
forall s. Char -> Parser s Char
char '\\' Parser N3State Char -> Char -> Parser N3State Char
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> '\\') Parser N3State Char -> Parser N3State Char -> Parser N3State Char
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|>
(Char -> Parser N3State Char
forall s. Char -> Parser s Char
char '"' Parser N3State Char -> Char -> Parser N3State Char
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> '"') Parser N3State Char -> Parser N3State Char -> Parser N3State Char
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|>
(Char -> Parser N3State Char
forall s. Char -> Parser s Char
char '\'' Parser N3State Char -> Char -> Parser N3State Char
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> '\'')
_uchar' :: N3Parser Char
_uchar' :: Parser N3State Char
_uchar' =
(Char -> Parser N3State Char
forall s. Char -> Parser s Char
char 'u' Parser N3State Char -> Parser N3State Char -> Parser N3State Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser N3State Char -> Parser N3State Char
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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|>
(Char -> Parser N3State Char
forall s. Char -> Parser s Char
char 'U' Parser N3State Char -> Parser N3State Char -> Parser N3State Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser N3State Char -> Parser N3State Char
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
uri -> Namespace -> N3Parser Namespace
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
_ -> String -> N3Parser Namespace
forall (m :: * -> *) a. MonadFail m => String -> m a
fail "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
. String -> URI -> N3State -> N3State
setSUri "base"
addPrefix :: Maybe T.Text -> URI -> N3Parser ()
addPrefix :: Maybe Text -> URI -> Parser N3State ()
addPrefix p :: 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 (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser N3State ()
statementsOptional Parser N3State () -> Parser N3State () -> Parser N3State ()
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 (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 s :: 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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser N3State ()
existential
Parser N3State () -> Parser N3State () -> Parser N3State ()
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser N3State ()
universal
Parser N3State () -> Parser N3State () -> Parser N3State ()
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 "base" N3Parser Text -> N3Parser URI -> N3Parser URI
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> N3Parser URI
explicitURI N3Parser URI -> (URI -> Parser N3State ()) -> Parser N3State ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= URI -> Parser N3State ()
addBase,
Text -> N3Parser Text
atWord "keywords" N3Parser Text -> Parser N3State [Text] -> Parser N3State [Text]
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 (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= [Text] -> Parser N3State ()
updateKeywordsList,
Text -> N3Parser Text
atWord "prefix" N3Parser Text -> Parser N3State () -> Parser N3State ()
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 '<'
String
ustr <- Parser N3State Char -> Parser N3State Char -> N3Parser String
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 (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 (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 '>')
case String -> Maybe URI
parseURIReference String
ustr of
Nothing -> String -> N3Parser URI
forall (p :: * -> *) a. PolyParse p => String -> p a
failBad (String -> N3Parser URI) -> String -> N3Parser URI
forall a b. (a -> b) -> a -> b
$ "Invalid URI: <" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
ustr String -> String -> String
forall a. [a] -> [a] -> [a]
++ ">"
Just uref :: URI
uref -> do
N3State
s <- Parser N3State N3State
forall s. Parser s s
stGet
let base :: URI
base = N3State -> String -> URI
getSUri N3State
s "base"
(String -> N3Parser URI)
-> (URI -> N3Parser URI) -> Either String URI -> N3Parser URI
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either String -> N3Parser URI
forall (m :: * -> *) a. MonadFail m => String -> m a
fail URI -> N3Parser URI
forall (m :: * -> *) a. Monad m => a -> m a
return (Either String URI -> N3Parser URI)
-> Either String URI -> N3Parser URI
forall a b. (a -> b) -> a -> b
$ URI -> URI -> Either String 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 (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Char -> Parser N3State Char
forall s. Char -> Parser s 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 (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 ns :: Namespace
ns l :: Text
l =
case Text -> Maybe LName
newLName Text
l of
Just local :: LName
local -> Namespace -> LName -> ScopedName
makeNSScopedName Namespace
ns LName
local
_ -> String -> ScopedName
forall a. HasCallStack => String -> a
error (String -> ScopedName) -> String -> ScopedName
forall a b. (a -> b) -> a -> b
$ "Invalid local name: " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Text -> String
T.unpack Text
l
qname :: N3Parser ScopedName
qname :: N3Parser ScopedName
qname = N3Parser ScopedName
qname1 N3Parser ScopedName -> N3Parser ScopedName -> N3Parser ScopedName
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 (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 ':' Parser N3State Char
-> Parser N3State (Namespace, Text)
-> Parser N3State (Namespace, Text)
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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (N3Parser Text
n3Name N3Parser Text -> N3Parser Text -> N3Parser Text
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> N3Parser Text
forall (m :: * -> *) a. Monad m => a -> m a
return "")
qname2 :: N3Parser ScopedName
qname2 :: N3Parser ScopedName
qname2 = N3Parser Text
n3Name N3Parser Text
-> (Text -> N3Parser ScopedName) -> N3Parser ScopedName
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 name :: Text
name =
(Char -> Parser N3State Char
forall s. Char -> Parser s Char
char ':' Parser N3State Char -> N3Parser ScopedName -> N3Parser ScopedName
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 (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 name :: 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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (N3Parser Text
n3Name N3Parser Text -> N3Parser Text -> N3Parser Text
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> N3Parser Text
forall (f :: * -> *) a. Applicative f => a -> f a
pure "")
findPrefix :: T.Text -> N3Parser Namespace
findPrefix :: Text -> N3Parser Namespace
findPrefix pre :: 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
uri -> Namespace -> N3Parser Namespace
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
Nothing -> String -> N3Parser Namespace
forall (p :: * -> *) a. PolyParse p => String -> p a
failBad (String -> N3Parser Namespace) -> String -> N3Parser Namespace
forall a b. (a -> b) -> a -> b
$ "Prefix '" String -> String -> String
forall a. [a] -> [a] -> [a]
++ Text -> String
T.unpack Text
pre String -> String -> String
forall a. [a] -> [a] -> [a]
++ ":' not bound."
localQName :: T.Text -> N3Parser ScopedName
localQName :: Text -> N3Parser ScopedName
localQName name :: 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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> N3Parser Text
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 String -> N3Parser ScopedName
forall (m :: * -> *) a. MonadFail m => String -> m a
fail ("Invalid 'bare' word: " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Text -> String
T.unpack Text
name)
existential :: N3Parser ()
existential :: Parser N3State ()
existential = (Text -> N3Parser Text
atWord "forSome" N3Parser Text -> N3Parser [ScopedName] -> N3Parser [ScopedName]
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 (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 '!' 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 '^' 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 (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 (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
Nothing -> RDFLabel -> N3Parser RDFLabel
forall (m :: * -> *) a. Monad m => a -> m a
return RDFLabel
i
Just (addFunc :: RDFLabel -> RDFLabel -> AddStatement
addFunc, pt :: RDFLabel
pt) -> do
RDFLabel
bNode <- N3Parser RDFLabel
newBlankNode
RDFLabel -> RDFLabel -> AddStatement
addFunc RDFLabel
bNode RDFLabel
pt RDFLabel
i
RDFLabel -> N3Parser RDFLabel
forall (m :: * -> *) a. Monad m => a -> m a
return RDFLabel
bNode
pathItem :: N3Parser RDFLabel
pathItem :: N3Parser RDFLabel
pathItem =
String -> String -> N3Parser RDFLabel -> N3Parser RDFLabel
forall a. String -> String -> N3Parser a -> N3Parser a
br "(" ")" N3Parser RDFLabel
pathList
N3Parser RDFLabel -> N3Parser RDFLabel -> N3Parser RDFLabel
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> String -> N3Parser RDFLabel -> N3Parser RDFLabel
forall a. String -> String -> N3Parser a -> N3Parser a
br "[" "]" N3Parser RDFLabel
propertyListBNode
N3Parser RDFLabel -> N3Parser RDFLabel -> N3Parser RDFLabel
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> String -> N3Parser RDFLabel -> N3Parser RDFLabel
forall a. String -> String -> N3Parser a -> N3Parser a
br "{" "}" N3Parser RDFLabel
formulaContent
N3Parser RDFLabel -> N3Parser RDFLabel -> N3Parser RDFLabel
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> N3Parser RDFLabel
boolean
N3Parser RDFLabel -> N3Parser RDFLabel -> N3Parser RDFLabel
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> N3Parser RDFLabel
literal
N3Parser RDFLabel -> N3Parser RDFLabel -> N3Parser RDFLabel
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> N3Parser RDFLabel
numericLiteral
N3Parser RDFLabel -> N3Parser RDFLabel -> N3Parser RDFLabel
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> N3Parser RDFLabel
quickVariable
N3Parser RDFLabel -> N3Parser RDFLabel -> N3Parser RDFLabel
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> RDFLabel
Blank (String -> RDFLabel) -> N3Parser String -> N3Parser RDFLabel
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (String -> N3Parser String
forall s. String -> Parser s String
string "_:" N3Parser String -> N3Parser String -> N3Parser String
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> N3Parser String
n3NameStr)
N3Parser RDFLabel -> N3Parser RDFLabel -> N3Parser RDFLabel
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 (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 (m :: * -> *) a. Monad m => a -> m a
return RDFLabel
eNode
(c :: RDFLabel
c:cs :: [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 (m :: * -> *) a. Monad m => a -> m a
return RDFLabel
sNode
where
addElem :: RDFLabel -> RDFLabel -> N3Parser RDFLabel
addElem prevNode :: RDFLabel
prevNode curElem :: 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 (m :: * -> *) a. Monad m => a -> m a
return RDFLabel
bNode
restoreState :: N3State -> N3Parser N3State
restoreState :: N3State -> Parser N3State N3State
restoreState origState :: 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 :: Word32
nodeGen = N3State -> Word32
nodeGen N3State
oldState }
N3State -> Parser N3State N3State
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
$ \st :: N3State
st -> N3State
st { graphState :: RDFGraph
graphState = RDFGraph
emptyRDFGraph, thisNode :: RDFLabel
thisNode = RDFLabel
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 (m :: * -> *) a. Monad m => a -> m a
return RDFLabel
bNode
subgraph :: RDFLabel -> N3Parser RDFGraph
subgraph :: RDFLabel -> N3Parser RDFGraph
subgraph this :: 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
$ \st :: N3State
st -> N3State
st { graphState :: RDFGraph
graphState = RDFGraph
emptyRDFGraph, thisNode :: RDFLabel
thisNode = RDFLabel
this }
Parser N3State ()
statementsOptional
N3State
oldState <- N3State -> Parser N3State N3State
restoreState N3State
pstate
RDFGraph -> N3Parser RDFGraph
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 "false" N3Parser Text -> N3Parser Text -> N3Parser Text
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> N3Parser Text
atWord "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 (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 lcode :: LanguageTag
lcode) -> Text -> LanguageTag -> RDFLabel
LangLit Text
lit LanguageTag
lcode
Just (Right dtype :: ScopedName
dtype) -> Text -> ScopedName -> RDFLabel
TypedLit Text
lit ScopedName
dtype
_ -> 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 '@' Parser N3State Char
-> Parser N3State (Either LanguageTag ScopedName)
-> Parser N3State (Either LanguageTag ScopedName)
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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> N3Parser String
forall s. String -> Parser s String
string "^^" N3Parser String
-> Parser N3State (Either LanguageTag ScopedName)
-> Parser N3State (Either LanguageTag ScopedName)
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 '-' Parser N3State (Text -> Text)
-> Parser N3State Text -> Parser N3State Text
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 lt :: LanguageTag
lt -> LanguageTag -> Parser N3State LanguageTag
forall (m :: * -> *) a. Monad m => a -> m a
return LanguageTag
lt
_ -> String -> Parser N3State LanguageTag
forall (m :: * -> *) a. MonadFail m => String -> m a
fail ("Invalid language tag: " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Text -> String
T.unpack Text
lbl)
numericLiteral :: N3Parser RDFLabel
numericLiteral :: N3Parser RDFLabel
numericLiteral =
String -> RDFLabel
d2s (String -> RDFLabel) -> N3Parser String -> N3Parser RDFLabel
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> N3Parser String
n3double
N3Parser RDFLabel -> N3Parser RDFLabel -> N3Parser RDFLabel
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> ScopedName -> Text -> RDFLabel
makeDatatypedLiteral ScopedName
xsdDecimal (Text -> RDFLabel) -> (String -> Text) -> String -> RDFLabel
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Text
T.pack (String -> RDFLabel) -> N3Parser String -> N3Parser RDFLabel
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> N3Parser String
n3decimal
N3Parser RDFLabel -> N3Parser RDFLabel -> N3Parser RDFLabel
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> ScopedName -> Text -> RDFLabel
makeDatatypedLiteral ScopedName
xsdInteger (Text -> RDFLabel) -> (String -> Text) -> String -> RDFLabel
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Text
T.pack (String -> RDFLabel) -> N3Parser String -> N3Parser RDFLabel
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> N3Parser String
n3integer
n3sign :: N3Parser Char
n3sign :: Parser N3State Char
n3sign = Char -> Parser N3State Char
forall s. Char -> Parser s Char
char '+' Parser N3State Char -> Parser N3State Char -> Parser N3State Char
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Char -> Parser N3State Char
forall s. Char -> Parser s Char
char '-'
n3integer :: N3Parser String
n3integer :: N3Parser String
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
String
ds <- Parser N3State Char -> N3Parser String
forall (p :: * -> *) a. PolyParse p => p a -> p [a]
many1 Parser N3State Char
digit
case Maybe Char
ms of
Just s :: Char
s -> String -> N3Parser String
forall (m :: * -> *) a. Monad m => a -> m a
return (String -> N3Parser String) -> String -> N3Parser String
forall a b. (a -> b) -> a -> b
$ Char
s Char -> String -> String
forall a. a -> [a] -> [a]
: String
ds
_ -> String -> N3Parser String
forall (m :: * -> *) a. Monad m => a -> m a
return String
ds
n3decimal :: N3Parser String
n3decimal :: N3Parser String
n3decimal = String -> String -> String
forall a. [a] -> [a] -> [a]
(++) (String -> String -> String)
-> N3Parser String -> Parser N3State (String -> String)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> N3Parser String
n3integer Parser N3State (String -> String)
-> N3Parser String -> N3Parser String
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ( (:) (Char -> String -> String)
-> Parser N3State Char -> Parser N3State (String -> String)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Char -> Parser N3State Char
forall s. Char -> Parser s Char
char '.' Parser N3State (String -> String)
-> N3Parser String -> N3Parser String
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser N3State Char -> N3Parser String
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many Parser N3State Char
digit )
n3double :: N3Parser String
n3double :: N3Parser String
n3double = String -> String -> String
forall a. [a] -> [a] -> [a]
(++)
(String -> String -> String)
-> N3Parser String -> Parser N3State (String -> String)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> N3Parser String
n3decimal
Parser N3State (String -> String)
-> N3Parser String -> N3Parser String
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ( (:) (Char -> String -> String)
-> Parser N3State Char -> Parser N3State (String -> String)
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 -> String -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` ("eE"::String)) Parser N3State (String -> String)
-> N3Parser String -> N3Parser String
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> N3Parser String
n3integer )
d2s :: String -> RDFLabel
d2s :: String -> RDFLabel
d2s s :: String
s = Double -> RDFLabel
forall a. ToRDFLabel a => a -> RDFLabel
toRDFLabel (String -> Double
forall a. Read a => String -> a
read String
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 (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 ((addFunc :: RDFLabel -> t -> a -> m b
addFunc,vrb :: t
vrb),items :: 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 (m :: * -> *) a. Monad m => a -> m a
return RDFLabel
bNode
propertyListWith :: RDFLabel -> N3Parser ()
propertyListWith :: AddStatement
propertyListWith subj :: 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 (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \(addFunc :: RDFLabel -> RDFLabel -> AddStatement
addFunc, vrb :: 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 addFunc :: AddStatement
addFunc = N3Parser RDFLabel
object N3Parser RDFLabel -> AddStatement -> Parser N3State ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= AddStatement
addFunc
objectListWith :: AddStatement -> N3Parser ()
objectListWith :: AddStatement -> Parser N3State ()
objectListWith addFunc :: 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 (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 =
String -> N3Parser String
forall s. String -> Parser s String
string "<=" N3Parser String -> N3Parser RDFLabel -> N3Parser RDFLabel
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 (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 "is") (Text -> N3Parser Text
atWord "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 =
(String -> N3Parser String
forall s. String -> Parser s String
string "=>" N3Parser String -> N3Parser RDFLabel -> N3Parser RDFLabel
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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> (String -> N3Parser String
forall s. String -> Parser s String
string "=" N3Parser String -> N3Parser RDFLabel -> N3Parser RDFLabel
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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> (Text -> N3Parser Text
atWord "a" N3Parser Text -> N3Parser RDFLabel -> N3Parser RDFLabel
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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> (Text -> N3Parser Text
atWord "has" N3Parser Text -> N3Parser RDFLabel -> N3Parser RDFLabel
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 (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 "forAll" N3Parser Text -> Parser N3State () -> Parser N3State ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
String -> Parser N3State ()
forall (p :: * -> *) a. PolyParse p => String -> p a
failBad "universal (@forAll) currently unsupported."