[
https://issues.apache.org/jira/browse/JENA-507?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14165219#comment-14165219
]
Rob Vesse commented on JENA-507:
--------------------------------
Finally had time to get back to this, I have all the extension functions now
implemented though not necessarily tested.
One issue I ran into was that some of the Leviathan URIs have local name parts
that aren't valid as Java class names so I implemented some simple escaping
logic in the {{Loader}} class which deals with this.
For example when it encounters the
{{<http://www.dotnetrdf.org/leviathan#degrees-to-radians>}} function it would
be mapped to the Java class {{degreesToRadians}} within whatever Java package
the Leviathan function namespace had been defined e.g.
{noformat}
http://example.org/ns#invalid-java-class => invalidJavaClass
{noformat}
Essentially the escaping scheme just examines each character and if it is not
valid in a Java class name ignores it and instead upper cases the next valid
character leading to a camel case style final class name. In the case where
the very first character of the name is invalid the prefix {{F_}} is used
instead
One outstanding issue is if (and how) to also implement the extension
aggregates that Leviathan defines, as far as I can tell there isn't a way to
introduce custom aggregates at this time since they would just be treated as
extension functions by ARQs parser. I guess we could get around this by adding
a registry for extension aggregates so that the parsers could detect the
difference (or alternatively this could be done at the algebra compilation
stage or by the query itself when calling {{getAggregators()}}). Anyone else
have any thoughts on this?
> Add support for Leviathan extension functions to ARQ
> ----------------------------------------------------
>
> Key: JENA-507
> URL: https://issues.apache.org/jira/browse/JENA-507
> Project: Apache Jena
> Issue Type: Improvement
> Components: ARQ
> Reporter: Rob Vesse
> Assignee: Rob Vesse
> Labels: extension, functions, sparql
> Original Estimate: 336h
> Time Spent: 4h
> Remaining Estimate: 332h
>
> The Leviathan Function library is a set of extension functions present in
> dotNetRDF's SPARQL engine. It contains a useful set of numeric functions
> which would be useful to have available in core ARQ and would boost
> portability of queries between ARQ and dotNetRDF (note that dotNetRDF already
> supports ARQs extension functions).
> See
> https://bitbucket.org/dotnetrdf/dotnetrdf/wiki/DeveloperGuide/SPARQL/Leviathan%20Functions
> for definition of functions
> Note that some of these overlap with new XPath 3 functions but for
> portability purposes there is no reason not to support these as well since
> most are relatively trivial to implement. I will file a separate issue for
> supporting XPath 3 functions.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)