Syntax & Semantics

All Operators in SPARQL can be called by their URI using a standard functional syntax (prefix-notation with parentheses), some operators support prefix or infix shortcut notation. Each Operator is mapped to a function depending on the operand Types. Different arities for the same operator are allowed, e.g. sparql:plus

LITERAL(str, IRI) is a dyanamic case unlike xsd:integer("1") where the datatype is fixed at parse time. Could be CAST(str, IRI).

LITERAL(str, string) (create literal with languag etag) is visually similar to LITERAL(str, IRI) and SPARQL functions are dynamically typed. An easy mistake to make is
LITERAL(str, ?var) where ?var is expected to be an IRI but is in fact a string.
A different name for the casting and language tag literals would be better.

LITLANG(str, string)

Another possibility is dynamic function invokation - the function IRI to call may be in a variable.

?function(?arg1, ?arg2, ....)

or via a specific keyword.

CALL(?function, ?arg1, ?arg2, ....)

?function is a URI of the function to call with the rest of the argument list as arguments.

These should also all have IRIs, as should the existing operators (e.g. sameTerm).

Test Cases

Finally, test cases. These are also useful in discussing a feature. A test case is a some data, a query and it's results. Can happen after the design settles but can be useful in discussions of different designs or of exactly what a design means.