core: N-Triples reader
and just enough more supported Literals to pass the W3C RDF N-Triples test suite
This commit is contained in:
parent
499714285b
commit
31331b7388
84 changed files with 2547 additions and 4 deletions
12
lib/rdf.ex
12
lib/rdf.ex
|
@ -70,6 +70,7 @@ defmodule RDF do
|
|||
|
||||
def literal(lit = %Literal{}), do: lit
|
||||
def literal(value), do: Literal.new(value)
|
||||
def literal(value, type), do: Literal.new(value, type)
|
||||
|
||||
@doc """
|
||||
Generator function for `RDF.Triple`s.
|
||||
|
@ -96,6 +97,15 @@ defmodule RDF do
|
|||
iex> RDF.bnode(:foo)
|
||||
%RDF.BlankNode{id: :foo}
|
||||
"""
|
||||
def bnode(id), do: BlankNode.new(:foo)
|
||||
def bnode(id), do: BlankNode.new(id)
|
||||
|
||||
|
||||
################################################################################
|
||||
# temporary manual RDF vocab definitions
|
||||
# TODO: These should be defined as a vocabulary
|
||||
|
||||
def langString do
|
||||
uri("http://www.w3.org/1999/02/22-rdf-syntax-ns#langString")
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -7,6 +7,7 @@ defmodule RDF.BlankNode do
|
|||
@type t :: module
|
||||
|
||||
def new, do: %RDF.BlankNode{id: make_ref}
|
||||
def new(id) when is_atom(id), do: %RDF.BlankNode{id: id}
|
||||
def new(id) when is_atom(id) or is_binary(id) or is_integer(id),
|
||||
do: %RDF.BlankNode{id: id}
|
||||
|
||||
end
|
||||
|
|
|
@ -6,7 +6,7 @@ defmodule RDF.Literal do
|
|||
|
||||
@type t :: module
|
||||
|
||||
alias RDF.XSD
|
||||
alias RDF.{XSD, RDFS}
|
||||
|
||||
defmodule InvalidLiteralError, do: defexception [:message]
|
||||
|
||||
|
@ -35,6 +35,8 @@ defmodule RDF.Literal do
|
|||
"""
|
||||
def new(value)
|
||||
|
||||
def new(value) when is_binary(value),
|
||||
do: %RDF.Literal{value: value, datatype: XSD.string}
|
||||
def new(value) when is_boolean(value),
|
||||
do: %RDF.Literal{value: value, datatype: XSD.boolean}
|
||||
def new(value) when is_integer(value),
|
||||
|
@ -43,7 +45,6 @@ defmodule RDF.Literal do
|
|||
do: %RDF.Literal{value: value, datatype: XSD.float}
|
||||
|
||||
# def new(value) when is_atom(value), do:
|
||||
# def new(value) when is_binary(value), do:
|
||||
# def new(value) when is_bitstring(value), do:
|
||||
|
||||
# def new(value) when is_list(value), do:
|
||||
|
@ -59,4 +60,40 @@ defmodule RDF.Literal do
|
|||
raise InvalidLiteralError, "#{inspect value} not convertible to a RDF.Literal"
|
||||
end
|
||||
|
||||
def new(value, language: language) when is_binary(value) do
|
||||
%RDF.Literal{value: value, datatype: RDF.langString, language: language}
|
||||
end
|
||||
|
||||
def new(value, datatype: datatype) when is_binary(value) do
|
||||
datatype_uri = RDF.uri(datatype)
|
||||
cond do
|
||||
datatype_uri == XSD.string -> %RDF.Literal{value: value, datatype: datatype_uri}
|
||||
datatype_uri == XSD.integer -> %RDF.Literal{value: String.to_integer(value), datatype: datatype_uri}
|
||||
# TODO: datatype_uri == XSD.byte -> nil # %RDF.Literal{value: String.to_integer(value), datatype: datatype_uri}
|
||||
# TODO: datatype_uri == RDF.uri(RDFS.XMLLiteral) -> nil # %RDF.Literal{value: String.to_integer(value), datatype: datatype_uri}
|
||||
# TODO: Should we support more values, like "1" etc.?
|
||||
# TODO: Should we exclude any non-useful value?
|
||||
datatype_uri == XSD.boolean -> %RDF.Literal{value: String.downcase(value) == "true", datatype: datatype_uri}
|
||||
true -> %RDF.Literal{value: value, datatype: datatype_uri}
|
||||
end
|
||||
end
|
||||
|
||||
def new(value, datatype: datatype) when is_integer(value) do
|
||||
datatype_uri = RDF.uri(datatype)
|
||||
cond do
|
||||
datatype_uri == XSD.string -> %RDF.Literal{value: to_string(value), datatype: datatype_uri}
|
||||
datatype_uri == XSD.integer -> %RDF.Literal{value: value, datatype: datatype_uri}
|
||||
end
|
||||
end
|
||||
|
||||
def new(value, datatype: datatype) when is_boolean(value) do
|
||||
datatype_uri = RDF.uri(datatype)
|
||||
cond do
|
||||
datatype_uri == XSD.boolean -> %RDF.Literal{value: value, datatype: datatype_uri}
|
||||
# TODO: Should we exclude any non-useful value?
|
||||
datatype_uri == XSD.string -> %RDF.Literal{value: to_string(value), datatype: datatype_uri}
|
||||
datatype_uri == XSD.integer -> %RDF.Literal{value: (if value, do: 1, else: 0), datatype: datatype_uri}
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
|
43
lib/rdf/ntriples/reader.ex
Normal file
43
lib/rdf/ntriples/reader.ex
Normal file
|
@ -0,0 +1,43 @@
|
|||
defmodule RDF.NTriples.Reader do
|
||||
@moduledoc """
|
||||
`RDF::NTriples` provides support for reading the N-Triples serialization
|
||||
format.
|
||||
|
||||
N-Triples is a line-based plain-text format for encoding an RDF graph.
|
||||
It is a very restricted, explicit and well-defined subset of both
|
||||
[Turtle](http://www.w3.org/TeamSubmission/turtle/) and
|
||||
[Notation3](http://www.w3.org/TeamSubmission/n3/) (N3).
|
||||
|
||||
The MIME content type for N-Triples files is `text/plain` and the
|
||||
recommended file extension is `.nt`.
|
||||
|
||||
An example of an RDF statement in N-Triples format:
|
||||
|
||||
<https://hex.pm/> <http://purl.org/dc/terms/title> "Hex" .
|
||||
"""
|
||||
|
||||
use RDF.Reader
|
||||
|
||||
def read_string(content, opts \\ []) do
|
||||
with {:ok, tokens, _} <- tokenize(content),
|
||||
{:ok, ast} <- parse(tokens) do
|
||||
{:ok, build_graph(ast)}
|
||||
else
|
||||
{:error, {error_line, :ntriples_lexer, error_descriptor}, _error_line_again} ->
|
||||
{:error, "N-Triple scanner error on line #{error_line}: #{inspect error_descriptor}"}
|
||||
{:error, {error_line, :ntriples_parser, error_descriptor}} ->
|
||||
{:error, "N-Triple parser error on line #{error_line}: #{inspect error_descriptor}"}
|
||||
end
|
||||
end
|
||||
|
||||
defp tokenize(content), do: content |> to_charlist |> :ntriples_lexer.string
|
||||
|
||||
defp parse(tokens), do: tokens |> :ntriples_parser.parse
|
||||
|
||||
defp build_graph(ast) do
|
||||
Enum.reduce ast, RDF.Graph.new, fn(triple, graph) ->
|
||||
RDF.Graph.add(graph, triple)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
53
lib/rdf/reader.ex
Normal file
53
lib/rdf/reader.ex
Normal file
|
@ -0,0 +1,53 @@
|
|||
defmodule RDF.Reader do
|
||||
@moduledoc false
|
||||
|
||||
@callback read_file(String.t, keyword) :: keyword(RDF.Graph)
|
||||
@callback read_file!(String.t, keyword) :: RDF.Graph
|
||||
@callback read_string(String.t, keyword) :: keyword(RDF.Graph)
|
||||
@callback read_string!(String.t, keyword) :: RDF.Graph
|
||||
|
||||
defmacro __using__(_) do
|
||||
quote bind_quoted: [], unquote: true do
|
||||
@behaviour unquote(__MODULE__)
|
||||
|
||||
def read(file_or_content, opts \\ []) do
|
||||
if File.exists?(file_or_content) do
|
||||
read_file(file_or_content, opts)
|
||||
else
|
||||
read_string(file_or_content, opts)
|
||||
end
|
||||
end
|
||||
|
||||
def read!(file_or_content, opts \\ []) do
|
||||
case read(file_or_content, opts) do
|
||||
{:ok, graph} -> graph
|
||||
{:error, reason} -> raise reason
|
||||
end
|
||||
end
|
||||
|
||||
def read_file(file, opts \\ []) do
|
||||
case File.read(file) do
|
||||
{:ok, content} -> read_string(content, opts)
|
||||
{:error, reason} -> {:error, reason}
|
||||
end
|
||||
end
|
||||
|
||||
def read_file!(file, opts \\ []) do
|
||||
case read_file(file, opts) do
|
||||
{:ok, graph} -> graph
|
||||
{:error, reason} -> raise reason
|
||||
end
|
||||
end
|
||||
|
||||
def read_string!(content, opts \\ []) do
|
||||
case read_string(content, opts) do
|
||||
{:ok, graph} -> graph
|
||||
{:error, reason} -> raise reason
|
||||
end
|
||||
end
|
||||
|
||||
defoverridable [read: 2, read!: 2, read_file: 2, read_file!: 2, read_string!: 2]
|
||||
end
|
||||
end
|
||||
|
||||
end
|
25
lib/rdf/reader_parse_helper.ex
Normal file
25
lib/rdf/reader_parse_helper.ex
Normal file
|
@ -0,0 +1,25 @@
|
|||
defmodule RDF.Reader.ParseHelper do
|
||||
@moduledoc false
|
||||
|
||||
def to_uri({:iriref, line, value}) do
|
||||
case URI.parse(value) do
|
||||
%URI{scheme: nil} -> {:error, line, "#{value} is not a valid URI"}
|
||||
%URI{path: nil} -> {:error, line, "#{value} is not a valid URI"}
|
||||
parsed_uri -> {:ok, parsed_uri}
|
||||
end
|
||||
end
|
||||
|
||||
def to_bnode({:blank_node_label, _line, value}), do: RDF.bnode(value)
|
||||
|
||||
def to_literal({:string_literal_quote, _line, value}),
|
||||
do: RDF.literal(value)
|
||||
def to_literal({:string_literal_quote, _line, value}, type),
|
||||
do: RDF.literal(value, [type])
|
||||
|
||||
def to_langtag({:langtag, _line, value}), do: value
|
||||
|
||||
def bnode_str('_:' ++ value), do: List.to_string(value)
|
||||
def langtag_str('@' ++ value), do: List.to_string(value)
|
||||
def quoted_content_str(value), do: value |> List.to_string |> String.slice(1..-2)
|
||||
|
||||
end
|
796
src/ntriples_lexer.erl
Normal file
796
src/ntriples_lexer.erl
Normal file
|
@ -0,0 +1,796 @@
|
|||
-file("/usr/local/Cellar/erlang/19.1/lib/erlang/lib/parsetools-2.1.3/include/leexinc.hrl", 0).
|
||||
%% The source of this file is part of leex distribution, as such it
|
||||
%% has the same Copyright as the other files in the leex
|
||||
%% distribution. The Copyright is defined in the accompanying file
|
||||
%% COPYRIGHT. However, the resultant scanner generated by leex is the
|
||||
%% property of the creator of the scanner and is not covered by that
|
||||
%% Copyright.
|
||||
|
||||
-module(ntriples_lexer).
|
||||
|
||||
-export([string/1,string/2,token/2,token/3,tokens/2,tokens/3]).
|
||||
-export([format_error/1]).
|
||||
|
||||
%% User code. This is placed here to allow extra attributes.
|
||||
-file("src/ntriples_lexer.xrl", 31).
|
||||
|
||||
quoted_content_str(TokenChars) -> 'Elixir.RDF.Reader.ParseHelper':quoted_content_str(TokenChars).
|
||||
bnode_str(TokenChars) -> 'Elixir.RDF.Reader.ParseHelper':bnode_str(TokenChars).
|
||||
langtag_str(TokenChars) -> 'Elixir.RDF.Reader.ParseHelper':langtag_str(TokenChars).
|
||||
|
||||
-file("/usr/local/Cellar/erlang/19.1/lib/erlang/lib/parsetools-2.1.3/include/leexinc.hrl", 14).
|
||||
|
||||
format_error({illegal,S}) -> ["illegal characters ",io_lib:write_string(S)];
|
||||
format_error({user,S}) -> S.
|
||||
|
||||
string(String) -> string(String, 1).
|
||||
|
||||
string(String, Line) -> string(String, Line, String, []).
|
||||
|
||||
%% string(InChars, Line, TokenChars, Tokens) ->
|
||||
%% {ok,Tokens,Line} | {error,ErrorInfo,Line}.
|
||||
%% Note the line number going into yystate, L0, is line of token
|
||||
%% start while line number returned is line of token end. We want line
|
||||
%% of token start.
|
||||
|
||||
string([], L, [], Ts) -> % No partial tokens!
|
||||
{ok,yyrev(Ts),L};
|
||||
string(Ics0, L0, Tcs, Ts) ->
|
||||
case yystate(yystate(), Ics0, L0, 0, reject, 0) of
|
||||
{A,Alen,Ics1,L1} -> % Accepting end state
|
||||
string_cont(Ics1, L1, yyaction(A, Alen, Tcs, L0), Ts);
|
||||
{A,Alen,Ics1,L1,_S1} -> % Accepting transistion state
|
||||
string_cont(Ics1, L1, yyaction(A, Alen, Tcs, L0), Ts);
|
||||
{reject,_Alen,Tlen,_Ics1,L1,_S1} -> % After a non-accepting state
|
||||
{error,{L0,?MODULE,{illegal,yypre(Tcs, Tlen+1)}},L1};
|
||||
{A,Alen,_Tlen,_Ics1,_L1,_S1} ->
|
||||
string_cont(yysuf(Tcs, Alen), L0, yyaction(A, Alen, Tcs, L0), Ts)
|
||||
end.
|
||||
|
||||
%% string_cont(RestChars, Line, Token, Tokens)
|
||||
%% Test for and remove the end token wrapper. Push back characters
|
||||
%% are prepended to RestChars.
|
||||
|
||||
-dialyzer({nowarn_function, string_cont/4}).
|
||||
|
||||
string_cont(Rest, Line, {token,T}, Ts) ->
|
||||
string(Rest, Line, Rest, [T|Ts]);
|
||||
string_cont(Rest, Line, {token,T,Push}, Ts) ->
|
||||
NewRest = Push ++ Rest,
|
||||
string(NewRest, Line, NewRest, [T|Ts]);
|
||||
string_cont(Rest, Line, {end_token,T}, Ts) ->
|
||||
string(Rest, Line, Rest, [T|Ts]);
|
||||
string_cont(Rest, Line, {end_token,T,Push}, Ts) ->
|
||||
NewRest = Push ++ Rest,
|
||||
string(NewRest, Line, NewRest, [T|Ts]);
|
||||
string_cont(Rest, Line, skip_token, Ts) ->
|
||||
string(Rest, Line, Rest, Ts);
|
||||
string_cont(Rest, Line, {skip_token,Push}, Ts) ->
|
||||
NewRest = Push ++ Rest,
|
||||
string(NewRest, Line, NewRest, Ts);
|
||||
string_cont(_Rest, Line, {error,S}, _Ts) ->
|
||||
{error,{Line,?MODULE,{user,S}},Line}.
|
||||
|
||||
%% token(Continuation, Chars) ->
|
||||
%% token(Continuation, Chars, Line) ->
|
||||
%% {more,Continuation} | {done,ReturnVal,RestChars}.
|
||||
%% Must be careful when re-entering to append the latest characters to the
|
||||
%% after characters in an accept. The continuation is:
|
||||
%% {token,State,CurrLine,TokenChars,TokenLen,TokenLine,AccAction,AccLen}
|
||||
|
||||
token(Cont, Chars) -> token(Cont, Chars, 1).
|
||||
|
||||
token([], Chars, Line) ->
|
||||
token(yystate(), Chars, Line, Chars, 0, Line, reject, 0);
|
||||
token({token,State,Line,Tcs,Tlen,Tline,Action,Alen}, Chars, _) ->
|
||||
token(State, Chars, Line, Tcs ++ Chars, Tlen, Tline, Action, Alen).
|
||||
|
||||
%% token(State, InChars, Line, TokenChars, TokenLen, TokenLine,
|
||||
%% AcceptAction, AcceptLen) ->
|
||||
%% {more,Continuation} | {done,ReturnVal,RestChars}.
|
||||
%% The argument order is chosen to be more efficient.
|
||||
|
||||
token(S0, Ics0, L0, Tcs, Tlen0, Tline, A0, Alen0) ->
|
||||
case yystate(S0, Ics0, L0, Tlen0, A0, Alen0) of
|
||||
%% Accepting end state, we have a token.
|
||||
{A1,Alen1,Ics1,L1} ->
|
||||
token_cont(Ics1, L1, yyaction(A1, Alen1, Tcs, Tline));
|
||||
%% Accepting transition state, can take more chars.
|
||||
{A1,Alen1,[],L1,S1} -> % Need more chars to check
|
||||
{more,{token,S1,L1,Tcs,Alen1,Tline,A1,Alen1}};
|
||||
{A1,Alen1,Ics1,L1,_S1} -> % Take what we got
|
||||
token_cont(Ics1, L1, yyaction(A1, Alen1, Tcs, Tline));
|
||||
%% After a non-accepting state, maybe reach accept state later.
|
||||
{A1,Alen1,Tlen1,[],L1,S1} -> % Need more chars to check
|
||||
{more,{token,S1,L1,Tcs,Tlen1,Tline,A1,Alen1}};
|
||||
{reject,_Alen1,Tlen1,eof,L1,_S1} -> % No token match
|
||||
%% Check for partial token which is error.
|
||||
Ret = if Tlen1 > 0 -> {error,{Tline,?MODULE,
|
||||
%% Skip eof tail in Tcs.
|
||||
{illegal,yypre(Tcs, Tlen1)}},L1};
|
||||
true -> {eof,L1}
|
||||
end,
|
||||
{done,Ret,eof};
|
||||
{reject,_Alen1,Tlen1,Ics1,L1,_S1} -> % No token match
|
||||
Error = {Tline,?MODULE,{illegal,yypre(Tcs, Tlen1+1)}},
|
||||
{done,{error,Error,L1},Ics1};
|
||||
{A1,Alen1,_Tlen1,_Ics1,_L1,_S1} -> % Use last accept match
|
||||
token_cont(yysuf(Tcs, Alen1), L0, yyaction(A1, Alen1, Tcs, Tline))
|
||||
end.
|
||||
|
||||
%% token_cont(RestChars, Line, Token)
|
||||
%% If we have a token or error then return done, else if we have a
|
||||
%% skip_token then continue.
|
||||
|
||||
-dialyzer({nowarn_function, token_cont/3}).
|
||||
|
||||
token_cont(Rest, Line, {token,T}) ->
|
||||
{done,{ok,T,Line},Rest};
|
||||
token_cont(Rest, Line, {token,T,Push}) ->
|
||||
NewRest = Push ++ Rest,
|
||||
{done,{ok,T,Line},NewRest};
|
||||
token_cont(Rest, Line, {end_token,T}) ->
|
||||
{done,{ok,T,Line},Rest};
|
||||
token_cont(Rest, Line, {end_token,T,Push}) ->
|
||||
NewRest = Push ++ Rest,
|
||||
{done,{ok,T,Line},NewRest};
|
||||
token_cont(Rest, Line, skip_token) ->
|
||||
token(yystate(), Rest, Line, Rest, 0, Line, reject, 0);
|
||||
token_cont(Rest, Line, {skip_token,Push}) ->
|
||||
NewRest = Push ++ Rest,
|
||||
token(yystate(), NewRest, Line, NewRest, 0, Line, reject, 0);
|
||||
token_cont(Rest, Line, {error,S}) ->
|
||||
{done,{error,{Line,?MODULE,{user,S}},Line},Rest}.
|
||||
|
||||
%% tokens(Continuation, Chars, Line) ->
|
||||
%% {more,Continuation} | {done,ReturnVal,RestChars}.
|
||||
%% Must be careful when re-entering to append the latest characters to the
|
||||
%% after characters in an accept. The continuation is:
|
||||
%% {tokens,State,CurrLine,TokenChars,TokenLen,TokenLine,Tokens,AccAction,AccLen}
|
||||
%% {skip_tokens,State,CurrLine,TokenChars,TokenLen,TokenLine,Error,AccAction,AccLen}
|
||||
|
||||
tokens(Cont, Chars) -> tokens(Cont, Chars, 1).
|
||||
|
||||
tokens([], Chars, Line) ->
|
||||
tokens(yystate(), Chars, Line, Chars, 0, Line, [], reject, 0);
|
||||
tokens({tokens,State,Line,Tcs,Tlen,Tline,Ts,Action,Alen}, Chars, _) ->
|
||||
tokens(State, Chars, Line, Tcs ++ Chars, Tlen, Tline, Ts, Action, Alen);
|
||||
tokens({skip_tokens,State,Line,Tcs,Tlen,Tline,Error,Action,Alen}, Chars, _) ->
|
||||
skip_tokens(State, Chars, Line, Tcs ++ Chars, Tlen, Tline, Error, Action, Alen).
|
||||
|
||||
%% tokens(State, InChars, Line, TokenChars, TokenLen, TokenLine, Tokens,
|
||||
%% AcceptAction, AcceptLen) ->
|
||||
%% {more,Continuation} | {done,ReturnVal,RestChars}.
|
||||
|
||||
tokens(S0, Ics0, L0, Tcs, Tlen0, Tline, Ts, A0, Alen0) ->
|
||||
case yystate(S0, Ics0, L0, Tlen0, A0, Alen0) of
|
||||
%% Accepting end state, we have a token.
|
||||
{A1,Alen1,Ics1,L1} ->
|
||||
tokens_cont(Ics1, L1, yyaction(A1, Alen1, Tcs, Tline), Ts);
|
||||
%% Accepting transition state, can take more chars.
|
||||
{A1,Alen1,[],L1,S1} -> % Need more chars to check
|
||||
{more,{tokens,S1,L1,Tcs,Alen1,Tline,Ts,A1,Alen1}};
|
||||
{A1,Alen1,Ics1,L1,_S1} -> % Take what we got
|
||||
tokens_cont(Ics1, L1, yyaction(A1, Alen1, Tcs, Tline), Ts);
|
||||
%% After a non-accepting state, maybe reach accept state later.
|
||||
{A1,Alen1,Tlen1,[],L1,S1} -> % Need more chars to check
|
||||
{more,{tokens,S1,L1,Tcs,Tlen1,Tline,Ts,A1,Alen1}};
|
||||
{reject,_Alen1,Tlen1,eof,L1,_S1} -> % No token match
|
||||
%% Check for partial token which is error, no need to skip here.
|
||||
Ret = if Tlen1 > 0 -> {error,{Tline,?MODULE,
|
||||
%% Skip eof tail in Tcs.
|
||||
{illegal,yypre(Tcs, Tlen1)}},L1};
|
||||
Ts == [] -> {eof,L1};
|
||||
true -> {ok,yyrev(Ts),L1}
|
||||
end,
|
||||
{done,Ret,eof};
|
||||
{reject,_Alen1,Tlen1,_Ics1,L1,_S1} ->
|
||||
%% Skip rest of tokens.
|
||||
Error = {L1,?MODULE,{illegal,yypre(Tcs, Tlen1+1)}},
|
||||
skip_tokens(yysuf(Tcs, Tlen1+1), L1, Error);
|
||||
{A1,Alen1,_Tlen1,_Ics1,_L1,_S1} ->
|
||||
Token = yyaction(A1, Alen1, Tcs, Tline),
|
||||
tokens_cont(yysuf(Tcs, Alen1), L0, Token, Ts)
|
||||
end.
|
||||
|
||||
%% tokens_cont(RestChars, Line, Token, Tokens)
|
||||
%% If we have an end_token or error then return done, else if we have
|
||||
%% a token then save it and continue, else if we have a skip_token
|
||||
%% just continue.
|
||||
|
||||
-dialyzer({nowarn_function, tokens_cont/4}).
|
||||
|
||||
tokens_cont(Rest, Line, {token,T}, Ts) ->
|
||||
tokens(yystate(), Rest, Line, Rest, 0, Line, [T|Ts], reject, 0);
|
||||
tokens_cont(Rest, Line, {token,T,Push}, Ts) ->
|
||||
NewRest = Push ++ Rest,
|
||||
tokens(yystate(), NewRest, Line, NewRest, 0, Line, [T|Ts], reject, 0);
|
||||
tokens_cont(Rest, Line, {end_token,T}, Ts) ->
|
||||
{done,{ok,yyrev(Ts, [T]),Line},Rest};
|
||||
tokens_cont(Rest, Line, {end_token,T,Push}, Ts) ->
|
||||
NewRest = Push ++ Rest,
|
||||
{done,{ok,yyrev(Ts, [T]),Line},NewRest};
|
||||
tokens_cont(Rest, Line, skip_token, Ts) ->
|
||||
tokens(yystate(), Rest, Line, Rest, 0, Line, Ts, reject, 0);
|
||||
tokens_cont(Rest, Line, {skip_token,Push}, Ts) ->
|
||||
NewRest = Push ++ Rest,
|
||||
tokens(yystate(), NewRest, Line, NewRest, 0, Line, Ts, reject, 0);
|
||||
tokens_cont(Rest, Line, {error,S}, _Ts) ->
|
||||
skip_tokens(Rest, Line, {Line,?MODULE,{user,S}}).
|
||||
|
||||
%%skip_tokens(InChars, Line, Error) -> {done,{error,Error,Line},Ics}.
|
||||
%% Skip tokens until an end token, junk everything and return the error.
|
||||
|
||||
skip_tokens(Ics, Line, Error) ->
|
||||
skip_tokens(yystate(), Ics, Line, Ics, 0, Line, Error, reject, 0).
|
||||
|
||||
%% skip_tokens(State, InChars, Line, TokenChars, TokenLen, TokenLine, Tokens,
|
||||
%% AcceptAction, AcceptLen) ->
|
||||
%% {more,Continuation} | {done,ReturnVal,RestChars}.
|
||||
|
||||
skip_tokens(S0, Ics0, L0, Tcs, Tlen0, Tline, Error, A0, Alen0) ->
|
||||
case yystate(S0, Ics0, L0, Tlen0, A0, Alen0) of
|
||||
{A1,Alen1,Ics1,L1} -> % Accepting end state
|
||||
skip_cont(Ics1, L1, yyaction(A1, Alen1, Tcs, Tline), Error);
|
||||
{A1,Alen1,[],L1,S1} -> % After an accepting state
|
||||
{more,{skip_tokens,S1,L1,Tcs,Alen1,Tline,Error,A1,Alen1}};
|
||||
{A1,Alen1,Ics1,L1,_S1} ->
|
||||
skip_cont(Ics1, L1, yyaction(A1, Alen1, Tcs, Tline), Error);
|
||||
{A1,Alen1,Tlen1,[],L1,S1} -> % After a non-accepting state
|
||||
{more,{skip_tokens,S1,L1,Tcs,Tlen1,Tline,Error,A1,Alen1}};
|
||||
{reject,_Alen1,_Tlen1,eof,L1,_S1} ->
|
||||
{done,{error,Error,L1},eof};
|
||||
{reject,_Alen1,Tlen1,_Ics1,L1,_S1} ->
|
||||
skip_tokens(yysuf(Tcs, Tlen1+1), L1, Error);
|
||||
{A1,Alen1,_Tlen1,_Ics1,L1,_S1} ->
|
||||
Token = yyaction(A1, Alen1, Tcs, Tline),
|
||||
skip_cont(yysuf(Tcs, Alen1), L1, Token, Error)
|
||||
end.
|
||||
|
||||
%% skip_cont(RestChars, Line, Token, Error)
|
||||
%% Skip tokens until we have an end_token or error then return done
|
||||
%% with the original rror.
|
||||
|
||||
-dialyzer({nowarn_function, skip_cont/4}).
|
||||
|
||||
skip_cont(Rest, Line, {token,_T}, Error) ->
|
||||
skip_tokens(yystate(), Rest, Line, Rest, 0, Line, Error, reject, 0);
|
||||
skip_cont(Rest, Line, {token,_T,Push}, Error) ->
|
||||
NewRest = Push ++ Rest,
|
||||
skip_tokens(yystate(), NewRest, Line, NewRest, 0, Line, Error, reject, 0);
|
||||
skip_cont(Rest, Line, {end_token,_T}, Error) ->
|
||||
{done,{error,Error,Line},Rest};
|
||||
skip_cont(Rest, Line, {end_token,_T,Push}, Error) ->
|
||||
NewRest = Push ++ Rest,
|
||||
{done,{error,Error,Line},NewRest};
|
||||
skip_cont(Rest, Line, skip_token, Error) ->
|
||||
skip_tokens(yystate(), Rest, Line, Rest, 0, Line, Error, reject, 0);
|
||||
skip_cont(Rest, Line, {skip_token,Push}, Error) ->
|
||||
NewRest = Push ++ Rest,
|
||||
skip_tokens(yystate(), NewRest, Line, NewRest, 0, Line, Error, reject, 0);
|
||||
skip_cont(Rest, Line, {error,_S}, Error) ->
|
||||
skip_tokens(yystate(), Rest, Line, Rest, 0, Line, Error, reject, 0).
|
||||
|
||||
yyrev(List) -> lists:reverse(List).
|
||||
yyrev(List, Tail) -> lists:reverse(List, Tail).
|
||||
yypre(List, N) -> lists:sublist(List, N).
|
||||
yysuf(List, N) -> lists:nthtail(N, List).
|
||||
|
||||
%% yystate() -> InitialState.
|
||||
%% yystate(State, InChars, Line, CurrTokLen, AcceptAction, AcceptLen) ->
|
||||
%% {Action, AcceptLen, RestChars, Line} |
|
||||
%% {Action, AcceptLen, RestChars, Line, State} |
|
||||
%% {reject, AcceptLen, CurrTokLen, RestChars, Line, State} |
|
||||
%% {Action, AcceptLen, CurrTokLen, RestChars, Line, State}.
|
||||
%% Generated state transition functions. The non-accepting end state
|
||||
%% return signal either an unrecognised character or end of current
|
||||
%% input.
|
||||
|
||||
-file("src/ntriples_lexer.erl", 288).
|
||||
yystate() -> 26.
|
||||
|
||||
yystate(36, [8255|Ics], Line, Tlen, _, _) ->
|
||||
yystate(36, Ics, Line, Tlen+1, 3, Tlen);
|
||||
yystate(36, [8256|Ics], Line, Tlen, _, _) ->
|
||||
yystate(36, Ics, Line, Tlen+1, 3, Tlen);
|
||||
yystate(36, [8204|Ics], Line, Tlen, _, _) ->
|
||||
yystate(36, Ics, Line, Tlen+1, 3, Tlen);
|
||||
yystate(36, [8205|Ics], Line, Tlen, _, _) ->
|
||||
yystate(36, Ics, Line, Tlen+1, 3, Tlen);
|
||||
yystate(36, [183|Ics], Line, Tlen, _, _) ->
|
||||
yystate(36, Ics, Line, Tlen+1, 3, Tlen);
|
||||
yystate(36, [95|Ics], Line, Tlen, _, _) ->
|
||||
yystate(36, Ics, Line, Tlen+1, 3, Tlen);
|
||||
yystate(36, [58|Ics], Line, Tlen, _, _) ->
|
||||
yystate(36, Ics, Line, Tlen+1, 3, Tlen);
|
||||
yystate(36, [46|Ics], Line, Tlen, _, _) ->
|
||||
yystate(25, Ics, Line, Tlen+1, 3, Tlen);
|
||||
yystate(36, [45|Ics], Line, Tlen, _, _) ->
|
||||
yystate(36, Ics, Line, Tlen+1, 3, Tlen);
|
||||
yystate(36, [C|Ics], Line, Tlen, _, _) when C >= 48, C =< 57 ->
|
||||
yystate(36, Ics, Line, Tlen+1, 3, Tlen);
|
||||
yystate(36, [C|Ics], Line, Tlen, _, _) when C >= 65, C =< 90 ->
|
||||
yystate(36, Ics, Line, Tlen+1, 3, Tlen);
|
||||
yystate(36, [C|Ics], Line, Tlen, _, _) when C >= 97, C =< 122 ->
|
||||
yystate(36, Ics, Line, Tlen+1, 3, Tlen);
|
||||
yystate(36, [C|Ics], Line, Tlen, _, _) when C >= 192, C =< 214 ->
|
||||
yystate(36, Ics, Line, Tlen+1, 3, Tlen);
|
||||
yystate(36, [C|Ics], Line, Tlen, _, _) when C >= 216, C =< 246 ->
|
||||
yystate(36, Ics, Line, Tlen+1, 3, Tlen);
|
||||
yystate(36, [C|Ics], Line, Tlen, _, _) when C >= 248, C =< 767 ->
|
||||
yystate(36, Ics, Line, Tlen+1, 3, Tlen);
|
||||
yystate(36, [C|Ics], Line, Tlen, _, _) when C >= 768, C =< 879 ->
|
||||
yystate(36, Ics, Line, Tlen+1, 3, Tlen);
|
||||
yystate(36, [C|Ics], Line, Tlen, _, _) when C >= 880, C =< 893 ->
|
||||
yystate(36, Ics, Line, Tlen+1, 3, Tlen);
|
||||
yystate(36, [C|Ics], Line, Tlen, _, _) when C >= 895, C =< 8191 ->
|
||||
yystate(36, Ics, Line, Tlen+1, 3, Tlen);
|
||||
yystate(36, [C|Ics], Line, Tlen, _, _) when C >= 8304, C =< 8591 ->
|
||||
yystate(36, Ics, Line, Tlen+1, 3, Tlen);
|
||||
yystate(36, [C|Ics], Line, Tlen, _, _) when C >= 11264, C =< 12271 ->
|
||||
yystate(36, Ics, Line, Tlen+1, 3, Tlen);
|
||||
yystate(36, [C|Ics], Line, Tlen, _, _) when C >= 12289, C =< 55295 ->
|
||||
yystate(36, Ics, Line, Tlen+1, 3, Tlen);
|
||||
yystate(36, [C|Ics], Line, Tlen, _, _) when C >= 63744, C =< 64975 ->
|
||||
yystate(36, Ics, Line, Tlen+1, 3, Tlen);
|
||||
yystate(36, [C|Ics], Line, Tlen, _, _) when C >= 65008, C =< 65533 ->
|
||||
yystate(36, Ics, Line, Tlen+1, 3, Tlen);
|
||||
yystate(36, [C|Ics], Line, Tlen, _, _) when C >= 65536, C =< 983039 ->
|
||||
yystate(36, Ics, Line, Tlen+1, 3, Tlen);
|
||||
yystate(36, Ics, Line, Tlen, _, _) ->
|
||||
{3,Tlen,Ics,Line,36};
|
||||
yystate(35, [C|Ics], Line, Tlen, Action, Alen) when C >= 65, C =< 90 ->
|
||||
yystate(0, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(35, [C|Ics], Line, Tlen, Action, Alen) when C >= 97, C =< 122 ->
|
||||
yystate(0, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(35, Ics, Line, Tlen, Action, Alen) ->
|
||||
{Action,Alen,Tlen,Ics,Line,35};
|
||||
yystate(34, [C|Ics], Line, Tlen, Action, Alen) when C >= 48, C =< 57 ->
|
||||
yystate(28, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(34, [C|Ics], Line, Tlen, Action, Alen) when C >= 65, C =< 70 ->
|
||||
yystate(28, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(34, [C|Ics], Line, Tlen, Action, Alen) when C >= 97, C =< 102 ->
|
||||
yystate(28, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(34, Ics, Line, Tlen, Action, Alen) ->
|
||||
{Action,Alen,Tlen,Ics,Line,34};
|
||||
yystate(33, [11|Ics], Line, Tlen, _, _) ->
|
||||
yystate(33, Ics, Line, Tlen+1, 8, Tlen);
|
||||
yystate(33, [12|Ics], Line, Tlen, _, _) ->
|
||||
yystate(33, Ics, Line, Tlen+1, 8, Tlen);
|
||||
yystate(33, [C|Ics], Line, Tlen, _, _) when C >= 0, C =< 9 ->
|
||||
yystate(33, Ics, Line, Tlen+1, 8, Tlen);
|
||||
yystate(33, [C|Ics], Line, Tlen, _, _) when C >= 14 ->
|
||||
yystate(33, Ics, Line, Tlen+1, 8, Tlen);
|
||||
yystate(33, Ics, Line, Tlen, _, _) ->
|
||||
{8,Tlen,Ics,Line,33};
|
||||
yystate(32, [C|Ics], Line, Tlen, Action, Alen) when C >= 48, C =< 57 ->
|
||||
yystate(10, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(32, [C|Ics], Line, Tlen, Action, Alen) when C >= 65, C =< 70 ->
|
||||
yystate(10, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(32, [C|Ics], Line, Tlen, Action, Alen) when C >= 97, C =< 102 ->
|
||||
yystate(10, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(32, Ics, Line, Tlen, Action, Alen) ->
|
||||
{Action,Alen,Tlen,Ics,Line,32};
|
||||
yystate(31, [92|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(1, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(31, [34|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(8, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(31, [11|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(31, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(31, [12|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(31, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(31, [C|Ics], Line, Tlen, Action, Alen) when C >= 0, C =< 9 ->
|
||||
yystate(31, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(31, [C|Ics], Line, Tlen, Action, Alen) when C >= 14, C =< 33 ->
|
||||
yystate(31, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(31, [C|Ics], Line, Tlen, Action, Alen) when C >= 35, C =< 91 ->
|
||||
yystate(31, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(31, [C|Ics], Line, Tlen, Action, Alen) when C >= 93 ->
|
||||
yystate(31, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(31, Ics, Line, Tlen, Action, Alen) ->
|
||||
{Action,Alen,Tlen,Ics,Line,31};
|
||||
yystate(30, [C|Ics], Line, Tlen, Action, Alen) when C >= 48, C =< 57 ->
|
||||
yystate(3, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(30, [C|Ics], Line, Tlen, Action, Alen) when C >= 65, C =< 70 ->
|
||||
yystate(3, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(30, [C|Ics], Line, Tlen, Action, Alen) when C >= 97, C =< 102 ->
|
||||
yystate(3, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(30, Ics, Line, Tlen, Action, Alen) ->
|
||||
{Action,Alen,Tlen,Ics,Line,30};
|
||||
yystate(29, [C|Ics], Line, Tlen, Action, Alen) when C >= 48, C =< 57 ->
|
||||
yystate(6, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(29, [C|Ics], Line, Tlen, Action, Alen) when C >= 65, C =< 70 ->
|
||||
yystate(6, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(29, [C|Ics], Line, Tlen, Action, Alen) when C >= 97, C =< 102 ->
|
||||
yystate(6, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(29, Ics, Line, Tlen, Action, Alen) ->
|
||||
{Action,Alen,Tlen,Ics,Line,29};
|
||||
yystate(28, [C|Ics], Line, Tlen, Action, Alen) when C >= 48, C =< 57 ->
|
||||
yystate(19, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(28, [C|Ics], Line, Tlen, Action, Alen) when C >= 65, C =< 70 ->
|
||||
yystate(19, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(28, [C|Ics], Line, Tlen, Action, Alen) when C >= 97, C =< 102 ->
|
||||
yystate(19, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(28, Ics, Line, Tlen, Action, Alen) ->
|
||||
{Action,Alen,Tlen,Ics,Line,28};
|
||||
yystate(27, [C|Ics], Line, Tlen, Action, Alen) when C >= 48, C =< 57 ->
|
||||
yystate(15, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(27, [C|Ics], Line, Tlen, Action, Alen) when C >= 65, C =< 70 ->
|
||||
yystate(15, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(27, [C|Ics], Line, Tlen, Action, Alen) when C >= 97, C =< 102 ->
|
||||
yystate(15, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(27, Ics, Line, Tlen, Action, Alen) ->
|
||||
{Action,Alen,Tlen,Ics,Line,27};
|
||||
yystate(26, [95|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(7, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(26, [94|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(14, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(26, [64|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(35, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(26, [60|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(2, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(26, [46|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(22, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(26, [35|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(33, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(26, [34|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(31, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(26, [32|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(5, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(26, [13|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(20, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(26, [10|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(20, Ics, Line+1, Tlen+1, Action, Alen);
|
||||
yystate(26, [9|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(5, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(26, Ics, Line, Tlen, Action, Alen) ->
|
||||
{Action,Alen,Tlen,Ics,Line,26};
|
||||
yystate(25, [8255|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(36, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(25, [8256|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(36, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(25, [8204|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(36, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(25, [8205|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(36, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(25, [183|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(36, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(25, [95|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(36, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(25, [58|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(36, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(25, [46|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(25, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(25, [45|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(36, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(25, [C|Ics], Line, Tlen, Action, Alen) when C >= 48, C =< 57 ->
|
||||
yystate(36, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(25, [C|Ics], Line, Tlen, Action, Alen) when C >= 65, C =< 90 ->
|
||||
yystate(36, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(25, [C|Ics], Line, Tlen, Action, Alen) when C >= 97, C =< 122 ->
|
||||
yystate(36, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(25, [C|Ics], Line, Tlen, Action, Alen) when C >= 192, C =< 214 ->
|
||||
yystate(36, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(25, [C|Ics], Line, Tlen, Action, Alen) when C >= 216, C =< 246 ->
|
||||
yystate(36, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(25, [C|Ics], Line, Tlen, Action, Alen) when C >= 248, C =< 767 ->
|
||||
yystate(36, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(25, [C|Ics], Line, Tlen, Action, Alen) when C >= 768, C =< 879 ->
|
||||
yystate(36, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(25, [C|Ics], Line, Tlen, Action, Alen) when C >= 880, C =< 893 ->
|
||||
yystate(36, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(25, [C|Ics], Line, Tlen, Action, Alen) when C >= 895, C =< 8191 ->
|
||||
yystate(36, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(25, [C|Ics], Line, Tlen, Action, Alen) when C >= 8304, C =< 8591 ->
|
||||
yystate(36, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(25, [C|Ics], Line, Tlen, Action, Alen) when C >= 11264, C =< 12271 ->
|
||||
yystate(36, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(25, [C|Ics], Line, Tlen, Action, Alen) when C >= 12289, C =< 55295 ->
|
||||
yystate(36, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(25, [C|Ics], Line, Tlen, Action, Alen) when C >= 63744, C =< 64975 ->
|
||||
yystate(36, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(25, [C|Ics], Line, Tlen, Action, Alen) when C >= 65008, C =< 65533 ->
|
||||
yystate(36, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(25, [C|Ics], Line, Tlen, Action, Alen) when C >= 65536, C =< 983039 ->
|
||||
yystate(36, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(25, Ics, Line, Tlen, Action, Alen) ->
|
||||
{Action,Alen,Tlen,Ics,Line,25};
|
||||
yystate(24, [C|Ics], Line, Tlen, Action, Alen) when C >= 48, C =< 57 ->
|
||||
yystate(27, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(24, [C|Ics], Line, Tlen, Action, Alen) when C >= 65, C =< 70 ->
|
||||
yystate(27, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(24, [C|Ics], Line, Tlen, Action, Alen) when C >= 97, C =< 102 ->
|
||||
yystate(27, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(24, Ics, Line, Tlen, Action, Alen) ->
|
||||
{Action,Alen,Tlen,Ics,Line,24};
|
||||
yystate(23, [C|Ics], Line, Tlen, Action, Alen) when C >= 48, C =< 57 ->
|
||||
yystate(32, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(23, [C|Ics], Line, Tlen, Action, Alen) when C >= 65, C =< 70 ->
|
||||
yystate(32, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(23, [C|Ics], Line, Tlen, Action, Alen) when C >= 97, C =< 102 ->
|
||||
yystate(32, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(23, Ics, Line, Tlen, Action, Alen) ->
|
||||
{Action,Alen,Tlen,Ics,Line,23};
|
||||
yystate(22, Ics, Line, Tlen, _, _) ->
|
||||
{5,Tlen,Ics,Line};
|
||||
yystate(21, [C|Ics], Line, Tlen, Action, Alen) when C >= 48, C =< 57 ->
|
||||
yystate(2, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(21, [C|Ics], Line, Tlen, Action, Alen) when C >= 65, C =< 70 ->
|
||||
yystate(2, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(21, [C|Ics], Line, Tlen, Action, Alen) when C >= 97, C =< 102 ->
|
||||
yystate(2, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(21, Ics, Line, Tlen, Action, Alen) ->
|
||||
{Action,Alen,Tlen,Ics,Line,21};
|
||||
yystate(20, [13|Ics], Line, Tlen, _, _) ->
|
||||
yystate(20, Ics, Line, Tlen+1, 4, Tlen);
|
||||
yystate(20, [10|Ics], Line, Tlen, _, _) ->
|
||||
yystate(20, Ics, Line+1, Tlen+1, 4, Tlen);
|
||||
yystate(20, Ics, Line, Tlen, _, _) ->
|
||||
{4,Tlen,Ics,Line,20};
|
||||
yystate(19, [C|Ics], Line, Tlen, Action, Alen) when C >= 48, C =< 57 ->
|
||||
yystate(31, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(19, [C|Ics], Line, Tlen, Action, Alen) when C >= 65, C =< 70 ->
|
||||
yystate(31, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(19, [C|Ics], Line, Tlen, Action, Alen) when C >= 97, C =< 102 ->
|
||||
yystate(31, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(19, Ics, Line, Tlen, Action, Alen) ->
|
||||
{Action,Alen,Tlen,Ics,Line,19};
|
||||
yystate(18, [C|Ics], Line, Tlen, Action, Alen) when C >= 48, C =< 57 ->
|
||||
yystate(13, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(18, [C|Ics], Line, Tlen, Action, Alen) when C >= 65, C =< 90 ->
|
||||
yystate(13, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(18, [C|Ics], Line, Tlen, Action, Alen) when C >= 97, C =< 122 ->
|
||||
yystate(13, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(18, Ics, Line, Tlen, Action, Alen) ->
|
||||
{Action,Alen,Tlen,Ics,Line,18};
|
||||
yystate(17, [C|Ics], Line, Tlen, Action, Alen) when C >= 48, C =< 57 ->
|
||||
yystate(30, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(17, [C|Ics], Line, Tlen, Action, Alen) when C >= 65, C =< 70 ->
|
||||
yystate(30, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(17, [C|Ics], Line, Tlen, Action, Alen) when C >= 97, C =< 102 ->
|
||||
yystate(30, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(17, Ics, Line, Tlen, Action, Alen) ->
|
||||
{Action,Alen,Tlen,Ics,Line,17};
|
||||
yystate(16, Ics, Line, Tlen, _, _) ->
|
||||
{6,Tlen,Ics,Line};
|
||||
yystate(15, [C|Ics], Line, Tlen, Action, Alen) when C >= 48, C =< 57 ->
|
||||
yystate(23, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(15, [C|Ics], Line, Tlen, Action, Alen) when C >= 65, C =< 70 ->
|
||||
yystate(23, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(15, [C|Ics], Line, Tlen, Action, Alen) when C >= 97, C =< 102 ->
|
||||
yystate(23, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(15, Ics, Line, Tlen, Action, Alen) ->
|
||||
{Action,Alen,Tlen,Ics,Line,15};
|
||||
yystate(14, [94|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(16, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(14, Ics, Line, Tlen, Action, Alen) ->
|
||||
{Action,Alen,Tlen,Ics,Line,14};
|
||||
yystate(13, [45|Ics], Line, Tlen, _, _) ->
|
||||
yystate(18, Ics, Line, Tlen+1, 0, Tlen);
|
||||
yystate(13, [C|Ics], Line, Tlen, _, _) when C >= 48, C =< 57 ->
|
||||
yystate(13, Ics, Line, Tlen+1, 0, Tlen);
|
||||
yystate(13, [C|Ics], Line, Tlen, _, _) when C >= 65, C =< 90 ->
|
||||
yystate(13, Ics, Line, Tlen+1, 0, Tlen);
|
||||
yystate(13, [C|Ics], Line, Tlen, _, _) when C >= 97, C =< 122 ->
|
||||
yystate(13, Ics, Line, Tlen+1, 0, Tlen);
|
||||
yystate(13, Ics, Line, Tlen, _, _) ->
|
||||
{0,Tlen,Ics,Line,13};
|
||||
yystate(12, [117|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(23, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(12, [85|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(9, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(12, Ics, Line, Tlen, Action, Alen) ->
|
||||
{Action,Alen,Tlen,Ics,Line,12};
|
||||
yystate(11, [8204|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(36, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(11, [8205|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(36, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(11, [95|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(36, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(11, [58|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(36, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(11, [C|Ics], Line, Tlen, Action, Alen) when C >= 48, C =< 57 ->
|
||||
yystate(36, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(11, [C|Ics], Line, Tlen, Action, Alen) when C >= 65, C =< 90 ->
|
||||
yystate(36, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(11, [C|Ics], Line, Tlen, Action, Alen) when C >= 97, C =< 122 ->
|
||||
yystate(36, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(11, [C|Ics], Line, Tlen, Action, Alen) when C >= 192, C =< 214 ->
|
||||
yystate(36, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(11, [C|Ics], Line, Tlen, Action, Alen) when C >= 216, C =< 246 ->
|
||||
yystate(36, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(11, [C|Ics], Line, Tlen, Action, Alen) when C >= 248, C =< 767 ->
|
||||
yystate(36, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(11, [C|Ics], Line, Tlen, Action, Alen) when C >= 880, C =< 893 ->
|
||||
yystate(36, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(11, [C|Ics], Line, Tlen, Action, Alen) when C >= 895, C =< 8191 ->
|
||||
yystate(36, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(11, [C|Ics], Line, Tlen, Action, Alen) when C >= 8304, C =< 8591 ->
|
||||
yystate(36, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(11, [C|Ics], Line, Tlen, Action, Alen) when C >= 11264, C =< 12271 ->
|
||||
yystate(36, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(11, [C|Ics], Line, Tlen, Action, Alen) when C >= 12289, C =< 55295 ->
|
||||
yystate(36, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(11, [C|Ics], Line, Tlen, Action, Alen) when C >= 63744, C =< 64975 ->
|
||||
yystate(36, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(11, [C|Ics], Line, Tlen, Action, Alen) when C >= 65008, C =< 65533 ->
|
||||
yystate(36, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(11, [C|Ics], Line, Tlen, Action, Alen) when C >= 65536, C =< 983039 ->
|
||||
yystate(36, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(11, Ics, Line, Tlen, Action, Alen) ->
|
||||
{Action,Alen,Tlen,Ics,Line,11};
|
||||
yystate(10, [C|Ics], Line, Tlen, Action, Alen) when C >= 48, C =< 57 ->
|
||||
yystate(21, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(10, [C|Ics], Line, Tlen, Action, Alen) when C >= 65, C =< 70 ->
|
||||
yystate(21, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(10, [C|Ics], Line, Tlen, Action, Alen) when C >= 97, C =< 102 ->
|
||||
yystate(21, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(10, Ics, Line, Tlen, Action, Alen) ->
|
||||
{Action,Alen,Tlen,Ics,Line,10};
|
||||
yystate(9, [C|Ics], Line, Tlen, Action, Alen) when C >= 48, C =< 57 ->
|
||||
yystate(24, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(9, [C|Ics], Line, Tlen, Action, Alen) when C >= 65, C =< 70 ->
|
||||
yystate(24, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(9, [C|Ics], Line, Tlen, Action, Alen) when C >= 97, C =< 102 ->
|
||||
yystate(24, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(9, Ics, Line, Tlen, Action, Alen) ->
|
||||
{Action,Alen,Tlen,Ics,Line,9};
|
||||
yystate(8, Ics, Line, Tlen, _, _) ->
|
||||
{2,Tlen,Ics,Line};
|
||||
yystate(7, [58|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(11, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(7, Ics, Line, Tlen, Action, Alen) ->
|
||||
{Action,Alen,Tlen,Ics,Line,7};
|
||||
yystate(6, [C|Ics], Line, Tlen, Action, Alen) when C >= 48, C =< 57 ->
|
||||
yystate(17, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(6, [C|Ics], Line, Tlen, Action, Alen) when C >= 65, C =< 70 ->
|
||||
yystate(17, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(6, [C|Ics], Line, Tlen, Action, Alen) when C >= 97, C =< 102 ->
|
||||
yystate(17, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(6, Ics, Line, Tlen, Action, Alen) ->
|
||||
{Action,Alen,Tlen,Ics,Line,6};
|
||||
yystate(5, [32|Ics], Line, Tlen, _, _) ->
|
||||
yystate(5, Ics, Line, Tlen+1, 7, Tlen);
|
||||
yystate(5, [9|Ics], Line, Tlen, _, _) ->
|
||||
yystate(5, Ics, Line, Tlen+1, 7, Tlen);
|
||||
yystate(5, Ics, Line, Tlen, _, _) ->
|
||||
{7,Tlen,Ics,Line,5};
|
||||
yystate(4, Ics, Line, Tlen, _, _) ->
|
||||
{1,Tlen,Ics,Line};
|
||||
yystate(3, [C|Ics], Line, Tlen, Action, Alen) when C >= 48, C =< 57 ->
|
||||
yystate(34, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(3, [C|Ics], Line, Tlen, Action, Alen) when C >= 65, C =< 70 ->
|
||||
yystate(34, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(3, [C|Ics], Line, Tlen, Action, Alen) when C >= 97, C =< 102 ->
|
||||
yystate(34, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(3, Ics, Line, Tlen, Action, Alen) ->
|
||||
{Action,Alen,Tlen,Ics,Line,3};
|
||||
yystate(2, [95|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(2, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(2, [93|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(2, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(2, [92|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(12, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(2, [62|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(4, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(2, [61|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(2, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(2, [33|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(2, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(2, [C|Ics], Line, Tlen, Action, Alen) when C >= 35, C =< 59 ->
|
||||
yystate(2, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(2, [C|Ics], Line, Tlen, Action, Alen) when C >= 63, C =< 91 ->
|
||||
yystate(2, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(2, [C|Ics], Line, Tlen, Action, Alen) when C >= 97, C =< 122 ->
|
||||
yystate(2, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(2, [C|Ics], Line, Tlen, Action, Alen) when C >= 126 ->
|
||||
yystate(2, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(2, Ics, Line, Tlen, Action, Alen) ->
|
||||
{Action,Alen,Tlen,Ics,Line,2};
|
||||
yystate(1, [117|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(3, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(1, [116|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(31, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(1, [114|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(31, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(1, [110|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(31, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(1, [102|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(31, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(1, [98|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(31, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(1, [92|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(31, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(1, [85|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(29, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(1, [39|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(31, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(1, [34|Ics], Line, Tlen, Action, Alen) ->
|
||||
yystate(31, Ics, Line, Tlen+1, Action, Alen);
|
||||
yystate(1, Ics, Line, Tlen, Action, Alen) ->
|
||||
{Action,Alen,Tlen,Ics,Line,1};
|
||||
yystate(0, [45|Ics], Line, Tlen, _, _) ->
|
||||
yystate(18, Ics, Line, Tlen+1, 0, Tlen);
|
||||
yystate(0, [C|Ics], Line, Tlen, _, _) when C >= 65, C =< 90 ->
|
||||
yystate(0, Ics, Line, Tlen+1, 0, Tlen);
|
||||
yystate(0, [C|Ics], Line, Tlen, _, _) when C >= 97, C =< 122 ->
|
||||
yystate(0, Ics, Line, Tlen+1, 0, Tlen);
|
||||
yystate(0, Ics, Line, Tlen, _, _) ->
|
||||
{0,Tlen,Ics,Line,0};
|
||||
yystate(S, Ics, Line, Tlen, Action, Alen) ->
|
||||
{Action,Alen,Tlen,Ics,Line,S}.
|
||||
|
||||
%% yyaction(Action, TokenLength, TokenChars, TokenLine) ->
|
||||
%% {token,Token} | {end_token, Token} | skip_token | {error,String}.
|
||||
%% Generated action function.
|
||||
|
||||
yyaction(0, TokenLen, YYtcs, TokenLine) ->
|
||||
TokenChars = yypre(YYtcs, TokenLen),
|
||||
yyaction_0(TokenChars, TokenLine);
|
||||
yyaction(1, TokenLen, YYtcs, TokenLine) ->
|
||||
TokenChars = yypre(YYtcs, TokenLen),
|
||||
yyaction_1(TokenChars, TokenLine);
|
||||
yyaction(2, TokenLen, YYtcs, TokenLine) ->
|
||||
TokenChars = yypre(YYtcs, TokenLen),
|
||||
yyaction_2(TokenChars, TokenLine);
|
||||
yyaction(3, TokenLen, YYtcs, TokenLine) ->
|
||||
TokenChars = yypre(YYtcs, TokenLen),
|
||||
yyaction_3(TokenChars, TokenLine);
|
||||
yyaction(4, _, _, TokenLine) ->
|
||||
yyaction_4(TokenLine);
|
||||
yyaction(5, _, _, TokenLine) ->
|
||||
yyaction_5(TokenLine);
|
||||
yyaction(6, _, _, TokenLine) ->
|
||||
yyaction_6(TokenLine);
|
||||
yyaction(7, _, _, _) ->
|
||||
yyaction_7();
|
||||
yyaction(8, _, _, _) ->
|
||||
yyaction_8();
|
||||
yyaction(_, _, _, _) -> error.
|
||||
|
||||
-compile({inline,yyaction_0/2}).
|
||||
-file("src/ntriples_lexer.xrl", 18).
|
||||
yyaction_0(TokenChars, TokenLine) ->
|
||||
{ token, { langtag, TokenLine, langtag_str (TokenChars) } } .
|
||||
|
||||
-compile({inline,yyaction_1/2}).
|
||||
-file("src/ntriples_lexer.xrl", 19).
|
||||
yyaction_1(TokenChars, TokenLine) ->
|
||||
{ token, { iriref, TokenLine, quoted_content_str (TokenChars) } } .
|
||||
|
||||
-compile({inline,yyaction_2/2}).
|
||||
-file("src/ntriples_lexer.xrl", 20).
|
||||
yyaction_2(TokenChars, TokenLine) ->
|
||||
{ token, { string_literal_quote, TokenLine, quoted_content_str (TokenChars) } } .
|
||||
|
||||
-compile({inline,yyaction_3/2}).
|
||||
-file("src/ntriples_lexer.xrl", 21).
|
||||
yyaction_3(TokenChars, TokenLine) ->
|
||||
{ token, { blank_node_label, TokenLine, bnode_str (TokenChars) } } .
|
||||
|
||||
-compile({inline,yyaction_4/1}).
|
||||
-file("src/ntriples_lexer.xrl", 22).
|
||||
yyaction_4(TokenLine) ->
|
||||
{ token, { eol, TokenLine } } .
|
||||
|
||||
-compile({inline,yyaction_5/1}).
|
||||
-file("src/ntriples_lexer.xrl", 23).
|
||||
yyaction_5(TokenLine) ->
|
||||
{ token, { '.', TokenLine } } .
|
||||
|
||||
-compile({inline,yyaction_6/1}).
|
||||
-file("src/ntriples_lexer.xrl", 24).
|
||||
yyaction_6(TokenLine) ->
|
||||
{ token, { '^^', TokenLine } } .
|
||||
|
||||
-compile({inline,yyaction_7/0}).
|
||||
-file("src/ntriples_lexer.xrl", 25).
|
||||
yyaction_7() ->
|
||||
skip_token .
|
||||
|
||||
-compile({inline,yyaction_8/0}).
|
||||
-file("src/ntriples_lexer.xrl", 26).
|
||||
yyaction_8() ->
|
||||
skip_token .
|
||||
|
||||
-file("/usr/local/Cellar/erlang/19.1/lib/erlang/lib/parsetools-2.1.3/include/leexinc.hrl", 290).
|
35
src/ntriples_lexer.xrl
Normal file
35
src/ntriples_lexer.xrl
Normal file
|
@ -0,0 +1,35 @@
|
|||
Definitions.
|
||||
|
||||
WHITESPACE = [\s\t]
|
||||
COMMENT = #[^\n\r]*
|
||||
EOL = [\n\r]+
|
||||
HEX = [0-9]|[A-F]|[a-f]
|
||||
UCHAR = (\\u({HEX})({HEX})({HEX})({HEX}))|(\\U({HEX})({HEX})({HEX})({HEX})({HEX})({HEX})({HEX})({HEX}))
|
||||
ECHAR = \\[tbnrf"'\\]
|
||||
PN_CHARS_BASE = [A-Z]|[a-z]|[\x{00C0}-\x{00D6}]|[\x{00D8}-\x{00F6}]|[\x{00F8}-\x{02FF}]|[\x{0370}-\x{037D}]|[\x{037F}-\x{1FFF}]|[\x{200C}-\x{200D}]|[\x{2070}-\x{218F}]|[\x{2C00}-\x{2FEF}]|[\x{3001}-\x{D7FF}]|[\x{F900}-\x{FDCF}]|[\x{FDF0}-\x{FFFD}]|[\x{10000}-\x{EFFFF}]
|
||||
PN_CHARS_U = {PN_CHARS_BASE}|_|:
|
||||
PN_CHARS = {PN_CHARS_U}|-|[0-9]|\x{00B7}|[\x{0300}-\x{036F}]|[\x{203F}-\x{2040}]
|
||||
IRIREF = <([^\x00-\x20<>"{}|^`\\]|{UCHAR})*>
|
||||
STRING_LITERAL_QUOTE = "([^\x22\x5C\x0A\x0D]|{ECHAR}|{UCHAR})*"
|
||||
BLANK_NODE_LABEL = _:({PN_CHARS_U}|[0-9])(({PN_CHARS}|\.)*({PN_CHARS}))?
|
||||
LANGTAG = @[a-zA-Z]+(-[a-zA-Z0-9]+)*
|
||||
|
||||
|
||||
Rules.
|
||||
|
||||
{LANGTAG} : {token, {langtag, TokenLine, langtag_str(TokenChars)}}.
|
||||
{IRIREF} : {token, {iriref, TokenLine, quoted_content_str(TokenChars)}}.
|
||||
{STRING_LITERAL_QUOTE} : {token, {string_literal_quote, TokenLine, quoted_content_str(TokenChars)}}.
|
||||
{BLANK_NODE_LABEL} : {token, {blank_node_label, TokenLine, bnode_str(TokenChars)}}.
|
||||
{EOL} : {token, {eol, TokenLine}}.
|
||||
\. : {token, {'.', TokenLine}}.
|
||||
\^\^ : {token, {'^^', TokenLine}}.
|
||||
{WHITESPACE}+ : skip_token.
|
||||
{COMMENT} : skip_token.
|
||||
|
||||
|
||||
Erlang code.
|
||||
|
||||
quoted_content_str(TokenChars) -> 'Elixir.RDF.Reader.ParseHelper':quoted_content_str(TokenChars).
|
||||
bnode_str(TokenChars) -> 'Elixir.RDF.Reader.ParseHelper':bnode_str(TokenChars).
|
||||
langtag_str(TokenChars) -> 'Elixir.RDF.Reader.ParseHelper':langtag_str(TokenChars).
|
573
src/ntriples_parser.erl
Normal file
573
src/ntriples_parser.erl
Normal file
|
@ -0,0 +1,573 @@
|
|||
-module(ntriples_parser).
|
||||
-export([parse/1, parse_and_scan/1, format_error/1]).
|
||||
-file("src/ntriples_parser.yrl", 37).
|
||||
|
||||
to_uri(IRIREF) ->
|
||||
case 'Elixir.RDF.Reader.ParseHelper':to_uri(IRIREF) of
|
||||
{ok, URI} -> URI;
|
||||
{error, ErrorLine, Message} -> return_error(ErrorLine, Message)
|
||||
end.
|
||||
to_bnode(BLANK_NODE_LABEL) -> 'Elixir.RDF.Reader.ParseHelper':to_bnode(BLANK_NODE_LABEL).
|
||||
to_literal(STRING_LITERAL_QUOTE) -> 'Elixir.RDF.Reader.ParseHelper':to_literal(STRING_LITERAL_QUOTE).
|
||||
to_literal(STRING_LITERAL_QUOTE, Type) -> 'Elixir.RDF.Reader.ParseHelper':to_literal(STRING_LITERAL_QUOTE, Type).
|
||||
to_langtag(LANGTAG) -> 'Elixir.RDF.Reader.ParseHelper':to_langtag(LANGTAG).
|
||||
|
||||
-file("/usr/local/Cellar/erlang/19.1/lib/erlang/lib/parsetools-2.1.3/include/yeccpre.hrl", 0).
|
||||
%%
|
||||
%% %CopyrightBegin%
|
||||
%%
|
||||
%% Copyright Ericsson AB 1996-2015. All Rights Reserved.
|
||||
%%
|
||||
%% Licensed under the Apache License, Version 2.0 (the "License");
|
||||
%% you may not use this file except in compliance with the License.
|
||||
%% You may obtain a copy of the License at
|
||||
%%
|
||||
%% http://www.apache.org/licenses/LICENSE-2.0
|
||||
%%
|
||||
%% Unless required by applicable law or agreed to in writing, software
|
||||
%% distributed under the License is distributed on an "AS IS" BASIS,
|
||||
%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
%% See the License for the specific language governing permissions and
|
||||
%% limitations under the License.
|
||||
%%
|
||||
%% %CopyrightEnd%
|
||||
%%
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% The parser generator will insert appropriate declarations before this line.%
|
||||
|
||||
-type yecc_ret() :: {'error', _} | {'ok', _}.
|
||||
|
||||
-spec parse(Tokens :: list()) -> yecc_ret().
|
||||
parse(Tokens) ->
|
||||
yeccpars0(Tokens, {no_func, no_line}, 0, [], []).
|
||||
|
||||
-spec parse_and_scan({function() | {atom(), atom()}, [_]}
|
||||
| {atom(), atom(), [_]}) -> yecc_ret().
|
||||
parse_and_scan({F, A}) ->
|
||||
yeccpars0([], {{F, A}, no_line}, 0, [], []);
|
||||
parse_and_scan({M, F, A}) ->
|
||||
Arity = length(A),
|
||||
yeccpars0([], {{fun M:F/Arity, A}, no_line}, 0, [], []).
|
||||
|
||||
-spec format_error(any()) -> [char() | list()].
|
||||
format_error(Message) ->
|
||||
case io_lib:deep_char_list(Message) of
|
||||
true ->
|
||||
Message;
|
||||
_ ->
|
||||
io_lib:write(Message)
|
||||
end.
|
||||
|
||||
%% To be used in grammar files to throw an error message to the parser
|
||||
%% toplevel. Doesn't have to be exported!
|
||||
-compile({nowarn_unused_function, return_error/2}).
|
||||
-spec return_error(integer(), any()) -> no_return().
|
||||
return_error(Line, Message) ->
|
||||
throw({error, {Line, ?MODULE, Message}}).
|
||||
|
||||
-define(CODE_VERSION, "1.4").
|
||||
|
||||
yeccpars0(Tokens, Tzr, State, States, Vstack) ->
|
||||
try yeccpars1(Tokens, Tzr, State, States, Vstack)
|
||||
catch
|
||||
error: Error ->
|
||||
Stacktrace = erlang:get_stacktrace(),
|
||||
try yecc_error_type(Error, Stacktrace) of
|
||||
Desc ->
|
||||
erlang:raise(error, {yecc_bug, ?CODE_VERSION, Desc},
|
||||
Stacktrace)
|
||||
catch _:_ -> erlang:raise(error, Error, Stacktrace)
|
||||
end;
|
||||
%% Probably thrown from return_error/2:
|
||||
throw: {error, {_Line, ?MODULE, _M}} = Error ->
|
||||
Error
|
||||
end.
|
||||
|
||||
yecc_error_type(function_clause, [{?MODULE,F,ArityOrArgs,_} | _]) ->
|
||||
case atom_to_list(F) of
|
||||
"yeccgoto_" ++ SymbolL ->
|
||||
{ok,[{atom,_,Symbol}],_} = erl_scan:string(SymbolL),
|
||||
State = case ArityOrArgs of
|
||||
[S,_,_,_,_,_,_] -> S;
|
||||
_ -> state_is_unknown
|
||||
end,
|
||||
{Symbol, State, missing_in_goto_table}
|
||||
end.
|
||||
|
||||
yeccpars1([Token | Tokens], Tzr, State, States, Vstack) ->
|
||||
yeccpars2(State, element(1, Token), States, Vstack, Token, Tokens, Tzr);
|
||||
yeccpars1([], {{F, A},_Line}, State, States, Vstack) ->
|
||||
case apply(F, A) of
|
||||
{ok, Tokens, Endline} ->
|
||||
yeccpars1(Tokens, {{F, A}, Endline}, State, States, Vstack);
|
||||
{eof, Endline} ->
|
||||
yeccpars1([], {no_func, Endline}, State, States, Vstack);
|
||||
{error, Descriptor, _Endline} ->
|
||||
{error, Descriptor}
|
||||
end;
|
||||
yeccpars1([], {no_func, no_line}, State, States, Vstack) ->
|
||||
Line = 999999,
|
||||
yeccpars2(State, '$end', States, Vstack, yecc_end(Line), [],
|
||||
{no_func, Line});
|
||||
yeccpars1([], {no_func, Endline}, State, States, Vstack) ->
|
||||
yeccpars2(State, '$end', States, Vstack, yecc_end(Endline), [],
|
||||
{no_func, Endline}).
|
||||
|
||||
%% yeccpars1/7 is called from generated code.
|
||||
%%
|
||||
%% When using the {includefile, Includefile} option, make sure that
|
||||
%% yeccpars1/7 can be found by parsing the file without following
|
||||
%% include directives. yecc will otherwise assume that an old
|
||||
%% yeccpre.hrl is included (one which defines yeccpars1/5).
|
||||
yeccpars1(State1, State, States, Vstack, Token0, [Token | Tokens], Tzr) ->
|
||||
yeccpars2(State, element(1, Token), [State1 | States],
|
||||
[Token0 | Vstack], Token, Tokens, Tzr);
|
||||
yeccpars1(State1, State, States, Vstack, Token0, [], {{_F,_A}, _Line}=Tzr) ->
|
||||
yeccpars1([], Tzr, State, [State1 | States], [Token0 | Vstack]);
|
||||
yeccpars1(State1, State, States, Vstack, Token0, [], {no_func, no_line}) ->
|
||||
Line = yecctoken_end_location(Token0),
|
||||
yeccpars2(State, '$end', [State1 | States], [Token0 | Vstack],
|
||||
yecc_end(Line), [], {no_func, Line});
|
||||
yeccpars1(State1, State, States, Vstack, Token0, [], {no_func, Line}) ->
|
||||
yeccpars2(State, '$end', [State1 | States], [Token0 | Vstack],
|
||||
yecc_end(Line), [], {no_func, Line}).
|
||||
|
||||
%% For internal use only.
|
||||
yecc_end({Line,_Column}) ->
|
||||
{'$end', Line};
|
||||
yecc_end(Line) ->
|
||||
{'$end', Line}.
|
||||
|
||||
yecctoken_end_location(Token) ->
|
||||
try erl_anno:end_location(element(2, Token)) of
|
||||
undefined -> yecctoken_location(Token);
|
||||
Loc -> Loc
|
||||
catch _:_ -> yecctoken_location(Token)
|
||||
end.
|
||||
|
||||
-compile({nowarn_unused_function, yeccerror/1}).
|
||||
yeccerror(Token) ->
|
||||
Text = yecctoken_to_string(Token),
|
||||
Location = yecctoken_location(Token),
|
||||
{error, {Location, ?MODULE, ["syntax error before: ", Text]}}.
|
||||
|
||||
-compile({nowarn_unused_function, yecctoken_to_string/1}).
|
||||
yecctoken_to_string(Token) ->
|
||||
try erl_scan:text(Token) of
|
||||
undefined -> yecctoken2string(Token);
|
||||
Txt -> Txt
|
||||
catch _:_ -> yecctoken2string(Token)
|
||||
end.
|
||||
|
||||
yecctoken_location(Token) ->
|
||||
try erl_scan:location(Token)
|
||||
catch _:_ -> element(2, Token)
|
||||
end.
|
||||
|
||||
-compile({nowarn_unused_function, yecctoken2string/1}).
|
||||
yecctoken2string({atom, _, A}) -> io_lib:write(A);
|
||||
yecctoken2string({integer,_,N}) -> io_lib:write(N);
|
||||
yecctoken2string({float,_,F}) -> io_lib:write(F);
|
||||
yecctoken2string({char,_,C}) -> io_lib:write_char(C);
|
||||
yecctoken2string({var,_,V}) -> io_lib:format("~s", [V]);
|
||||
yecctoken2string({string,_,S}) -> io_lib:write_string(S);
|
||||
yecctoken2string({reserved_symbol, _, A}) -> io_lib:write(A);
|
||||
yecctoken2string({_Cat, _, Val}) -> io_lib:format("~p",[Val]);
|
||||
yecctoken2string({dot, _}) -> "'.'";
|
||||
yecctoken2string({'$end', _}) ->
|
||||
[];
|
||||
yecctoken2string({Other, _}) when is_atom(Other) ->
|
||||
io_lib:write(Other);
|
||||
yecctoken2string(Other) ->
|
||||
io_lib:write(Other).
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
|
||||
|
||||
-file("src/ntriples_parser.erl", 189).
|
||||
|
||||
-dialyzer({nowarn_function, yeccpars2/7}).
|
||||
yeccpars2(0=S, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
yeccpars2_0(S, Cat, Ss, Stack, T, Ts, Tzr);
|
||||
%% yeccpars2(1=S, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
%% yeccpars2_1(S, Cat, Ss, Stack, T, Ts, Tzr);
|
||||
%% yeccpars2(2=S, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
%% yeccpars2_2(S, Cat, Ss, Stack, T, Ts, Tzr);
|
||||
%% yeccpars2(3=S, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
%% yeccpars2_3(S, Cat, Ss, Stack, T, Ts, Tzr);
|
||||
%% yeccpars2(4=S, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
%% yeccpars2_4(S, Cat, Ss, Stack, T, Ts, Tzr);
|
||||
%% yeccpars2(5=S, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
%% yeccpars2_5(S, Cat, Ss, Stack, T, Ts, Tzr);
|
||||
yeccpars2(6=S, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
yeccpars2_6(S, Cat, Ss, Stack, T, Ts, Tzr);
|
||||
yeccpars2(7=S, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
yeccpars2_7(S, Cat, Ss, Stack, T, Ts, Tzr);
|
||||
yeccpars2(8=S, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
yeccpars2_8(S, Cat, Ss, Stack, T, Ts, Tzr);
|
||||
%% yeccpars2(9=S, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
%% yeccpars2_9(S, Cat, Ss, Stack, T, Ts, Tzr);
|
||||
yeccpars2(10=S, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
yeccpars2_10(S, Cat, Ss, Stack, T, Ts, Tzr);
|
||||
%% yeccpars2(11=S, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
%% yeccpars2_11(S, Cat, Ss, Stack, T, Ts, Tzr);
|
||||
yeccpars2(12=S, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
yeccpars2_12(S, Cat, Ss, Stack, T, Ts, Tzr);
|
||||
%% yeccpars2(13=S, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
%% yeccpars2_13(S, Cat, Ss, Stack, T, Ts, Tzr);
|
||||
%% yeccpars2(14=S, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
%% yeccpars2_14(S, Cat, Ss, Stack, T, Ts, Tzr);
|
||||
yeccpars2(15=S, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
yeccpars2_15(S, Cat, Ss, Stack, T, Ts, Tzr);
|
||||
yeccpars2(16=S, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
yeccpars2_16(S, Cat, Ss, Stack, T, Ts, Tzr);
|
||||
yeccpars2(17=S, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
yeccpars2_17(S, Cat, Ss, Stack, T, Ts, Tzr);
|
||||
yeccpars2(18=S, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
yeccpars2_18(S, Cat, Ss, Stack, T, Ts, Tzr);
|
||||
yeccpars2(19=S, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
yeccpars2_19(S, Cat, Ss, Stack, T, Ts, Tzr);
|
||||
yeccpars2(20=S, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
yeccpars2_20(S, Cat, Ss, Stack, T, Ts, Tzr);
|
||||
yeccpars2(21=S, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
yeccpars2_21(S, Cat, Ss, Stack, T, Ts, Tzr);
|
||||
%% yeccpars2(22=S, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
%% yeccpars2_22(S, Cat, Ss, Stack, T, Ts, Tzr);
|
||||
%% yeccpars2(23=S, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
%% yeccpars2_23(S, Cat, Ss, Stack, T, Ts, Tzr);
|
||||
yeccpars2(Other, _, _, _, _, _, _) ->
|
||||
erlang:error({yecc_bug,"1.4",{missing_state_in_action_table, Other}}).
|
||||
|
||||
yeccpars2_0(S, blank_node_label, Ss, Stack, T, Ts, Tzr) ->
|
||||
yeccpars1(S, 6, Ss, Stack, T, Ts, Tzr);
|
||||
yeccpars2_0(S, eol, Ss, Stack, T, Ts, Tzr) ->
|
||||
yeccpars1(S, 7, Ss, Stack, T, Ts, Tzr);
|
||||
yeccpars2_0(S, iriref, Ss, Stack, T, Ts, Tzr) ->
|
||||
yeccpars1(S, 8, Ss, Stack, T, Ts, Tzr);
|
||||
yeccpars2_0(_S, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
NewStack = yeccpars2_0_(Stack),
|
||||
yeccpars2_3(3, Cat, [0 | Ss], NewStack, T, Ts, Tzr).
|
||||
|
||||
yeccpars2_1(S, eol, Ss, Stack, T, Ts, Tzr) ->
|
||||
yeccpars1(S, 7, Ss, Stack, T, Ts, Tzr);
|
||||
yeccpars2_1(_S, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
NewStack = yeccpars2_1_(Stack),
|
||||
yeccgoto_nonEmptyNtriplesDoc(hd(Ss), Cat, Ss, NewStack, T, Ts, Tzr).
|
||||
|
||||
-dialyzer({nowarn_function, yeccpars2_2/7}).
|
||||
yeccpars2_2(S, iriref, Ss, Stack, T, Ts, Tzr) ->
|
||||
yeccpars1(S, 12, Ss, Stack, T, Ts, Tzr);
|
||||
yeccpars2_2(_, _, _, _, T, _, _) ->
|
||||
yeccerror(T).
|
||||
|
||||
-dialyzer({nowarn_function, yeccpars2_3/7}).
|
||||
yeccpars2_3(_S, '$end', _Ss, Stack, _T, _Ts, _Tzr) ->
|
||||
{ok, hd(Stack)};
|
||||
yeccpars2_3(_, _, _, _, T, _, _) ->
|
||||
yeccerror(T).
|
||||
|
||||
yeccpars2_4(_S, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
NewStack = yeccpars2_4_(Stack),
|
||||
yeccgoto_ntriplesDoc(hd(Ss), Cat, Ss, NewStack, T, Ts, Tzr).
|
||||
|
||||
yeccpars2_5(S, blank_node_label, Ss, Stack, T, Ts, Tzr) ->
|
||||
yeccpars1(S, 6, Ss, Stack, T, Ts, Tzr);
|
||||
yeccpars2_5(S, eol, Ss, Stack, T, Ts, Tzr) ->
|
||||
yeccpars1(S, 10, Ss, Stack, T, Ts, Tzr);
|
||||
yeccpars2_5(S, iriref, Ss, Stack, T, Ts, Tzr) ->
|
||||
yeccpars1(S, 8, Ss, Stack, T, Ts, Tzr);
|
||||
yeccpars2_5(_S, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
NewStack = yeccpars2_5_(Stack),
|
||||
yeccgoto_ntriplesDoc(hd(Ss), Cat, Ss, NewStack, T, Ts, Tzr).
|
||||
|
||||
yeccpars2_6(_S, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
NewStack = yeccpars2_6_(Stack),
|
||||
yeccgoto_subject(hd(Ss), Cat, Ss, NewStack, T, Ts, Tzr).
|
||||
|
||||
yeccpars2_7(_S, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
NewStack = yeccpars2_7_(Stack),
|
||||
yeccgoto_eols(hd(Ss), Cat, Ss, NewStack, T, Ts, Tzr).
|
||||
|
||||
yeccpars2_8(_S, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
NewStack = yeccpars2_8_(Stack),
|
||||
yeccgoto_subject(hd(Ss), Cat, Ss, NewStack, T, Ts, Tzr).
|
||||
|
||||
yeccpars2_9(_S, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
[_|Nss] = Ss,
|
||||
NewStack = yeccpars2_9_(Stack),
|
||||
yeccgoto_ntriplesDoc(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr).
|
||||
|
||||
yeccpars2_10(_S, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
[_|Nss] = Ss,
|
||||
NewStack = yeccpars2_10_(Stack),
|
||||
yeccgoto_eols(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr).
|
||||
|
||||
-dialyzer({nowarn_function, yeccpars2_11/7}).
|
||||
yeccpars2_11(S, blank_node_label, Ss, Stack, T, Ts, Tzr) ->
|
||||
yeccpars1(S, 15, Ss, Stack, T, Ts, Tzr);
|
||||
yeccpars2_11(S, iriref, Ss, Stack, T, Ts, Tzr) ->
|
||||
yeccpars1(S, 16, Ss, Stack, T, Ts, Tzr);
|
||||
yeccpars2_11(S, string_literal_quote, Ss, Stack, T, Ts, Tzr) ->
|
||||
yeccpars1(S, 17, Ss, Stack, T, Ts, Tzr);
|
||||
yeccpars2_11(_, _, _, _, T, _, _) ->
|
||||
yeccerror(T).
|
||||
|
||||
yeccpars2_12(_S, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
NewStack = yeccpars2_12_(Stack),
|
||||
yeccgoto_predicate(hd(Ss), Cat, Ss, NewStack, T, Ts, Tzr).
|
||||
|
||||
-dialyzer({nowarn_function, yeccpars2_13/7}).
|
||||
yeccpars2_13(S, '.', Ss, Stack, T, Ts, Tzr) ->
|
||||
yeccpars1(S, 21, Ss, Stack, T, Ts, Tzr);
|
||||
yeccpars2_13(_, _, _, _, T, _, _) ->
|
||||
yeccerror(T).
|
||||
|
||||
yeccpars2_14(_S, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
yeccgoto_object(hd(Ss), Cat, Ss, Stack, T, Ts, Tzr).
|
||||
|
||||
yeccpars2_15(_S, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
NewStack = yeccpars2_15_(Stack),
|
||||
yeccgoto_object(hd(Ss), Cat, Ss, NewStack, T, Ts, Tzr).
|
||||
|
||||
yeccpars2_16(_S, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
NewStack = yeccpars2_16_(Stack),
|
||||
yeccgoto_object(hd(Ss), Cat, Ss, NewStack, T, Ts, Tzr).
|
||||
|
||||
yeccpars2_17(S, '^^', Ss, Stack, T, Ts, Tzr) ->
|
||||
yeccpars1(S, 18, Ss, Stack, T, Ts, Tzr);
|
||||
yeccpars2_17(S, langtag, Ss, Stack, T, Ts, Tzr) ->
|
||||
yeccpars1(S, 19, Ss, Stack, T, Ts, Tzr);
|
||||
yeccpars2_17(_S, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
NewStack = yeccpars2_17_(Stack),
|
||||
yeccgoto_literal(hd(Ss), Cat, Ss, NewStack, T, Ts, Tzr).
|
||||
|
||||
-dialyzer({nowarn_function, yeccpars2_18/7}).
|
||||
yeccpars2_18(S, iriref, Ss, Stack, T, Ts, Tzr) ->
|
||||
yeccpars1(S, 20, Ss, Stack, T, Ts, Tzr);
|
||||
yeccpars2_18(_, _, _, _, T, _, _) ->
|
||||
yeccerror(T).
|
||||
|
||||
yeccpars2_19(_S, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
[_|Nss] = Ss,
|
||||
NewStack = yeccpars2_19_(Stack),
|
||||
yeccgoto_literal(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr).
|
||||
|
||||
yeccpars2_20(_S, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
[_,_|Nss] = Ss,
|
||||
NewStack = yeccpars2_20_(Stack),
|
||||
yeccgoto_literal(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr).
|
||||
|
||||
yeccpars2_21(_S, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
[_,_,_|Nss] = Ss,
|
||||
NewStack = yeccpars2_21_(Stack),
|
||||
yeccgoto_triple(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr).
|
||||
|
||||
yeccpars2_22(S, blank_node_label, Ss, Stack, T, Ts, Tzr) ->
|
||||
yeccpars1(S, 6, Ss, Stack, T, Ts, Tzr);
|
||||
yeccpars2_22(S, eol, Ss, Stack, T, Ts, Tzr) ->
|
||||
yeccpars1(S, 10, Ss, Stack, T, Ts, Tzr);
|
||||
yeccpars2_22(S, iriref, Ss, Stack, T, Ts, Tzr) ->
|
||||
yeccpars1(S, 8, Ss, Stack, T, Ts, Tzr);
|
||||
yeccpars2_22(_S, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
[_|Nss] = Ss,
|
||||
NewStack = yeccpars2_22_(Stack),
|
||||
yeccgoto_nonEmptyNtriplesDoc(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr).
|
||||
|
||||
yeccpars2_23(_S, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
[_,_|Nss] = Ss,
|
||||
NewStack = yeccpars2_23_(Stack),
|
||||
yeccgoto_nonEmptyNtriplesDoc(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr).
|
||||
|
||||
-dialyzer({nowarn_function, yeccgoto_eols/7}).
|
||||
yeccgoto_eols(0, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
yeccpars2_5(5, Cat, Ss, Stack, T, Ts, Tzr);
|
||||
yeccgoto_eols(1, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
yeccpars2_22(22, Cat, Ss, Stack, T, Ts, Tzr).
|
||||
|
||||
-dialyzer({nowarn_function, yeccgoto_literal/7}).
|
||||
yeccgoto_literal(11=_S, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
yeccpars2_14(_S, Cat, Ss, Stack, T, Ts, Tzr).
|
||||
|
||||
-dialyzer({nowarn_function, yeccgoto_nonEmptyNtriplesDoc/7}).
|
||||
yeccgoto_nonEmptyNtriplesDoc(0=_S, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
yeccpars2_4(_S, Cat, Ss, Stack, T, Ts, Tzr);
|
||||
yeccgoto_nonEmptyNtriplesDoc(5=_S, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
yeccpars2_9(_S, Cat, Ss, Stack, T, Ts, Tzr);
|
||||
yeccgoto_nonEmptyNtriplesDoc(22=_S, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
yeccpars2_23(_S, Cat, Ss, Stack, T, Ts, Tzr).
|
||||
|
||||
-dialyzer({nowarn_function, yeccgoto_ntriplesDoc/7}).
|
||||
yeccgoto_ntriplesDoc(0, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
yeccpars2_3(3, Cat, Ss, Stack, T, Ts, Tzr).
|
||||
|
||||
-dialyzer({nowarn_function, yeccgoto_object/7}).
|
||||
yeccgoto_object(11, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
yeccpars2_13(13, Cat, Ss, Stack, T, Ts, Tzr).
|
||||
|
||||
-dialyzer({nowarn_function, yeccgoto_predicate/7}).
|
||||
yeccgoto_predicate(2, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
yeccpars2_11(11, Cat, Ss, Stack, T, Ts, Tzr).
|
||||
|
||||
-dialyzer({nowarn_function, yeccgoto_subject/7}).
|
||||
yeccgoto_subject(0, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
yeccpars2_2(2, Cat, Ss, Stack, T, Ts, Tzr);
|
||||
yeccgoto_subject(5, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
yeccpars2_2(2, Cat, Ss, Stack, T, Ts, Tzr);
|
||||
yeccgoto_subject(22, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
yeccpars2_2(2, Cat, Ss, Stack, T, Ts, Tzr).
|
||||
|
||||
-dialyzer({nowarn_function, yeccgoto_triple/7}).
|
||||
yeccgoto_triple(0, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
yeccpars2_1(1, Cat, Ss, Stack, T, Ts, Tzr);
|
||||
yeccgoto_triple(5, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
yeccpars2_1(1, Cat, Ss, Stack, T, Ts, Tzr);
|
||||
yeccgoto_triple(22, Cat, Ss, Stack, T, Ts, Tzr) ->
|
||||
yeccpars2_1(1, Cat, Ss, Stack, T, Ts, Tzr).
|
||||
|
||||
-compile({inline,yeccpars2_0_/1}).
|
||||
-file("src/ntriples_parser.yrl", 9).
|
||||
yeccpars2_0_(__Stack0) ->
|
||||
[begin
|
||||
[ ]
|
||||
end | __Stack0].
|
||||
|
||||
-compile({inline,yeccpars2_1_/1}).
|
||||
-file("src/ntriples_parser.yrl", 17).
|
||||
yeccpars2_1_(__Stack0) ->
|
||||
[__1 | __Stack] = __Stack0,
|
||||
[begin
|
||||
[ __1 ]
|
||||
end | __Stack].
|
||||
|
||||
-compile({inline,yeccpars2_4_/1}).
|
||||
-file("src/ntriples_parser.yrl", 6).
|
||||
yeccpars2_4_(__Stack0) ->
|
||||
[__1 | __Stack] = __Stack0,
|
||||
[begin
|
||||
[ __1 ]
|
||||
end | __Stack].
|
||||
|
||||
-compile({inline,yeccpars2_5_/1}).
|
||||
-file("src/ntriples_parser.yrl", 8).
|
||||
yeccpars2_5_(__Stack0) ->
|
||||
[__1 | __Stack] = __Stack0,
|
||||
[begin
|
||||
[ ]
|
||||
end | __Stack].
|
||||
|
||||
-compile({inline,yeccpars2_6_/1}).
|
||||
-file("src/ntriples_parser.yrl", 22).
|
||||
yeccpars2_6_(__Stack0) ->
|
||||
[__1 | __Stack] = __Stack0,
|
||||
[begin
|
||||
to_bnode ( __1 )
|
||||
end | __Stack].
|
||||
|
||||
-compile({inline,yeccpars2_7_/1}).
|
||||
-file("src/ntriples_parser.yrl", 0).
|
||||
yeccpars2_7_(__Stack0) ->
|
||||
[__1 | __Stack] = __Stack0,
|
||||
[begin
|
||||
'$undefined'
|
||||
end | __Stack].
|
||||
|
||||
-compile({inline,yeccpars2_8_/1}).
|
||||
-file("src/ntriples_parser.yrl", 21).
|
||||
yeccpars2_8_(__Stack0) ->
|
||||
[__1 | __Stack] = __Stack0,
|
||||
[begin
|
||||
to_uri ( __1 )
|
||||
end | __Stack].
|
||||
|
||||
-compile({inline,yeccpars2_9_/1}).
|
||||
-file("src/ntriples_parser.yrl", 7).
|
||||
yeccpars2_9_(__Stack0) ->
|
||||
[__2,__1 | __Stack] = __Stack0,
|
||||
[begin
|
||||
[ __2 ]
|
||||
end | __Stack].
|
||||
|
||||
-compile({inline,yeccpars2_10_/1}).
|
||||
-file("src/ntriples_parser.yrl", 0).
|
||||
yeccpars2_10_(__Stack0) ->
|
||||
[__2,__1 | __Stack] = __Stack0,
|
||||
[begin
|
||||
'$undefined'
|
||||
end | __Stack].
|
||||
|
||||
-compile({inline,yeccpars2_12_/1}).
|
||||
-file("src/ntriples_parser.yrl", 23).
|
||||
yeccpars2_12_(__Stack0) ->
|
||||
[__1 | __Stack] = __Stack0,
|
||||
[begin
|
||||
to_uri ( __1 )
|
||||
end | __Stack].
|
||||
|
||||
-compile({inline,yeccpars2_15_/1}).
|
||||
-file("src/ntriples_parser.yrl", 25).
|
||||
yeccpars2_15_(__Stack0) ->
|
||||
[__1 | __Stack] = __Stack0,
|
||||
[begin
|
||||
to_bnode ( __1 )
|
||||
end | __Stack].
|
||||
|
||||
-compile({inline,yeccpars2_16_/1}).
|
||||
-file("src/ntriples_parser.yrl", 24).
|
||||
yeccpars2_16_(__Stack0) ->
|
||||
[__1 | __Stack] = __Stack0,
|
||||
[begin
|
||||
to_uri ( __1 )
|
||||
end | __Stack].
|
||||
|
||||
-compile({inline,yeccpars2_17_/1}).
|
||||
-file("src/ntriples_parser.yrl", 30).
|
||||
yeccpars2_17_(__Stack0) ->
|
||||
[__1 | __Stack] = __Stack0,
|
||||
[begin
|
||||
to_literal ( __1 )
|
||||
end | __Stack].
|
||||
|
||||
-compile({inline,yeccpars2_19_/1}).
|
||||
-file("src/ntriples_parser.yrl", 29).
|
||||
yeccpars2_19_(__Stack0) ->
|
||||
[__2,__1 | __Stack] = __Stack0,
|
||||
[begin
|
||||
to_literal ( __1 , { language , to_langtag ( __2 ) } )
|
||||
end | __Stack].
|
||||
|
||||
-compile({inline,yeccpars2_20_/1}).
|
||||
-file("src/ntriples_parser.yrl", 28).
|
||||
yeccpars2_20_(__Stack0) ->
|
||||
[__3,__2,__1 | __Stack] = __Stack0,
|
||||
[begin
|
||||
to_literal ( __1 , { datatype , to_uri ( __3 ) } )
|
||||
end | __Stack].
|
||||
|
||||
-compile({inline,yeccpars2_21_/1}).
|
||||
-file("src/ntriples_parser.yrl", 19).
|
||||
yeccpars2_21_(__Stack0) ->
|
||||
[__4,__3,__2,__1 | __Stack] = __Stack0,
|
||||
[begin
|
||||
{ __1 , __2 , __3 }
|
||||
end | __Stack].
|
||||
|
||||
-compile({inline,yeccpars2_22_/1}).
|
||||
-file("src/ntriples_parser.yrl", 16).
|
||||
yeccpars2_22_(__Stack0) ->
|
||||
[__2,__1 | __Stack] = __Stack0,
|
||||
[begin
|
||||
[ __1 ]
|
||||
end | __Stack].
|
||||
|
||||
-compile({inline,yeccpars2_23_/1}).
|
||||
-file("src/ntriples_parser.yrl", 15).
|
||||
yeccpars2_23_(__Stack0) ->
|
||||
[__3,__2,__1 | __Stack] = __Stack0,
|
||||
[begin
|
||||
[ __1 | __3 ]
|
||||
end | __Stack].
|
||||
|
||||
|
||||
-file("src/ntriples_parser.yrl", 48).
|
47
src/ntriples_parser.yrl
Normal file
47
src/ntriples_parser.yrl
Normal file
|
@ -0,0 +1,47 @@
|
|||
%% Grammar for N-Triples as specified in https://www.w3.org/TR/2014/REC-n-triples-20140225/
|
||||
|
||||
Nonterminals ntriplesDoc nonEmptyNtriplesDoc triple subject predicate object literal eols.
|
||||
Terminals iriref blank_node_label string_literal_quote langtag '^^' '.' eol.
|
||||
Rootsymbol ntriplesDoc.
|
||||
|
||||
eols -> eols eol.
|
||||
eols -> eol.
|
||||
|
||||
ntriplesDoc -> nonEmptyNtriplesDoc : [ '$1'].
|
||||
ntriplesDoc -> eols nonEmptyNtriplesDoc : [ '$2'].
|
||||
ntriplesDoc -> eols : [].
|
||||
ntriplesDoc -> '$empty' : [].
|
||||
|
||||
%nonEmptyNtriplesDoc -> triple eol nonEmptyNtriplesDoc : [ '$1' | '$3' ].
|
||||
%nonEmptyNtriplesDoc -> triple eol : [ '$1' ].
|
||||
%nonEmptyNtriplesDoc -> triple : [ '$1' ].
|
||||
|
||||
nonEmptyNtriplesDoc -> triple eols nonEmptyNtriplesDoc : [ '$1' | '$3' ].
|
||||
nonEmptyNtriplesDoc -> triple eols : [ '$1' ].
|
||||
nonEmptyNtriplesDoc -> triple : [ '$1' ].
|
||||
|
||||
triple -> subject predicate object '.' : { '$1', '$2', '$3' }.
|
||||
|
||||
subject -> iriref : to_uri('$1').
|
||||
subject -> blank_node_label : to_bnode('$1').
|
||||
predicate -> iriref : to_uri('$1').
|
||||
object -> iriref : to_uri('$1').
|
||||
object -> blank_node_label : to_bnode('$1').
|
||||
object -> literal : '$1'.
|
||||
|
||||
literal -> string_literal_quote '^^' iriref : to_literal('$1', {datatype, to_uri('$3')}).
|
||||
literal -> string_literal_quote langtag : to_literal('$1', {language, to_langtag('$2')}).
|
||||
literal -> string_literal_quote : to_literal('$1').
|
||||
|
||||
|
||||
Erlang code.
|
||||
|
||||
to_uri(IRIREF) ->
|
||||
case 'Elixir.RDF.Reader.ParseHelper':to_uri(IRIREF) of
|
||||
{ok, URI} -> URI;
|
||||
{error, ErrorLine, Message} -> return_error(ErrorLine, Message)
|
||||
end.
|
||||
to_bnode(BLANK_NODE_LABEL) -> 'Elixir.RDF.Reader.ParseHelper':to_bnode(BLANK_NODE_LABEL).
|
||||
to_literal(STRING_LITERAL_QUOTE) -> 'Elixir.RDF.Reader.ParseHelper':to_literal(STRING_LITERAL_QUOTE).
|
||||
to_literal(STRING_LITERAL_QUOTE, Type) -> 'Elixir.RDF.Reader.ParseHelper':to_literal(STRING_LITERAL_QUOTE, Type).
|
||||
to_langtag(LANGTAG) -> 'Elixir.RDF.Reader.ParseHelper':to_langtag(LANGTAG).
|
25
test/data/N-TRIPLES-TESTS/README
Normal file
25
test/data/N-TRIPLES-TESTS/README
Normal file
|
@ -0,0 +1,25 @@
|
|||
This README is for the W3C RDF Working Group's N-Triples test suite.
|
||||
This test suite contains two kinds of tests:
|
||||
|
||||
Positive syntax (rdft:TestNTriplesPositiveSyntax) - an input N-Triples
|
||||
file with no syntax errors.
|
||||
|
||||
Negative syntax (rdft:TestNTriplesNegativeSyntax) - an input N-Triples
|
||||
file with at least one syntax error.
|
||||
|
||||
The manifest.ttl file in this directory lists tests in the
|
||||
RDF WG's N-Triples test suite. All
|
||||
tests have a name (mf:name) and an input (mf:action).
|
||||
|
||||
• An implementation passes a positive syntax test if it parses the
|
||||
input.
|
||||
|
||||
• An implementation passes a negative syntax test if it fails to parse
|
||||
the input.
|
||||
|
||||
The home of the test suite is <http://www.w3.org/2013/N-TriplesTests/>.
|
||||
|
||||
See http://www.w3.org/2011/rdf-wg/wiki/RDF_Test_Suites for more details.
|
||||
|
||||
Eric Prud'hommeaux <eric+turtle@w3.org> - 11 June 2013.
|
||||
Gregg Kellogg <gregg@greggkellogg.net> - 26 June 2013.
|
5
test/data/N-TRIPLES-TESTS/comment_following_triple.nt
Normal file
5
test/data/N-TRIPLES-TESTS/comment_following_triple.nt
Normal file
|
@ -0,0 +1,5 @@
|
|||
<http://example/s> <http://example/p> <http://example/o> . # comment
|
||||
<http://example/s> <http://example/p> _:o . # comment
|
||||
<http://example/s> <http://example/p> "o" . # comment
|
||||
<http://example/s> <http://example/p> "o"^^<http://example/dt> . # comment
|
||||
<http://example/s> <http://example/p> "o"@en . # comment
|
1
test/data/N-TRIPLES-TESTS/langtagged_string.nt
Normal file
1
test/data/N-TRIPLES-TESTS/langtagged_string.nt
Normal file
|
@ -0,0 +1 @@
|
|||
<http://a.example/s> <http://a.example/p> "chat"@en .
|
1
test/data/N-TRIPLES-TESTS/lantag_with_subtag.nt
Normal file
1
test/data/N-TRIPLES-TESTS/lantag_with_subtag.nt
Normal file
|
@ -0,0 +1 @@
|
|||
<http://example.org/ex#a> <http://example.org/ex#b> "Cheers"@en-UK .
|
1
test/data/N-TRIPLES-TESTS/literal.nt
Normal file
1
test/data/N-TRIPLES-TESTS/literal.nt
Normal file
|
@ -0,0 +1 @@
|
|||
<http://a.example/s> <http://a.example/p> "x" .
|
1
test/data/N-TRIPLES-TESTS/literal_all_controls.nt
Normal file
1
test/data/N-TRIPLES-TESTS/literal_all_controls.nt
Normal file
|
@ -0,0 +1 @@
|
|||
<http://a.example/s> <http://a.example/p> "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\t\u000B\u000C\u000E\u000F\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F" .
|
1
test/data/N-TRIPLES-TESTS/literal_all_punctuation.nt
Normal file
1
test/data/N-TRIPLES-TESTS/literal_all_punctuation.nt
Normal file
|
@ -0,0 +1 @@
|
|||
<http://a.example/s> <http://a.example/p> " !\"#$%&():;<=>?@[]^_`{|}~" .
|
BIN
test/data/N-TRIPLES-TESTS/literal_ascii_boundaries.nt
Normal file
BIN
test/data/N-TRIPLES-TESTS/literal_ascii_boundaries.nt
Normal file
Binary file not shown.
1
test/data/N-TRIPLES-TESTS/literal_false.nt
Normal file
1
test/data/N-TRIPLES-TESTS/literal_false.nt
Normal file
|
@ -0,0 +1 @@
|
|||
<http://a.example/s> <http://a.example/p> "false"^^<http://www.w3.org/2001/XMLSchema#boolean> .
|
1
test/data/N-TRIPLES-TESTS/literal_true.nt
Normal file
1
test/data/N-TRIPLES-TESTS/literal_true.nt
Normal file
|
@ -0,0 +1 @@
|
|||
<http://a.example/s> <http://a.example/p> "true"^^<http://www.w3.org/2001/XMLSchema#boolean> .
|
1
test/data/N-TRIPLES-TESTS/literal_with_2_dquotes.nt
Normal file
1
test/data/N-TRIPLES-TESTS/literal_with_2_dquotes.nt
Normal file
|
@ -0,0 +1 @@
|
|||
<http://a.example/s> <http://a.example/p> "x\"\"y" .
|
1
test/data/N-TRIPLES-TESTS/literal_with_2_squotes.nt
Normal file
1
test/data/N-TRIPLES-TESTS/literal_with_2_squotes.nt
Normal file
|
@ -0,0 +1 @@
|
|||
<http://a.example/s> <http://a.example/p> "x''y" .
|
1
test/data/N-TRIPLES-TESTS/literal_with_BACKSPACE.nt
Normal file
1
test/data/N-TRIPLES-TESTS/literal_with_BACKSPACE.nt
Normal file
|
@ -0,0 +1 @@
|
|||
<http://a.example/s> <http://a.example/p> "\b" .
|
|
@ -0,0 +1 @@
|
|||
<http://a.example/s> <http://a.example/p> "\r" .
|
|
@ -0,0 +1 @@
|
|||
<http://a.example/s> <http://a.example/p> "\t" .
|
1
test/data/N-TRIPLES-TESTS/literal_with_FORM_FEED.nt
Normal file
1
test/data/N-TRIPLES-TESTS/literal_with_FORM_FEED.nt
Normal file
|
@ -0,0 +1 @@
|
|||
<http://a.example/s> <http://a.example/p> "\f" .
|
1
test/data/N-TRIPLES-TESTS/literal_with_LINE_FEED.nt
Normal file
1
test/data/N-TRIPLES-TESTS/literal_with_LINE_FEED.nt
Normal file
|
@ -0,0 +1 @@
|
|||
<http://a.example/s> <http://a.example/p> "\n" .
|
|
@ -0,0 +1 @@
|
|||
<http://a.example/s> <http://a.example/p> "\\" .
|
|
@ -0,0 +1 @@
|
|||
<http://example.org/ns#s> <http://example.org/ns#p1> "test-\\" .
|
|
@ -0,0 +1 @@
|
|||
<http://a.example/s> <http://a.example/p> "߿ࠀက쿿퀀<ED9FBF>𐀀" .
|
1
test/data/N-TRIPLES-TESTS/literal_with_dquote.nt
Normal file
1
test/data/N-TRIPLES-TESTS/literal_with_dquote.nt
Normal file
|
@ -0,0 +1 @@
|
|||
<http://a.example/s> <http://a.example/p> "x\"y" .
|
|
@ -0,0 +1 @@
|
|||
<http://a.example/s> <http://a.example/p> "\u006F" .
|
|
@ -0,0 +1 @@
|
|||
<http://a.example/s> <http://a.example/p> "\U0000006F" .
|
1
test/data/N-TRIPLES-TESTS/literal_with_squote.nt
Normal file
1
test/data/N-TRIPLES-TESTS/literal_with_squote.nt
Normal file
|
@ -0,0 +1 @@
|
|||
<http://a.example/s> <http://a.example/p> "x'y" .
|
512
test/data/N-TRIPLES-TESTS/manifest.ttl
Normal file
512
test/data/N-TRIPLES-TESTS/manifest.ttl
Normal file
|
@ -0,0 +1,512 @@
|
|||
# N-Triples Syntax tests
|
||||
|
||||
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
|
||||
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
|
||||
@prefix mf: <http://www.w3.org/2001/sw/DataAccess/tests/test-manifest#> .
|
||||
@prefix qt: <http://www.w3.org/2001/sw/DataAccess/tests/test-query#> .
|
||||
|
||||
@prefix rdft: <http://www.w3.org/ns/rdftest#> .
|
||||
|
||||
<> rdf:type mf:Manifest ;
|
||||
mf:name "N-Triples tests" ;
|
||||
mf:entries
|
||||
(
|
||||
<#nt-syntax-file-01>
|
||||
<#nt-syntax-file-02>
|
||||
<#nt-syntax-file-03>
|
||||
<#nt-syntax-uri-01>
|
||||
<#nt-syntax-uri-02>
|
||||
<#nt-syntax-uri-03>
|
||||
<#nt-syntax-uri-04>
|
||||
<#nt-syntax-string-01>
|
||||
<#nt-syntax-string-02>
|
||||
<#nt-syntax-string-03>
|
||||
<#nt-syntax-str-esc-01>
|
||||
<#nt-syntax-str-esc-02>
|
||||
<#nt-syntax-str-esc-03>
|
||||
<#nt-syntax-bnode-01>
|
||||
<#nt-syntax-bnode-02>
|
||||
<#nt-syntax-bnode-03>
|
||||
<#nt-syntax-datatypes-01>
|
||||
<#nt-syntax-datatypes-02>
|
||||
<#nt-syntax-bad-uri-01>
|
||||
<#nt-syntax-bad-uri-02>
|
||||
<#nt-syntax-bad-uri-03>
|
||||
<#nt-syntax-bad-uri-04>
|
||||
<#nt-syntax-bad-uri-05>
|
||||
<#nt-syntax-bad-uri-06>
|
||||
<#nt-syntax-bad-uri-07>
|
||||
<#nt-syntax-bad-uri-08>
|
||||
<#nt-syntax-bad-uri-09>
|
||||
<#nt-syntax-bad-prefix-01>
|
||||
<#nt-syntax-bad-base-01>
|
||||
<#nt-syntax-bad-struct-01>
|
||||
<#nt-syntax-bad-struct-02>
|
||||
<#nt-syntax-bad-lang-01>
|
||||
<#nt-syntax-bad-esc-01>
|
||||
<#nt-syntax-bad-esc-02>
|
||||
<#nt-syntax-bad-esc-03>
|
||||
<#nt-syntax-bad-string-01>
|
||||
<#nt-syntax-bad-string-02>
|
||||
<#nt-syntax-bad-string-03>
|
||||
<#nt-syntax-bad-string-04>
|
||||
<#nt-syntax-bad-string-05>
|
||||
<#nt-syntax-bad-string-06>
|
||||
<#nt-syntax-bad-string-07>
|
||||
<#nt-syntax-bad-num-01>
|
||||
<#nt-syntax-bad-num-02>
|
||||
<#nt-syntax-bad-num-03>
|
||||
<#nt-syntax-subm-01>
|
||||
<#comment_following_triple>
|
||||
<#literal>
|
||||
<#literal_all_controls>
|
||||
<#literal_all_punctuation>
|
||||
<#literal_ascii_boundaries>
|
||||
<#literal_with_2_dquotes>
|
||||
<#literal_with_2_squotes>
|
||||
<#literal_with_BACKSPACE>
|
||||
<#literal_with_CARRIAGE_RETURN>
|
||||
<#literal_with_CHARACTER_TABULATION>
|
||||
<#literal_with_dquote>
|
||||
<#literal_with_FORM_FEED>
|
||||
<#literal_with_LINE_FEED>
|
||||
<#literal_with_numeric_escape4>
|
||||
<#literal_with_numeric_escape8>
|
||||
<#literal_with_REVERSE_SOLIDUS>
|
||||
<#literal_with_REVERSE_SOLIDUS2>
|
||||
<#literal_with_squote>
|
||||
<#literal_with_UTF8_boundaries>
|
||||
<#langtagged_string>
|
||||
<#lantag_with_subtag>
|
||||
<#minimal_whitespace>
|
||||
) .
|
||||
|
||||
<#nt-syntax-file-01> rdf:type rdft:TestNTriplesPositiveSyntax ;
|
||||
mf:name "nt-syntax-file-01" ;
|
||||
rdfs:comment "Empty file" ;
|
||||
mf:action <nt-syntax-file-01.nt> ;
|
||||
.
|
||||
|
||||
<#nt-syntax-file-02> rdf:type rdft:TestNTriplesPositiveSyntax ;
|
||||
mf:name "nt-syntax-file-02" ;
|
||||
rdfs:comment "Only comment" ;
|
||||
mf:action <nt-syntax-file-02.nt> ;
|
||||
.
|
||||
|
||||
<#nt-syntax-file-03> rdf:type rdft:TestNTriplesPositiveSyntax ;
|
||||
mf:name "nt-syntax-file-03" ;
|
||||
rdfs:comment "One comment, one empty line" ;
|
||||
mf:action <nt-syntax-file-03.nt> ;
|
||||
.
|
||||
|
||||
<#nt-syntax-uri-01> rdf:type rdft:TestNTriplesPositiveSyntax ;
|
||||
mf:name "nt-syntax-uri-01" ;
|
||||
rdfs:comment "Only IRIs" ;
|
||||
mf:action <nt-syntax-uri-01.nt> ;
|
||||
.
|
||||
|
||||
<#nt-syntax-uri-02> rdf:type rdft:TestNTriplesPositiveSyntax ;
|
||||
mf:name "nt-syntax-uri-02" ;
|
||||
rdfs:comment "IRIs with Unicode escape" ;
|
||||
mf:action <nt-syntax-uri-02.nt> ;
|
||||
.
|
||||
|
||||
<#nt-syntax-uri-03> rdf:type rdft:TestNTriplesPositiveSyntax ;
|
||||
mf:name "nt-syntax-uri-03" ;
|
||||
rdfs:comment "IRIs with long Unicode escape" ;
|
||||
mf:action <nt-syntax-uri-03.nt> ;
|
||||
.
|
||||
|
||||
<#nt-syntax-uri-04> rdf:type rdft:TestNTriplesPositiveSyntax ;
|
||||
mf:name "nt-syntax-uri-04" ;
|
||||
rdfs:comment "Legal IRIs" ;
|
||||
mf:action <nt-syntax-uri-04.nt> ;
|
||||
.
|
||||
|
||||
<#nt-syntax-string-01> rdf:type rdft:TestNTriplesPositiveSyntax ;
|
||||
mf:name "nt-syntax-string-01" ;
|
||||
rdfs:comment "string literal" ;
|
||||
mf:action <nt-syntax-string-01.nt> ;
|
||||
.
|
||||
|
||||
<#nt-syntax-string-02> rdf:type rdft:TestNTriplesPositiveSyntax ;
|
||||
mf:name "nt-syntax-string-02" ;
|
||||
rdfs:comment "langString literal" ;
|
||||
mf:action <nt-syntax-string-02.nt> ;
|
||||
.
|
||||
|
||||
<#nt-syntax-string-03> rdf:type rdft:TestNTriplesPositiveSyntax ;
|
||||
mf:name "nt-syntax-string-03" ;
|
||||
rdfs:comment "langString literal with region" ;
|
||||
mf:action <nt-syntax-string-03.nt> ;
|
||||
.
|
||||
|
||||
<#nt-syntax-str-esc-01> rdf:type rdft:TestNTriplesPositiveSyntax ;
|
||||
mf:name "nt-syntax-str-esc-01" ;
|
||||
rdfs:comment "string literal with escaped newline" ;
|
||||
mf:action <nt-syntax-str-esc-01.nt> ;
|
||||
.
|
||||
|
||||
<#nt-syntax-str-esc-02> rdf:type rdft:TestNTriplesPositiveSyntax ;
|
||||
mf:name "nt-syntax-str-esc-02" ;
|
||||
rdfs:comment "string literal with Unicode escape" ;
|
||||
mf:action <nt-syntax-str-esc-02.nt> ;
|
||||
.
|
||||
|
||||
<#nt-syntax-str-esc-03> rdf:type rdft:TestNTriplesPositiveSyntax ;
|
||||
mf:name "nt-syntax-str-esc-03" ;
|
||||
rdfs:comment "string literal with long Unicode escape" ;
|
||||
mf:action <nt-syntax-str-esc-03.nt> ;
|
||||
.
|
||||
|
||||
<#nt-syntax-bnode-01> rdf:type rdft:TestNTriplesPositiveSyntax ;
|
||||
mf:name "nt-syntax-bnode-01" ;
|
||||
rdfs:comment "bnode subject" ;
|
||||
mf:action <nt-syntax-bnode-01.nt> ;
|
||||
.
|
||||
|
||||
<#nt-syntax-bnode-02> rdf:type rdft:TestNTriplesPositiveSyntax ;
|
||||
mf:name "nt-syntax-bnode-02" ;
|
||||
rdfs:comment "bnode object" ;
|
||||
mf:action <nt-syntax-bnode-02.nt> ;
|
||||
.
|
||||
|
||||
<#nt-syntax-bnode-03> rdf:type rdft:TestNTriplesPositiveSyntax ;
|
||||
mf:name "nt-syntax-bnode-03" ;
|
||||
rdfs:comment "Blank node labels may start with a digit" ;
|
||||
mf:action <nt-syntax-bnode-03.nt> ;
|
||||
.
|
||||
|
||||
<#nt-syntax-datatypes-01> rdf:type rdft:TestNTriplesPositiveSyntax ;
|
||||
mf:name "nt-syntax-datatypes-01" ;
|
||||
rdfs:comment "xsd:byte literal" ;
|
||||
mf:action <nt-syntax-datatypes-01.nt> ;
|
||||
.
|
||||
|
||||
<#nt-syntax-datatypes-02> rdf:type rdft:TestNTriplesPositiveSyntax ;
|
||||
mf:name "nt-syntax-datatypes-02" ;
|
||||
rdfs:comment "integer as xsd:string" ;
|
||||
mf:action <nt-syntax-datatypes-02.nt> ;
|
||||
.
|
||||
|
||||
<#nt-syntax-bad-uri-01> rdf:type rdft:TestNTriplesNegativeSyntax ;
|
||||
mf:name "nt-syntax-bad-uri-01" ;
|
||||
rdfs:comment "Bad IRI : space (negative test)" ;
|
||||
mf:action <nt-syntax-bad-uri-01.nt> ;
|
||||
.
|
||||
|
||||
<#nt-syntax-bad-uri-02> rdf:type rdft:TestNTriplesNegativeSyntax ;
|
||||
mf:name "nt-syntax-bad-uri-02" ;
|
||||
rdfs:comment "Bad IRI : bad escape (negative test)" ;
|
||||
mf:action <nt-syntax-bad-uri-02.nt> ;
|
||||
.
|
||||
|
||||
<#nt-syntax-bad-uri-03> rdf:type rdft:TestNTriplesNegativeSyntax ;
|
||||
mf:name "nt-syntax-bad-uri-03" ;
|
||||
rdfs:comment "Bad IRI : bad long escape (negative test)" ;
|
||||
mf:action <nt-syntax-bad-uri-03.nt> ;
|
||||
.
|
||||
|
||||
<#nt-syntax-bad-uri-04> rdf:type rdft:TestNTriplesNegativeSyntax ;
|
||||
mf:name "nt-syntax-bad-uri-04" ;
|
||||
rdfs:comment "Bad IRI : character escapes not allowed (negative test)" ;
|
||||
mf:action <nt-syntax-bad-uri-04.nt> ;
|
||||
.
|
||||
|
||||
<#nt-syntax-bad-uri-05> rdf:type rdft:TestNTriplesNegativeSyntax ;
|
||||
mf:name "nt-syntax-bad-uri-05" ;
|
||||
rdfs:comment "Bad IRI : character escapes not allowed (2) (negative test)" ;
|
||||
mf:action <nt-syntax-bad-uri-05.nt> ;
|
||||
.
|
||||
|
||||
<#nt-syntax-bad-uri-06> rdf:type rdft:TestNTriplesNegativeSyntax ;
|
||||
mf:name "nt-syntax-bad-uri-06" ;
|
||||
rdfs:comment "Bad IRI : relative IRI not allowed in subject (negative test)" ;
|
||||
mf:action <nt-syntax-bad-uri-06.nt> ;
|
||||
.
|
||||
|
||||
<#nt-syntax-bad-uri-07> rdf:type rdft:TestNTriplesNegativeSyntax ;
|
||||
mf:name "nt-syntax-bad-uri-07" ;
|
||||
rdfs:comment "Bad IRI : relative IRI not allowed in predicate (negative test)" ;
|
||||
mf:action <nt-syntax-bad-uri-07.nt> ;
|
||||
.
|
||||
|
||||
<#nt-syntax-bad-uri-08> rdf:type rdft:TestNTriplesNegativeSyntax ;
|
||||
mf:name "nt-syntax-bad-uri-08" ;
|
||||
rdfs:comment "Bad IRI : relative IRI not allowed in object (negative test)" ;
|
||||
mf:action <nt-syntax-bad-uri-08.nt> ;
|
||||
.
|
||||
|
||||
<#nt-syntax-bad-uri-09> rdf:type rdft:TestNTriplesNegativeSyntax ;
|
||||
mf:name "nt-syntax-bad-uri-09" ;
|
||||
rdfs:comment "Bad IRI : relative IRI not allowed in datatype (negative test)" ;
|
||||
mf:action <nt-syntax-bad-uri-09.nt> ;
|
||||
.
|
||||
|
||||
<#nt-syntax-bad-prefix-01> rdf:type rdft:TestNTriplesNegativeSyntax ;
|
||||
mf:name "nt-syntax-bad-prefix-01" ;
|
||||
rdfs:comment "@prefix not allowed in n-triples (negative test)" ;
|
||||
mf:action <nt-syntax-bad-prefix-01.nt> ;
|
||||
.
|
||||
|
||||
<#nt-syntax-bad-base-01> rdf:type rdft:TestNTriplesNegativeSyntax ;
|
||||
mf:name "nt-syntax-bad-base-01" ;
|
||||
rdfs:comment "@base not allowed in N-Triples (negative test)" ;
|
||||
mf:action <nt-syntax-bad-base-01.nt> ;
|
||||
.
|
||||
|
||||
<#nt-syntax-bad-struct-01> rdf:type rdft:TestNTriplesNegativeSyntax ;
|
||||
mf:name "nt-syntax-bad-struct-01" ;
|
||||
rdfs:comment "N-Triples does not have objectList (negative test)" ;
|
||||
mf:action <nt-syntax-bad-struct-01.nt> ;
|
||||
.
|
||||
|
||||
<#nt-syntax-bad-struct-02> rdf:type rdft:TestNTriplesNegativeSyntax ;
|
||||
mf:name "nt-syntax-bad-struct-02" ;
|
||||
rdfs:comment "N-Triples does not have predicateObjectList (negative test)" ;
|
||||
mf:action <nt-syntax-bad-struct-02.nt> ;
|
||||
.
|
||||
|
||||
<#nt-syntax-bad-lang-01> rdf:type rdft:TestNTriplesNegativeSyntax ;
|
||||
mf:name "nt-syntax-bad-lang-01" ;
|
||||
rdfs:comment "langString with bad lang (negative test)" ;
|
||||
mf:action <nt-syntax-bad-lang-01.nt> ;
|
||||
.
|
||||
|
||||
<#nt-syntax-bad-esc-01> rdf:type rdft:TestNTriplesNegativeSyntax ;
|
||||
mf:name "nt-syntax-bad-esc-01" ;
|
||||
rdfs:comment "Bad string escape (negative test)" ;
|
||||
mf:action <nt-syntax-bad-esc-01.nt> ;
|
||||
.
|
||||
|
||||
<#nt-syntax-bad-esc-02> rdf:type rdft:TestNTriplesNegativeSyntax ;
|
||||
mf:name "nt-syntax-bad-esc-02" ;
|
||||
rdfs:comment "Bad string escape (negative test)" ;
|
||||
mf:action <nt-syntax-bad-esc-02.nt> ;
|
||||
.
|
||||
|
||||
<#nt-syntax-bad-esc-03> rdf:type rdft:TestNTriplesNegativeSyntax ;
|
||||
mf:name "nt-syntax-bad-esc-03" ;
|
||||
rdfs:comment "Bad string escape (negative test)" ;
|
||||
mf:action <nt-syntax-bad-esc-03.nt> ;
|
||||
.
|
||||
|
||||
<#nt-syntax-bad-string-01> rdf:type rdft:TestNTriplesNegativeSyntax ;
|
||||
mf:name "nt-syntax-bad-string-01" ;
|
||||
rdfs:comment "mismatching string literal open/close (negative test)" ;
|
||||
mf:action <nt-syntax-bad-string-01.nt> ;
|
||||
.
|
||||
|
||||
<#nt-syntax-bad-string-02> rdf:type rdft:TestNTriplesNegativeSyntax ;
|
||||
mf:name "nt-syntax-bad-string-02" ;
|
||||
rdfs:comment "mismatching string literal open/close (negative test)" ;
|
||||
mf:action <nt-syntax-bad-string-02.nt> ;
|
||||
.
|
||||
|
||||
<#nt-syntax-bad-string-03> rdf:type rdft:TestNTriplesNegativeSyntax ;
|
||||
mf:name "nt-syntax-bad-string-03" ;
|
||||
rdfs:comment "single quotes (negative test)" ;
|
||||
mf:action <nt-syntax-bad-string-03.nt> ;
|
||||
.
|
||||
|
||||
<#nt-syntax-bad-string-04> rdf:type rdft:TestNTriplesNegativeSyntax ;
|
||||
mf:name "nt-syntax-bad-string-04" ;
|
||||
rdfs:comment "long single string literal (negative test)" ;
|
||||
mf:action <nt-syntax-bad-string-04.nt> ;
|
||||
.
|
||||
|
||||
<#nt-syntax-bad-string-05> rdf:type rdft:TestNTriplesNegativeSyntax ;
|
||||
mf:name "nt-syntax-bad-string-05" ;
|
||||
rdfs:comment "long double string literal (negative test)" ;
|
||||
mf:action <nt-syntax-bad-string-05.nt> ;
|
||||
.
|
||||
|
||||
<#nt-syntax-bad-string-06> rdf:type rdft:TestNTriplesNegativeSyntax ;
|
||||
mf:name "nt-syntax-bad-string-06" ;
|
||||
rdfs:comment "string literal with no end (negative test)" ;
|
||||
mf:action <nt-syntax-bad-string-06.nt> ;
|
||||
.
|
||||
|
||||
<#nt-syntax-bad-string-07> rdf:type rdft:TestNTriplesNegativeSyntax ;
|
||||
mf:name "nt-syntax-bad-string-07" ;
|
||||
rdfs:comment "string literal with no start (negative test)" ;
|
||||
mf:action <nt-syntax-bad-string-07.nt> ;
|
||||
.
|
||||
|
||||
<#nt-syntax-bad-num-01> rdf:type rdft:TestNTriplesNegativeSyntax ;
|
||||
mf:name "nt-syntax-bad-num-01" ;
|
||||
rdfs:comment "no numbers in N-Triples (integer) (negative test)" ;
|
||||
mf:action <nt-syntax-bad-num-01.nt> ;
|
||||
.
|
||||
|
||||
<#nt-syntax-bad-num-02> rdf:type rdft:TestNTriplesNegativeSyntax ;
|
||||
mf:name "nt-syntax-bad-num-02" ;
|
||||
rdfs:comment "no numbers in N-Triples (decimal) (negative test)" ;
|
||||
mf:action <nt-syntax-bad-num-02.nt> ;
|
||||
.
|
||||
|
||||
<#nt-syntax-bad-num-03> rdf:type rdft:TestNTriplesNegativeSyntax ;
|
||||
mf:name "nt-syntax-bad-num-03" ;
|
||||
rdfs:comment "no numbers in N-Triples (float) (negative test)" ;
|
||||
mf:action <nt-syntax-bad-num-03.nt> ;
|
||||
.
|
||||
|
||||
<#nt-syntax-subm-01> rdf:type rdft:TestNTriplesPositiveSyntax ;
|
||||
mf:name "nt-syntax-subm-01" ;
|
||||
rdfs:comment "Submission test from Original RDF Test Cases" ;
|
||||
mf:action <nt-syntax-subm-01.nt> ;
|
||||
.
|
||||
|
||||
<#comment_following_triple> rdf:type rdft:TestNTriplesPositiveSyntax ;
|
||||
mf:name "comment_following_triple" ;
|
||||
rdfs:comment "Tests comments after a triple" ;
|
||||
rdft:approval rdft:Proposed ;
|
||||
mf:action <comment_following_triple.nt> ;
|
||||
.
|
||||
|
||||
<#literal_ascii_boundaries> rdf:type rdft:TestNTriplesPositiveSyntax ;
|
||||
mf:name "literal_ascii_boundaries" ;
|
||||
rdfs:comment "literal_ascii_boundaries '\\x00\\x26\\x28...'" ;
|
||||
rdft:approval rdft:Proposed ;
|
||||
mf:action <literal_ascii_boundaries.nt> ;
|
||||
.
|
||||
|
||||
<#literal_with_UTF8_boundaries> rdf:type rdft:TestNTriplesPositiveSyntax ;
|
||||
mf:name "literal_with_UTF8_boundaries" ;
|
||||
rdfs:comment "literal_with_UTF8_boundaries '\\x80\\x7ff\\x800\\xfff...'" ;
|
||||
rdft:approval rdft:Proposed ;
|
||||
mf:action <literal_with_UTF8_boundaries.nt> ;
|
||||
.
|
||||
|
||||
<#literal_all_controls> rdf:type rdft:TestNTriplesPositiveSyntax ;
|
||||
mf:name "literal_all_controls" ;
|
||||
rdfs:comment "literal_all_controls '\\x00\\x01\\x02\\x03\\x04...'" ;
|
||||
rdft:approval rdft:Approved ;
|
||||
mf:action <literal_all_controls.nt> ;
|
||||
.
|
||||
|
||||
<#literal_all_punctuation> rdf:type rdft:TestNTriplesPositiveSyntax ;
|
||||
mf:name "literal_all_punctuation" ;
|
||||
rdfs:comment "literal_all_punctuation '!\"#$%&()...'" ;
|
||||
rdft:approval rdft:Approved ;
|
||||
mf:action <literal_all_punctuation.nt> ;
|
||||
.
|
||||
|
||||
<#literal_with_squote> rdf:type rdft:TestNTriplesPositiveSyntax ;
|
||||
mf:name "literal_with_squote" ;
|
||||
rdfs:comment "literal with squote \"x'y\"" ;
|
||||
rdft:approval rdft:Proposed ;
|
||||
mf:action <literal_with_squote.nt> ;
|
||||
.
|
||||
|
||||
<#literal_with_2_squotes> rdf:type rdft:TestNTriplesPositiveSyntax ;
|
||||
mf:name "literal_with_2_squotes" ;
|
||||
rdfs:comment "literal with 2 squotes \"x''y\"" ;
|
||||
rdft:approval rdft:Proposed ;
|
||||
mf:action <literal_with_2_squotes.nt> ;
|
||||
.
|
||||
|
||||
<#literal> rdf:type rdft:TestNTriplesPositiveSyntax ;
|
||||
mf:name "literal" ;
|
||||
rdfs:comment "literal \"\"\"x\"\"\"" ;
|
||||
rdft:approval rdft:Proposed ;
|
||||
mf:action <literal.nt> ;
|
||||
.
|
||||
|
||||
<#literal_with_dquote> rdf:type rdft:TestNTriplesPositiveSyntax ;
|
||||
mf:name "literal_with_dquote" ;
|
||||
rdfs:comment 'literal with dquote "x\"y"' ;
|
||||
rdft:approval rdft:Proposed ;
|
||||
mf:action <literal_with_dquote.nt> ;
|
||||
.
|
||||
|
||||
<#literal_with_2_dquotes> rdf:type rdft:TestNTriplesPositiveSyntax ;
|
||||
mf:name "literal_with_2_dquotes" ;
|
||||
rdfs:comment "literal with 2 squotes \"\"\"a\"\"b\"\"\"" ;
|
||||
rdft:approval rdft:Proposed ;
|
||||
mf:action <literal_with_2_dquotes.nt> ;
|
||||
.
|
||||
|
||||
<#literal_with_REVERSE_SOLIDUS2> rdf:type rdft:TestNTriplesPositiveSyntax ;
|
||||
mf:name "literal_with_REVERSE_SOLIDUS2" ;
|
||||
rdfs:comment "REVERSE SOLIDUS at end of literal" ;
|
||||
rdft:approval rdft:Proposed ;
|
||||
mf:action <literal_with_REVERSE_SOLIDUS2.nt> ;
|
||||
.
|
||||
|
||||
<#literal_with_CHARACTER_TABULATION> rdf:type rdft:TestNTriplesPositiveSyntax ;
|
||||
mf:name "literal_with_CHARACTER_TABULATION" ;
|
||||
rdfs:comment "literal with CHARACTER TABULATION" ;
|
||||
rdft:approval rdft:Proposed ;
|
||||
mf:action <literal_with_CHARACTER_TABULATION.nt> ;
|
||||
.
|
||||
|
||||
<#literal_with_BACKSPACE> rdf:type rdft:TestNTriplesPositiveSyntax ;
|
||||
mf:name "literal_with_BACKSPACE" ;
|
||||
rdfs:comment "literal with BACKSPACE" ;
|
||||
rdft:approval rdft:Proposed ;
|
||||
mf:action <literal_with_BACKSPACE.nt> ;
|
||||
.
|
||||
|
||||
<#literal_with_LINE_FEED> rdf:type rdft:TestNTriplesPositiveSyntax ;
|
||||
mf:name "literal_with_LINE_FEED" ;
|
||||
rdfs:comment "literal with LINE FEED" ;
|
||||
rdft:approval rdft:Proposed ;
|
||||
mf:action <literal_with_LINE_FEED.nt> ;
|
||||
.
|
||||
|
||||
<#literal_with_CARRIAGE_RETURN> rdf:type rdft:TestNTriplesPositiveSyntax ;
|
||||
mf:name "literal_with_CARRIAGE_RETURN" ;
|
||||
rdfs:comment "literal with CARRIAGE RETURN" ;
|
||||
rdft:approval rdft:Proposed ;
|
||||
mf:action <literal_with_CARRIAGE_RETURN.nt> ;
|
||||
.
|
||||
|
||||
<#literal_with_FORM_FEED> rdf:type rdft:TestNTriplesPositiveSyntax ;
|
||||
mf:name "literal_with_FORM_FEED" ;
|
||||
rdfs:comment "literal with FORM FEED" ;
|
||||
rdft:approval rdft:Proposed ;
|
||||
mf:action <literal_with_FORM_FEED.nt> ;
|
||||
.
|
||||
|
||||
<#literal_with_REVERSE_SOLIDUS> rdf:type rdft:TestNTriplesPositiveSyntax ;
|
||||
mf:name "literal_with_REVERSE_SOLIDUS" ;
|
||||
rdfs:comment "literal with REVERSE SOLIDUS" ;
|
||||
rdft:approval rdft:Proposed ;
|
||||
mf:action <literal_with_REVERSE_SOLIDUS.nt> ;
|
||||
.
|
||||
|
||||
<#literal_with_numeric_escape4> rdf:type rdft:TestNTriplesPositiveSyntax ;
|
||||
mf:name "literal_with_numeric_escape4" ;
|
||||
rdfs:comment "literal with numeric escape4 \\u" ;
|
||||
rdft:approval rdft:Proposed ;
|
||||
mf:action <literal_with_numeric_escape4.nt> ;
|
||||
.
|
||||
|
||||
<#literal_with_numeric_escape8> rdf:type rdft:TestNTriplesPositiveSyntax ;
|
||||
mf:name "literal_with_numeric_escape8" ;
|
||||
rdfs:comment "literal with numeric escape8 \\U" ;
|
||||
rdft:approval rdft:Proposed ;
|
||||
mf:action <literal_with_numeric_escape8.nt> ;
|
||||
.
|
||||
|
||||
<#langtagged_string> rdf:type rdft:TestNTriplesPositiveSyntax ;
|
||||
mf:name "langtagged_string" ;
|
||||
rdfs:comment "langtagged string \"x\"@en" ;
|
||||
rdft:approval rdft:Proposed ;
|
||||
mf:action <langtagged_string.nt> ;
|
||||
.
|
||||
|
||||
<#lantag_with_subtag> rdf:type rdft:TestNTriplesPositiveSyntax ;
|
||||
mf:name "lantag_with_subtag" ;
|
||||
rdfs:comment "lantag with subtag \"x\"@en-us" ;
|
||||
rdft:approval rdft:Proposed ;
|
||||
mf:action <lantag_with_subtag.nt> ;
|
||||
.
|
||||
|
||||
<#minimal_whitespace> rdf:type rdft:TestNTriplesPositiveSyntax ;
|
||||
mf:name "minimal_whitespace" ;
|
||||
rdfs:comment "tests absense of whitespace between subject, predicate, object and end-of-statement" ;
|
||||
rdft:approval rdft:Proposed ;
|
||||
mf:action <minimal_whitespace.nt> ;
|
||||
.
|
6
test/data/N-TRIPLES-TESTS/minimal_whitespace.nt
Normal file
6
test/data/N-TRIPLES-TESTS/minimal_whitespace.nt
Normal file
|
@ -0,0 +1,6 @@
|
|||
<http://example/s><http://example/p><http://example/o>.
|
||||
<http://example/s><http://example/p>"Alice".
|
||||
<http://example/s><http://example/p>_:o.
|
||||
_:s<http://example/p><http://example/o>.
|
||||
_:s<http://example/p>"Alice".
|
||||
_:s<http://example/p>_:bnode1.
|
1
test/data/N-TRIPLES-TESTS/nt-syntax-bad-base-01.nt
Normal file
1
test/data/N-TRIPLES-TESTS/nt-syntax-bad-base-01.nt
Normal file
|
@ -0,0 +1 @@
|
|||
@base <http://example/> .
|
2
test/data/N-TRIPLES-TESTS/nt-syntax-bad-esc-01.nt
Normal file
2
test/data/N-TRIPLES-TESTS/nt-syntax-bad-esc-01.nt
Normal file
|
@ -0,0 +1,2 @@
|
|||
# Bad string escape
|
||||
<http://example/s> <http://example/p> "a\zb" .
|
2
test/data/N-TRIPLES-TESTS/nt-syntax-bad-esc-02.nt
Normal file
2
test/data/N-TRIPLES-TESTS/nt-syntax-bad-esc-02.nt
Normal file
|
@ -0,0 +1,2 @@
|
|||
# Bad string escape
|
||||
<http://example/s> <http://example/p> "\uWXYZ" .
|
2
test/data/N-TRIPLES-TESTS/nt-syntax-bad-esc-03.nt
Normal file
2
test/data/N-TRIPLES-TESTS/nt-syntax-bad-esc-03.nt
Normal file
|
@ -0,0 +1,2 @@
|
|||
# Bad string escape
|
||||
<http://example/s> <http://example/p> "\U0000WXYZ" .
|
2
test/data/N-TRIPLES-TESTS/nt-syntax-bad-lang-01.nt
Normal file
2
test/data/N-TRIPLES-TESTS/nt-syntax-bad-lang-01.nt
Normal file
|
@ -0,0 +1,2 @@
|
|||
# Bad lang tag
|
||||
<http://example/s> <http://example/p> "string"@1 .
|
1
test/data/N-TRIPLES-TESTS/nt-syntax-bad-num-01.nt
Normal file
1
test/data/N-TRIPLES-TESTS/nt-syntax-bad-num-01.nt
Normal file
|
@ -0,0 +1 @@
|
|||
<http://example/s> <http://example/p> 1 .
|
1
test/data/N-TRIPLES-TESTS/nt-syntax-bad-num-02.nt
Normal file
1
test/data/N-TRIPLES-TESTS/nt-syntax-bad-num-02.nt
Normal file
|
@ -0,0 +1 @@
|
|||
<http://example/s> <http://example/p> 1.0 .
|
1
test/data/N-TRIPLES-TESTS/nt-syntax-bad-num-03.nt
Normal file
1
test/data/N-TRIPLES-TESTS/nt-syntax-bad-num-03.nt
Normal file
|
@ -0,0 +1 @@
|
|||
<http://example/s> <http://example/p> 1.0e0 .
|
1
test/data/N-TRIPLES-TESTS/nt-syntax-bad-prefix-01.nt
Normal file
1
test/data/N-TRIPLES-TESTS/nt-syntax-bad-prefix-01.nt
Normal file
|
@ -0,0 +1 @@
|
|||
@prefix : <http://example/> .
|
1
test/data/N-TRIPLES-TESTS/nt-syntax-bad-string-01.nt
Normal file
1
test/data/N-TRIPLES-TESTS/nt-syntax-bad-string-01.nt
Normal file
|
@ -0,0 +1 @@
|
|||
<http://example/s> <http://example/p> "abc' .
|
1
test/data/N-TRIPLES-TESTS/nt-syntax-bad-string-02.nt
Normal file
1
test/data/N-TRIPLES-TESTS/nt-syntax-bad-string-02.nt
Normal file
|
@ -0,0 +1 @@
|
|||
<http://example/s> <http://example/p> 1.0 .
|
1
test/data/N-TRIPLES-TESTS/nt-syntax-bad-string-03.nt
Normal file
1
test/data/N-TRIPLES-TESTS/nt-syntax-bad-string-03.nt
Normal file
|
@ -0,0 +1 @@
|
|||
<http://example/s> <http://example/p> 1.0e1 .
|
1
test/data/N-TRIPLES-TESTS/nt-syntax-bad-string-04.nt
Normal file
1
test/data/N-TRIPLES-TESTS/nt-syntax-bad-string-04.nt
Normal file
|
@ -0,0 +1 @@
|
|||
<http://example/s> <http://example/p> '''abc''' .
|
1
test/data/N-TRIPLES-TESTS/nt-syntax-bad-string-05.nt
Normal file
1
test/data/N-TRIPLES-TESTS/nt-syntax-bad-string-05.nt
Normal file
|
@ -0,0 +1 @@
|
|||
<http://example/s> <http://example/p> """abc""" .
|
1
test/data/N-TRIPLES-TESTS/nt-syntax-bad-string-06.nt
Normal file
1
test/data/N-TRIPLES-TESTS/nt-syntax-bad-string-06.nt
Normal file
|
@ -0,0 +1 @@
|
|||
<http://example/s> <http://example/p> "abc .
|
1
test/data/N-TRIPLES-TESTS/nt-syntax-bad-string-07.nt
Normal file
1
test/data/N-TRIPLES-TESTS/nt-syntax-bad-string-07.nt
Normal file
|
@ -0,0 +1 @@
|
|||
<http://example/s> <http://example/p> abc" .
|
1
test/data/N-TRIPLES-TESTS/nt-syntax-bad-struct-01.nt
Normal file
1
test/data/N-TRIPLES-TESTS/nt-syntax-bad-struct-01.nt
Normal file
|
@ -0,0 +1 @@
|
|||
<http://example/s> <http://example/p> <http://example/o>, <http://example/o2> .
|
1
test/data/N-TRIPLES-TESTS/nt-syntax-bad-struct-02.nt
Normal file
1
test/data/N-TRIPLES-TESTS/nt-syntax-bad-struct-02.nt
Normal file
|
@ -0,0 +1 @@
|
|||
<http://example/s> <http://example/p> <http://example/o>; <http://example/p2>, <http://example/o2> .
|
2
test/data/N-TRIPLES-TESTS/nt-syntax-bad-uri-01.nt
Normal file
2
test/data/N-TRIPLES-TESTS/nt-syntax-bad-uri-01.nt
Normal file
|
@ -0,0 +1,2 @@
|
|||
# Bad IRI : space.
|
||||
<http://example/ space> <http://example/p> <http://example/o> .
|
2
test/data/N-TRIPLES-TESTS/nt-syntax-bad-uri-02.nt
Normal file
2
test/data/N-TRIPLES-TESTS/nt-syntax-bad-uri-02.nt
Normal file
|
@ -0,0 +1,2 @@
|
|||
# Bad IRI : bad escape
|
||||
<http://example/\u00ZZ11> <http://example/p> <http://example/o> .
|
2
test/data/N-TRIPLES-TESTS/nt-syntax-bad-uri-03.nt
Normal file
2
test/data/N-TRIPLES-TESTS/nt-syntax-bad-uri-03.nt
Normal file
|
@ -0,0 +1,2 @@
|
|||
# Bad IRI : bad escape
|
||||
<http://example/\U00ZZ1111> <http://example/p> <http://example/o> .
|
2
test/data/N-TRIPLES-TESTS/nt-syntax-bad-uri-04.nt
Normal file
2
test/data/N-TRIPLES-TESTS/nt-syntax-bad-uri-04.nt
Normal file
|
@ -0,0 +1,2 @@
|
|||
# Bad IRI : character escapes not allowed.
|
||||
<http://example/\n> <http://example/p> <http://example/o> .
|
2
test/data/N-TRIPLES-TESTS/nt-syntax-bad-uri-05.nt
Normal file
2
test/data/N-TRIPLES-TESTS/nt-syntax-bad-uri-05.nt
Normal file
|
@ -0,0 +1,2 @@
|
|||
# Bad IRI : character escapes not allowed.
|
||||
<http://example/\/> <http://example/p> <http://example/o> .
|
2
test/data/N-TRIPLES-TESTS/nt-syntax-bad-uri-06.nt
Normal file
2
test/data/N-TRIPLES-TESTS/nt-syntax-bad-uri-06.nt
Normal file
|
@ -0,0 +1,2 @@
|
|||
# No relative IRIs in N-Triples
|
||||
<s> <http://example/p> <http://example/o> .
|
2
test/data/N-TRIPLES-TESTS/nt-syntax-bad-uri-07.nt
Normal file
2
test/data/N-TRIPLES-TESTS/nt-syntax-bad-uri-07.nt
Normal file
|
@ -0,0 +1,2 @@
|
|||
# No relative IRIs in N-Triples
|
||||
<http://example/s> <p> <http://example/o> .
|
2
test/data/N-TRIPLES-TESTS/nt-syntax-bad-uri-08.nt
Normal file
2
test/data/N-TRIPLES-TESTS/nt-syntax-bad-uri-08.nt
Normal file
|
@ -0,0 +1,2 @@
|
|||
# No relative IRIs in N-Triples
|
||||
<http://example/s> <http://example/p> <o> .
|
2
test/data/N-TRIPLES-TESTS/nt-syntax-bad-uri-09.nt
Normal file
2
test/data/N-TRIPLES-TESTS/nt-syntax-bad-uri-09.nt
Normal file
|
@ -0,0 +1,2 @@
|
|||
# No relative IRIs in N-Triples
|
||||
<http://example/s> <http://example/p> "foo"^^<dt> .
|
1
test/data/N-TRIPLES-TESTS/nt-syntax-bnode-01.nt
Normal file
1
test/data/N-TRIPLES-TESTS/nt-syntax-bnode-01.nt
Normal file
|
@ -0,0 +1 @@
|
|||
_:a <http://example/p> <http://example/o> .
|
2
test/data/N-TRIPLES-TESTS/nt-syntax-bnode-02.nt
Normal file
2
test/data/N-TRIPLES-TESTS/nt-syntax-bnode-02.nt
Normal file
|
@ -0,0 +1,2 @@
|
|||
<http://example/s> <http://example/p> _:a .
|
||||
_:a <http://example/p> <http://example/o> .
|
2
test/data/N-TRIPLES-TESTS/nt-syntax-bnode-03.nt
Normal file
2
test/data/N-TRIPLES-TESTS/nt-syntax-bnode-03.nt
Normal file
|
@ -0,0 +1,2 @@
|
|||
<http://example/s> <http://example/p> _:1a .
|
||||
_:1a <http://example/p> <http://example/o> .
|
1
test/data/N-TRIPLES-TESTS/nt-syntax-datatypes-01.nt
Normal file
1
test/data/N-TRIPLES-TESTS/nt-syntax-datatypes-01.nt
Normal file
|
@ -0,0 +1 @@
|
|||
<http://example/s> <http://example/p> "123"^^<http://www.w3.org/2001/XMLSchema#byte> .
|
1
test/data/N-TRIPLES-TESTS/nt-syntax-datatypes-02.nt
Normal file
1
test/data/N-TRIPLES-TESTS/nt-syntax-datatypes-02.nt
Normal file
|
@ -0,0 +1 @@
|
|||
<http://example/s> <http://example/p> "123"^^<http://www.w3.org/2001/XMLSchema#string> .
|
0
test/data/N-TRIPLES-TESTS/nt-syntax-file-01.nt
Normal file
0
test/data/N-TRIPLES-TESTS/nt-syntax-file-01.nt
Normal file
1
test/data/N-TRIPLES-TESTS/nt-syntax-file-02.nt
Normal file
1
test/data/N-TRIPLES-TESTS/nt-syntax-file-02.nt
Normal file
|
@ -0,0 +1 @@
|
|||
#Empty file.
|
2
test/data/N-TRIPLES-TESTS/nt-syntax-file-03.nt
Normal file
2
test/data/N-TRIPLES-TESTS/nt-syntax-file-03.nt
Normal file
|
@ -0,0 +1,2 @@
|
|||
#One comment, one empty line.
|
||||
|
1
test/data/N-TRIPLES-TESTS/nt-syntax-str-esc-01.nt
Normal file
1
test/data/N-TRIPLES-TESTS/nt-syntax-str-esc-01.nt
Normal file
|
@ -0,0 +1 @@
|
|||
<http://example/s> <http://example/p> "a\n" .
|
1
test/data/N-TRIPLES-TESTS/nt-syntax-str-esc-02.nt
Normal file
1
test/data/N-TRIPLES-TESTS/nt-syntax-str-esc-02.nt
Normal file
|
@ -0,0 +1 @@
|
|||
<http://example/s> <http://example/p> "a\u0020b" .
|
1
test/data/N-TRIPLES-TESTS/nt-syntax-str-esc-03.nt
Normal file
1
test/data/N-TRIPLES-TESTS/nt-syntax-str-esc-03.nt
Normal file
|
@ -0,0 +1 @@
|
|||
<http://example/s> <http://example/p> "a\U00000020b" .
|
1
test/data/N-TRIPLES-TESTS/nt-syntax-string-01.nt
Normal file
1
test/data/N-TRIPLES-TESTS/nt-syntax-string-01.nt
Normal file
|
@ -0,0 +1 @@
|
|||
<http://example/s> <http://example/p> "string" .
|
1
test/data/N-TRIPLES-TESTS/nt-syntax-string-02.nt
Normal file
1
test/data/N-TRIPLES-TESTS/nt-syntax-string-02.nt
Normal file
|
@ -0,0 +1 @@
|
|||
<http://example/s> <http://example/p> "string"@en .
|
1
test/data/N-TRIPLES-TESTS/nt-syntax-string-03.nt
Normal file
1
test/data/N-TRIPLES-TESTS/nt-syntax-string-03.nt
Normal file
|
@ -0,0 +1 @@
|
|||
<http://example/s> <http://example/p> "string"@en-uk .
|
79
test/data/N-TRIPLES-TESTS/nt-syntax-subm-01.nt
Normal file
79
test/data/N-TRIPLES-TESTS/nt-syntax-subm-01.nt
Normal file
|
@ -0,0 +1,79 @@
|
|||
#
|
||||
# Copyright World Wide Web Consortium, (Massachusetts Institute of
|
||||
# Technology, Institut National de Recherche en Informatique et en
|
||||
# Automatique, Keio University).
|
||||
#
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# Please see the full Copyright clause at
|
||||
# <http://www.w3.org/Consortium/Legal/copyright-software.html>
|
||||
#
|
||||
# Test file with a variety of legal N-Triples
|
||||
#
|
||||
# Dave Beckett - http://purl.org/net/dajobe/
|
||||
#
|
||||
# $Id: test.nt,v 1.7 2003/10/06 15:52:19 dbeckett2 Exp $
|
||||
#
|
||||
#####################################################################
|
||||
|
||||
# comment lines
|
||||
# comment line after whitespace
|
||||
# empty blank line, then one with spaces and tabs
|
||||
|
||||
|
||||
<http://example.org/resource1> <http://example.org/property> <http://example.org/resource2> .
|
||||
_:anon <http://example.org/property> <http://example.org/resource2> .
|
||||
<http://example.org/resource2> <http://example.org/property> _:anon .
|
||||
# spaces and tabs throughout:
|
||||
<http://example.org/resource3> <http://example.org/property> <http://example.org/resource2> .
|
||||
|
||||
# line ending with CR NL (ASCII 13, ASCII 10)
|
||||
<http://example.org/resource4> <http://example.org/property> <http://example.org/resource2> .
|
||||
|
||||
# 2 statement lines separated by single CR (ASCII 10)
|
||||
<http://example.org/resource5> <http://example.org/property> <http://example.org/resource2> .
|
||||
<http://example.org/resource6> <http://example.org/property> <http://example.org/resource2> .
|
||||
|
||||
|
||||
# All literal escapes
|
||||
<http://example.org/resource7> <http://example.org/property> "simple literal" .
|
||||
<http://example.org/resource8> <http://example.org/property> "backslash:\\" .
|
||||
<http://example.org/resource9> <http://example.org/property> "dquote:\"" .
|
||||
<http://example.org/resource10> <http://example.org/property> "newline:\n" .
|
||||
<http://example.org/resource11> <http://example.org/property> "return\r" .
|
||||
<http://example.org/resource12> <http://example.org/property> "tab:\t" .
|
||||
|
||||
# Space is optional before final .
|
||||
<http://example.org/resource13> <http://example.org/property> <http://example.org/resource2>.
|
||||
<http://example.org/resource14> <http://example.org/property> "x".
|
||||
<http://example.org/resource15> <http://example.org/property> _:anon.
|
||||
|
||||
# \u and \U escapes
|
||||
# latin small letter e with acute symbol \u00E9 - 3 UTF-8 bytes #xC3 #A9
|
||||
<http://example.org/resource16> <http://example.org/property> "\u00E9" .
|
||||
# Euro symbol \u20ac - 3 UTF-8 bytes #xE2 #x82 #xAC
|
||||
<http://example.org/resource17> <http://example.org/property> "\u20AC" .
|
||||
# resource18 test removed
|
||||
# resource19 test removed
|
||||
# resource20 test removed
|
||||
|
||||
# XML Literals as Datatyped Literals
|
||||
<http://example.org/resource21> <http://example.org/property> ""^^<http://www.w3.org/2000/01/rdf-schema#XMLLiteral> .
|
||||
<http://example.org/resource22> <http://example.org/property> " "^^<http://www.w3.org/2000/01/rdf-schema#XMLLiteral> .
|
||||
<http://example.org/resource23> <http://example.org/property> "x"^^<http://www.w3.org/2000/01/rdf-schema#XMLLiteral> .
|
||||
<http://example.org/resource23> <http://example.org/property> "\""^^<http://www.w3.org/2000/01/rdf-schema#XMLLiteral> .
|
||||
<http://example.org/resource24> <http://example.org/property> "<a></a>"^^<http://www.w3.org/2000/01/rdf-schema#XMLLiteral> .
|
||||
<http://example.org/resource25> <http://example.org/property> "a <b></b>"^^<http://www.w3.org/2000/01/rdf-schema#XMLLiteral> .
|
||||
<http://example.org/resource26> <http://example.org/property> "a <b></b> c"^^<http://www.w3.org/2000/01/rdf-schema#XMLLiteral> .
|
||||
<http://example.org/resource26> <http://example.org/property> "a\n<b></b>\nc"^^<http://www.w3.org/2000/01/rdf-schema#XMLLiteral> .
|
||||
<http://example.org/resource27> <http://example.org/property> "chat"^^<http://www.w3.org/2000/01/rdf-schema#XMLLiteral> .
|
||||
# resource28 test removed 2003-08-03
|
||||
# resource29 test removed 2003-08-03
|
||||
|
||||
# Plain literals with languages
|
||||
<http://example.org/resource30> <http://example.org/property> "chat"@fr .
|
||||
<http://example.org/resource31> <http://example.org/property> "chat"@en .
|
||||
|
||||
# Typed Literals
|
||||
<http://example.org/resource32> <http://example.org/property> "abc"^^<http://example.org/datatype1> .
|
||||
# resource33 test removed 2003-08-03
|
1
test/data/N-TRIPLES-TESTS/nt-syntax-uri-01.nt
Normal file
1
test/data/N-TRIPLES-TESTS/nt-syntax-uri-01.nt
Normal file
|
@ -0,0 +1 @@
|
|||
<http://example/s> <http://example/p> <http://example/o> .
|
2
test/data/N-TRIPLES-TESTS/nt-syntax-uri-02.nt
Normal file
2
test/data/N-TRIPLES-TESTS/nt-syntax-uri-02.nt
Normal file
|
@ -0,0 +1,2 @@
|
|||
# x53 is capital S
|
||||
<http://example/\u0053> <http://example/p> <http://example/o> .
|
2
test/data/N-TRIPLES-TESTS/nt-syntax-uri-03.nt
Normal file
2
test/data/N-TRIPLES-TESTS/nt-syntax-uri-03.nt
Normal file
|
@ -0,0 +1,2 @@
|
|||
# x53 is capital S
|
||||
<http://example/\U00000053> <http://example/p> <http://example/o> .
|
2
test/data/N-TRIPLES-TESTS/nt-syntax-uri-04.nt
Normal file
2
test/data/N-TRIPLES-TESTS/nt-syntax-uri-04.nt
Normal file
|
@ -0,0 +1,2 @@
|
|||
# IRI with all chars in it.
|
||||
<http://example/s> <http://example/p> <scheme:!$%25&'()*+,-./0123456789:/@ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~?#> .
|
|
@ -6,6 +6,12 @@ defmodule RDF.LiteralTest do
|
|||
alias RDF.{Literal, XSD}
|
||||
|
||||
describe "construction by type inference" do
|
||||
test "creating an string literal" do
|
||||
string_literal = Literal.new("foo")
|
||||
assert string_literal.value == "foo"
|
||||
assert string_literal.datatype == XSD.string
|
||||
end
|
||||
|
||||
test "creating an integer by type inference" do
|
||||
int_literal = Literal.new(42)
|
||||
assert int_literal.value == 42
|
||||
|
@ -24,4 +30,60 @@ defmodule RDF.LiteralTest do
|
|||
|
||||
end
|
||||
|
||||
describe "construction with an explicit unknown datatype" do
|
||||
literal = Literal.new("custom typed value", datatype: "http://example/dt")
|
||||
assert literal.value == "custom typed value"
|
||||
assert literal.datatype == RDF.uri("http://example/dt")
|
||||
end
|
||||
|
||||
describe "construction with an explicit known (XSD) datatype" do
|
||||
test "creating a boolean" do
|
||||
bool_literal = Literal.new("true", datatype: XSD.boolean)
|
||||
assert bool_literal.value == true
|
||||
assert bool_literal.datatype == XSD.boolean
|
||||
|
||||
bool_literal = Literal.new(true, datatype: XSD.boolean)
|
||||
assert bool_literal.value == true
|
||||
assert bool_literal.datatype == XSD.boolean
|
||||
|
||||
bool_literal = Literal.new("false", datatype: XSD.boolean)
|
||||
assert bool_literal.value == false
|
||||
assert bool_literal.datatype == XSD.boolean
|
||||
|
||||
bool_literal = Literal.new(false, datatype: XSD.boolean)
|
||||
assert bool_literal.value == false
|
||||
assert bool_literal.datatype == XSD.boolean
|
||||
end
|
||||
|
||||
test "creating an integer" do
|
||||
int_literal = Literal.new(42, datatype: XSD.integer)
|
||||
assert int_literal.value == 42
|
||||
assert int_literal.datatype == XSD.integer
|
||||
|
||||
int_literal = Literal.new("42", datatype: XSD.integer)
|
||||
assert int_literal.value == 42
|
||||
assert int_literal.datatype == XSD.integer
|
||||
|
||||
int_literal = Literal.new(true, datatype: XSD.integer)
|
||||
assert int_literal.value == 1
|
||||
assert int_literal.datatype == XSD.integer
|
||||
int_literal = Literal.new(false, datatype: XSD.integer)
|
||||
assert int_literal.value == 0
|
||||
assert int_literal.datatype == XSD.integer
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
test "creating a language-tagged string literal" do
|
||||
literal = Literal.new("Eule", language: "de")
|
||||
assert literal.value == "Eule"
|
||||
assert literal.datatype == RDF.langString
|
||||
assert literal.language == "de"
|
||||
end
|
||||
|
||||
@tag :skip
|
||||
test "construction of a typed and language-tagged literal fails" do
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
|
|
150
test/unit/ntriples/reader_test.exs
Normal file
150
test/unit/ntriples/reader_test.exs
Normal file
|
@ -0,0 +1,150 @@
|
|||
defmodule RDF.NTriples.ReaderTest do
|
||||
use ExUnit.Case, async: false
|
||||
|
||||
doctest RDF.NTriples.Reader
|
||||
|
||||
alias RDF.{Graph}
|
||||
|
||||
defmodule EX, do: use RDF.Vocabulary, base_uri: "http://example.org/#"
|
||||
defmodule P, do: use RDF.Vocabulary, base_uri: "http://www.perceive.net/schemas/relationship/"
|
||||
|
||||
@w3c_ntriples_test_suite Path.join(File.cwd!, "test/data/N-TRIPLES-TESTS")
|
||||
|
||||
test "an empty string is deserialized to an empty graph" do
|
||||
assert RDF.NTriples.Reader.read!("") == Graph.new
|
||||
assert RDF.NTriples.Reader.read!(" \n\r\r\n ") == Graph.new
|
||||
end
|
||||
|
||||
test "reading comments" do
|
||||
assert RDF.NTriples.Reader.read!("# just a comment") == Graph.new
|
||||
|
||||
assert RDF.NTriples.Reader.read!("""
|
||||
<http://example.org/#S> <http://example.org/#p> _:1 . # a comment
|
||||
""") == Graph.new({EX.S, EX.p, RDF.bnode("1")})
|
||||
|
||||
assert RDF.NTriples.Reader.read!("""
|
||||
# a comment
|
||||
<http://example.org/#S> <http://example.org/#p> <http://example.org/#O> .
|
||||
""") == Graph.new({EX.S, EX.p, EX.O})
|
||||
|
||||
assert RDF.NTriples.Reader.read!("""
|
||||
<http://example.org/#S> <http://example.org/#p> <http://example.org/#O> .
|
||||
# a comment
|
||||
""") == Graph.new({EX.S, EX.p, EX.O})
|
||||
|
||||
assert RDF.NTriples.Reader.read!("""
|
||||
# Header line 1
|
||||
# Header line 2
|
||||
<http://example.org/#S1> <http://example.org/#p1> <http://example.org/#O1> .
|
||||
# 1st comment
|
||||
<http://example.org/#S1> <http://example.org/#p2> <http://example.org/#O2> . # 2nd comment
|
||||
# last comment
|
||||
""") == Graph.new([
|
||||
{EX.S1, EX.p1, EX.O1},
|
||||
{EX.S1, EX.p2, EX.O2},
|
||||
])
|
||||
end
|
||||
|
||||
test "empty lines" do
|
||||
assert RDF.NTriples.Reader.read!("""
|
||||
|
||||
<http://example.org/#spiderman> <http://www.perceive.net/schemas/relationship/enemyOf> <http://example.org/#green_goblin> .
|
||||
""") == Graph.new({EX.spiderman, P.enemyOf, EX.green_goblin})
|
||||
|
||||
assert RDF.NTriples.Reader.read!("""
|
||||
<http://example.org/#spiderman> <http://www.perceive.net/schemas/relationship/enemyOf> <http://example.org/#green_goblin> .
|
||||
|
||||
""") == Graph.new({EX.spiderman, P.enemyOf, EX.green_goblin})
|
||||
|
||||
assert RDF.NTriples.Reader.read!("""
|
||||
|
||||
<http://example.org/#S1> <http://example.org/#p1> <http://example.org/#O1> .
|
||||
|
||||
|
||||
<http://example.org/#S1> <http://example.org/#p2> <http://example.org/#O2> .
|
||||
|
||||
""") == Graph.new([
|
||||
{EX.S1, EX.p1, EX.O1},
|
||||
{EX.S1, EX.p2, EX.O2},
|
||||
])
|
||||
end
|
||||
|
||||
test "reading a single triple uris" do
|
||||
assert RDF.NTriples.Reader.read!("""
|
||||
<http://example.org/#spiderman> <http://www.perceive.net/schemas/relationship/enemyOf> <http://example.org/#green_goblin> .
|
||||
""") == Graph.new({EX.spiderman, P.enemyOf, EX.green_goblin})
|
||||
end
|
||||
|
||||
test "reading a single triple with a blank node" do
|
||||
assert RDF.NTriples.Reader.read!("""
|
||||
_:foo <http://example.org/#p> <http://example.org/#O> .
|
||||
""") == Graph.new({RDF.bnode("foo"), EX.p, EX.O})
|
||||
assert RDF.NTriples.Reader.read!("""
|
||||
<http://example.org/#S> <http://example.org/#p> _:1 .
|
||||
""") == Graph.new({EX.S, EX.p, RDF.bnode("1")})
|
||||
assert RDF.NTriples.Reader.read!("""
|
||||
_:foo <http://example.org/#p> _:bar .
|
||||
""") == Graph.new({RDF.bnode("foo"), EX.p, RDF.bnode("bar")})
|
||||
end
|
||||
|
||||
test "reading a single triple with an untyped string literal" do
|
||||
assert RDF.NTriples.Reader.read!("""
|
||||
<http://example.org/#spiderman> <http://www.perceive.net/schemas/relationship/realname> "Peter Parker" .
|
||||
""") == Graph.new({EX.spiderman, P.realname, RDF.literal("Peter Parker")})
|
||||
end
|
||||
|
||||
test "reading a single triple with a typed literal" do
|
||||
assert RDF.NTriples.Reader.read!("""
|
||||
<http://example.org/#spiderman> <http://example.org/#p> "42"^^<http://www.w3.org/2001/XMLSchema#integer> .
|
||||
""") == Graph.new({EX.spiderman, EX.p, RDF.literal(42)})
|
||||
end
|
||||
|
||||
test "reading a single triple with a language tagged literal" do
|
||||
assert RDF.NTriples.Reader.read!("""
|
||||
<http://example.org/#S> <http://example.org/#p> "foo"@en .
|
||||
""") == Graph.new({EX.S, EX.p, RDF.literal("foo", language: "en")})
|
||||
end
|
||||
|
||||
test "reading multiple triples" do
|
||||
assert RDF.NTriples.Reader.read!("""
|
||||
<http://example.org/#S1> <http://example.org/#p1> <http://example.org/#O1> .
|
||||
<http://example.org/#S1> <http://example.org/#p2> <http://example.org/#O2> .
|
||||
""") == Graph.new([
|
||||
{EX.S1, EX.p1, EX.O1},
|
||||
{EX.S1, EX.p2, EX.O2},
|
||||
])
|
||||
assert RDF.NTriples.Reader.read!("""
|
||||
<http://example.org/#S1> <http://example.org/#p1> <http://example.org/#O1> .
|
||||
<http://example.org/#S1> <http://example.org/#p2> <http://example.org/#O2> .
|
||||
<http://example.org/#S2> <http://example.org/#p3> <http://example.org/#O3> .
|
||||
""") == Graph.new([
|
||||
{EX.S1, EX.p1, EX.O1},
|
||||
{EX.S1, EX.p2, EX.O2},
|
||||
{EX.S2, EX.p3, EX.O3}
|
||||
])
|
||||
end
|
||||
|
||||
describe "the official W3C RDF 1.1 N-Triples Test Suite" do
|
||||
# from https://www.w3.org/2013/N-TriplesTests/
|
||||
|
||||
ExUnit.Case.register_attribute __ENV__, :nt_test
|
||||
|
||||
@w3c_ntriples_test_suite
|
||||
|> File.ls!
|
||||
|> Enum.filter(fn (file) -> Path.extname(file) == ".nt" end)
|
||||
|> Enum.each(fn (file) ->
|
||||
@nt_test file: Path.join(@w3c_ntriples_test_suite, file)
|
||||
if file |> String.contains?("-bad-") do
|
||||
test "Negative syntax test: #{file}", context do
|
||||
assert {:error, _} = RDF.NTriples.Reader.read_file(context.registered.nt_test[:file])
|
||||
end
|
||||
else
|
||||
test "Positive syntax test: #{file}", context do
|
||||
assert {:ok, %RDF.Graph{}} = RDF.NTriples.Reader.read_file(context.registered.nt_test[:file])
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
end
|
||||
|
||||
end
|
Loading…
Reference in a new issue