On 02/09/13 19:06, Charles Li wrote:
Thanks, Andy!
This is a legacy file that I cannot change anything.
You are changing the file already because you are setting the base on
loading. Text processing can fix the file.
Or load and use SPARQL Update (slowly, but once).
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?
No.
How can I make my query execute first with no syntax error ?
From my previous email, this may work:
[[
You can also use initial bindings (see QueryExecutionFactory) on a query
to inject values after the parse stage.
]]
Andy
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