Thanks very much for this info, Christian!  I'll pass your
observations on to the eXist team.

Joe

On Sun, Jan 10, 2016 at 3:50 AM, Christian Grün
<christian.gr...@gmail.com> wrote:
> Hi Tim, hi Joe,
>
> The query works if you use parentheses around the arrow operands:
>
>   (json-doc("http://lae.princeton.edu/catalog/0bp35.jsonld";)("@context")
>   => json-doc())("@context")
>
> This is in compliance with the XQuery 3.1 spec [1].
>
> Out of interest, I spent some time and looked up the W3 bug tracker
> history, and I spotted a change in the precedence of the arrow
> operator [2]. Maybe this change is not reflected in eXist?
>
> Hope this helps,
> Christian
>
> [1] http://www.w3.org/TR/xquery-31/#doc-xquery31-ArrowExpr
> [2] https://www.w3.org/Bugs/Public/show_bug.cgi?id=27537
>
>
>
>
>> I tested your code with the closest thing at hand - a local build of
>> branch of Wolfgang Meier's eXist repo with support for the arrow
>> operator (https://github.com/wolfgangmm/exist/tree/feature/arrowop) -
>> and your code worked fine there.  So my hunch is that there's a bug in
>> BaseX or some syntax error I'm not seeing in your code.  For the
>> record, here's the code I'm running:
>>
>> --
>> xquery version "3.1";
>>
>> json-doc("http://lae.princeton.edu/catalog/0bp35.jsonld";)("@context")
>> => json-doc()("@context")
>> --
>>
>> To check the results I actually use `=>
>> serialize(<serialization-parameters
>> xmlns="http://www.w3.org/2010/xslt-xquery-serialization";><method>json</method><indent>yes</indent></serialization-parameters>)`
>> on the results since eXist doesn't support adaptive serialization.
>>
>> I hope this is helpful.
>>
>> Joe
>>
>> On Sat, Jan 9, 2016 at 6:20 PM, Tim Thompson <timat...@gmail.com> wrote:
>>> Thanks, Joe! I guess I'd glossed over the "funky" example ;-) Regarding the
>>> arrow operator, I was wondering whether something like this was possible:
>>>
>>> json-doc(" http://lae.princeton.edu/catalog/0bp35.jsonld";)("@context") =>
>>> json-doc()("@context")
>>>
>>> which throws an error: [XPST0003] Unexpected end of query: '("@context")'.
>>>
>>> Tim
>>>
>>> On Sat, Jan 9, 2016 at 3:53 PM, Joe Wicentowski <joe...@gmail.com> wrote:
>>>>
>>>> Hi Tim,
>>>>
>>>> For your first question, I think your example falls into what the spec
>>>> calls "funky looking" keys.  See the 3rd bullet point example under
>>>> http://www.w3.org/TR/xquery-31/#id-lookup:
>>>>
>>>> > funky / <looking @string") is equivalent to .("$funky / <looking
>>>> > @string"), an appropriate lookup for a map with rather odd conventions 
>>>> > for
>>>> > keys.
>>>>
>>>> In other words, I think you're stuck with the ("@context") approach.
>>>>
>>>> As to your second question, it looks like what you're proposing should
>>>> work - but am I reading you as saying you get an error with your proposed
>>>> approach?  If so, what's the error?
>>>>
>>>> Joe
>>>>
>>>> Sent from my iPad
>>>>
>>>> _____________________________
>>>> From: Tim Thompson <timat...@gmail.com>
>>>> Sent: Saturday, January 9, 2016 3:11 PM
>>>> Subject: [basex-talk] Lookups and arrows
>>>> To: BaseX <basex-talk@mailman.uni-konstanz.de>
>>>>
>>>>
>>>>
>>>> Hello,
>>>>
>>>> I'm testing some XQuery 3.1 features against a JSON-LD[1] document and had
>>>> a few questions. In the JSON-LD format, the "@" symbol has special 
>>>> semantics
>>>> in key names, but seems to cause problems with the 3.1 lookup operator.
>>>>
>>>> For example:
>>>>
>>>> json-doc(" http://lae.princeton.edu/catalog/0bp35.jsonld";)("@context")
>>>>
>>>> works as expected, but
>>>>
>>>> json-doc(" http://lae.princeton.edu/catalog/0bp35.jsonld";)?@context
>>>>
>>>> throws an error: [XPST0003] No specifier after lookup operator: '@'.
>>>>
>>>> Also, when using the "=>" operator, should it be possible to perform a
>>>> lookup on the last expression in a chain, if that expression returns a map?
>>>>
>>>> For example:
>>>>
>>>> json-doc(" http://lae.princeton.edu/catalog/0bp35.jsonld";)("@context")
>>>> evaluates to " http://iiif.io/api/presentation/2/context.json";
>>>>
>>>> and
>>>>
>>>> json-doc(" http://lae.princeton.edu/catalog/0bp35.jsonld";)("@context") =>
>>>> json-doc()
>>>>
>>>> returns another map object. So, how would one achieve this:
>>>>
>>>> json-doc(json-doc("
>>>> http://lae.princeton.edu/catalog/0bp35.jsonld";)("@context"))("@context")
>>>>
>>>> using the arrow operator?
>>>>
>>>> Thanks,
>>>> Tim
>>>>
>>>>
>>>> [1] http://www.w3.org/TR/json-ld/
>>>>
>>>>
>>>> --
>>>> Tim A. Thompson
>>>> Metadata Librarian (Spanish/Portuguese Specialty)
>>>> Princeton University Library
>>>>
>>>>
>>>>
>>>

Reply via email to