Martynas,
I have just uploaded a 1.3.1-SNAPSHOT build of the SPIN API to our maven
repo
http://www.topquadrant.com/repository/spin/org/topbraid/spin/1.3.1-SNAPSHOT/
This includes the deprecation of the relevant method(s), the
aforementioned helper method and a general simplification that removes
those ugly Maps of Maps that represented the template bindings until
now. The relevant info is now part of the CommandWrappers, leading to
much simpler code.
If you have a chance please give it a try and let me know if you see
problems.
Thanks,
Holger
On 3/18/2013 10:16, Holger Knublauch wrote:
Hi Martynas,
this is indeed not working correctly (in the current SPIN API release
1.3.0). The role of this method is to return a parsable query string
with the given variables of the template call pre-bound. The problem
is that the current code is expecting to apply variable substitutions
while printing the query string from the RDF tree. However, if no RDF
tree exists, it simply returns the sp:text unchanged.
I believe I can provide a partial fix, but thinking more about this
method I am wondering whether it should be deprecated altogether or at
least have some severe warnings around it. Background: SPIN
constraints and inferencing algorithms do not use this mechanism (of
hard-wiring the variables in the query string) because it is
comparably slow (to create the new strings each time - they are hard
to cache) and because there are cases where the approach doesn't work
in general. Consider you have a bound(?x) statement in the WHERE
clause, but then ?x is pre-bound: it would create a non-parsable
string. The approach that SPIN API uses in most other places is to
keep the query strings (or Query objects) and the initial bindings in
separate structures, and then let the Jena engine do the substitution
at run-time - not only the query String but on the Query and algebra
objects.
So before we can make a decision on the future of this
TemplateCall.getQueryString method: could you clarify what your use
case is and whether you could also soft-bind the substitutions? If you
could refactor your surrounding code then I could probably just
deprecate this method for good.
Thanks
Holger
On 3/17/2013 5:56, [email protected] wrote:
Hey Holger,
I have a spin:Template with an argument (in gp: namespace):
:DescribeInstancesTemplate a spin:Template ;
spin:constraint [ a spl:Argument ;
spl:predicate :type ;
spl:valueType rdfs:Resource
] ;
spin:body [ a sp:Describe, sp:Query ;
sp:resultNodes (_:instanceVar) ;
sp:text """DESCRIBE ?instance WHERE {
{
SELECT ?instance
WHERE {
?instance a ?type .
}
} .
}"""^^xsd:string ;
sp:where ([ a sp:SubQuery ;
# full RDF representation follows here
_:instanceVar sp:varName "instance"^^xsd:string .
When called it like this
spin:constraint [ a gp:DescribeInstancesTemplate ;
gp:type owl:Ontology
] ;
I get the query I want (using the TemplateCall.getQueryString() method):
DESCRIBE ?instance
WHERE
{ { SELECT ?instance
WHERE
{ ?instance <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>
<http://www.w3.org/2002/07/owl#Ontology> }
}
}
However, if I change the template's query to use spin:text only:
:DescribeInstancesTemplate a spin:Template ;
spin:constraint [ a spl:Argument ;
spl:predicate :type ;
spl:valueType rdfs:Resource
] ;
spin:body [ a sp:Describe, sp:Query ;
sp:text """DESCRIBE ?instance WHERE {
{
SELECT ?instance
WHERE {
?instance a ?type .
}
} .
}"""^^xsd:string ] .
the ?type argument is not set:
DESCRIBE ?instance
WHERE
{ { SELECT ?instance
WHERE
{ ?instance <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>
?type }
}
}
Is that the expected behaviour or am I missing something? spin:text
syntax is a really nice simplification, but I would expect Template
and TemplateCall to work the same way.
Martynas
graphity.org
--
-- You received this message because you are subscribed to the Google
Group "TopBraid Suite Users", the topics of which include Enterprise
Vocabulary Network (EVN), TopBraid Composer, TopBraid Live,
TopBraid Ensemble, SPARQLMotion, SPARQL Web Pages and SPIN.
To post to this group, send email to
[email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/topbraid-users?hl=en
---
You received this message because you are subscribed to the Google
Groups "TopBraid Suite Users" group.
To unsubscribe from this group and stop receiving emails from it,
send an email to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.
--
-- You received this message because you are subscribed to the Google
Group "TopBraid Suite Users", the topics of which include Enterprise Vocabulary
Network (EVN), TopBraid Composer, TopBraid Live,
TopBraid Ensemble, SPARQLMotion, SPARQL Web Pages and SPIN.
To post to this group, send email to
[email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/topbraid-users?hl=en
---
You received this message because you are subscribed to the Google Groups "TopBraid Suite Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.