Thanks, Andy!

This is a legacy file that I cannot change anything.

I tried using FILTER. Exactly as you said, the execution of the query is
too slow.

My questions - were you able to execute the query with URI() function in
it? How can I make my query execute first with no syntax error ?

Thanks for the advice - I read the book "Learning Sparql". Just need to
read it again.


On Mon, Sep 2, 2013 at 12:36 PM, Andy Seaborne <[email protected]> wrote:

> On 02/09/13 16:34, Charles Li wrote
>
>  Thanks Andy!
>>
>> I managed to narrow down to the following SPAQL query issue (the
>> model was in TDB loaded from file "C:/temp/myrdf.xml". Jena 2.10.1)
>>
>> When I run the following query:
>>
>> select ?s  ?p  ?o WHERE { <file:///C:/temp/myrdf.xml#**ROOT>  ?p   ?o
>> . }
>>
>> I was able to get the correct triples (the logical tree structure
>> root is modeled in the RDF file with a node whose RdfId is literally
>> "ROOT")  .
>>
>> However, when I plug in the RdfId with the following query:
>>
>> select ?s  ?p  ?o WHERE { <file:///C:/temp/myrdf.xml#
>> _{27900499-0D9D-4287-8F4D-**E4C13BCB3C8D}>  ?p   ?o . }
>>
>> I got an error:
>>
>> Encountered " "<" "< "" ......
>>
>
> { and } are illegal in IRIs.  Ideally, your data would not use them.
> You may run into other problems if you continue to use bad IRIs.
>
> You probably got a warning when loading data.
>
>
>
>> So I think it may be due to the special characters in the RdfID, and
>> I tried the following query:
>>
>> select ?s  ?p  ?o WHERE {
>>
>>
>> URI(ENCODE_FOR_URI("file:///C:**/temp/myrdf.xml#_{27900499-**
>> 0D9D-4287-8F4D-E4C13BCB3C8D}")**)
>> ?p  ?o  .
>> }
>>
>
> Encoding is not escaping.
>
> If you encode { as %7B then the characters in the IRI are %-7-B, it's not
> a way like \n to get the raw character into IRI.
>
> You can try: CONTAINS(STR(...)) as you had before but on the correct
> variable now we've established it is in the subject position.
>
> SELECT * {
>   ?s ?p ?o
>   FILTER( CONTAINS(STR(?s), "27900499-0D9D-4287-8F4D-**E4C13BCB3C8D")
> }
>
> or
> FILTER( STR(?s) = "file:///C:/temp/myrdf.xml#_{**0E43691F-0B64-42AF-AFCF-*
> *19BCC28ACBA3}")
>
> This is not a fast query - it's a scan of the entire database - but you
> could use it to convert your data using SPARQL Update.
>
> You can also use initial bindings (see QueryExecutionFactory) on a query
> to inject values after the parse stage.
>
>
>> But still syntax error.
>>
>
> which is unrelated to the URI issue.  You need to look at the spec or a
> book like "Learning SPARQL" or one of the many online introductions.
> Guessing at syntax is going to take you a long time.
>
>
>
>  How should I compose the SPARQL query string to specify the RdfID in
>> place correctly?
>>
>>
>> Thanks a lot!
>>
>> - Charles
>>
>
>         Andy
>

Reply via email to