Copyright | Travis Whitaker 2016 |
---|---|
License | MIT |
Maintainer | pi.boy.travis@gmail.com |
Stability | Provisional |
Portability | Portable |
Safe Haskell | Safe |
Language | Haskell2010 |
A parser for RDF 1.1 N-Quads.
- type Result = Either String RDFGraph
- parseNQuads :: Text -> [Result]
- parseTriple :: Parser Triple
- parseQuad :: Parser Quad
- parseQuadLine :: Parser Quad
- foldGraphs :: [Quad] -> [RDFGraph]
- foldResults :: [Either String Quad] -> [Result]
Documentation
parseNQuads :: Text -> [Result] Source #
A parser for
RDF 1.1 N-Quads. This
parser works incrementally by first lazily splitting the input into lines,
then parsing each line of the N-Quads document individually. This allows
for incremental processing in constant space, as well as extracting any
valid data from an N-Quads document that contains some invalid quads.
Text
is used because the RDF 1.1 specification stipulates that RDF
should always be encoded with Unicode.
Due to its incremental nature, this parser will accept some N-Quads
documents that are not legal according to the RDF 1.1 specification.
Specifically, this parser will provide duplicate Triple
s if they exist in
the input N-Quads document; a proper graph consists of true sets of nodes
and edges, i.e. no duplicate nodes or edges. Any downstream program
incrementally consuming this parser's output should take care to ignore any
supernumerary triples.
Likewise, if a graph's constituent triples are not contiguous in the input
N-Quads document, then they will not be folded into contiguous RDFGraph
s
in this parser's output. Any downstream program incrementally consuming
this parser's output and performing graph processing that discriminates
based on graph labels will not necessarily be presented each contiguous
labeled graph as a single RDFGraph
record. For example, something like
this could be used to lazily find all RDFGraph
records containing a named
graph's Triple
s. Downstream processing must then be able to handle a
single named graph spanning multiple RDFGraph
records.
filterGraph :: (Maybe IRI) -> [RDFGraph] -> [RDFGraph] filterGraph gl = filter (\g -> (graphLabel g) == gl)
foldGraphs :: [Quad] -> [RDFGraph] Source #