- From: Holger Knublauch <holger@topquadrant.com>
- Date: Wed, 12 Nov 2014 09:35:19 +1000
- To: public-data-shapes-wg@w3.org
On 11/12/2014 4:36, Eric Prud'hommeaux wrote:
> * Holger Knublauch <holger@topquadrant.com> [2014-11-11 22:04+1000]
>> On 11/11/2014 18:25, Eric Prud'hommeaux wrote:
>>> Wouldn't it be easier for users and implementors alike of the if
>>> there were a consistent syntax for representing constraints at any
>>> depth?
>> Yes, and such a syntax already exists and is called SPARQL. Why
>> invent another experimental language for a sub-set of SPARQL?
> I don't know how we ended up back here. I was simply saying that your
> proposal for a single nesting of constraints would have more
> applications and be more intuitive to your users if it weren't
> artificially limited to one level.
Let's try to make this concrete. Your example data was
<P> core:cureIndication [
core:hasIntervention :KidneyTransplant ;
core:hasOutcomeAssessment [
core:hasResultValue :ImprovedToNormal
]
]
Your corresponding ShExC pattern is:
:PatientShape {
core:cureIndication {
core:hasIntervention (:KidneyTransplant :HeartTransplant),
core:hasOutcomeAssessment {
core:hasResultValue (:ImprovedToNormal)
}+
}
}
If I understand ShEx correctly, then an equivalent SPARQL query would be:
SELECT ?patient
WHERE {
?patient core:cureIndication ?indication .
?indication core:hasIntervention ?intervention .
FILTER (?intervention IN (core:KidneyTransplant, core:HeartTransplant))
?indication core:hasOutcomeAssessment/core:hasResultValue
core:ImprovedToNormal .
}
which leads to the question whether SPARQL is really that bad, and
whether we therefore need to introduce yet another syntax for a similar
job, especially if that new syntax then introduces many other
limitations that are already solved by SPARQL.
Assuming that the SPARQL above is acceptable, then why would introducing
further metalanguage to SPIN be necessary, and how would that extension
look like in detail? I can easily see how to extend SPIN with a single
level of nesting, so that a constraint can be applied to a resource that
is accessed from the root object via a path expression. For example, see
the examples at the lower half of
https://www.w3.org/2014/data-shapes/wiki/Schema.org_Constraints
(Having just a single level would just require introducing a single
property such as spin:thisPath or spin:valuePath, and that can readily
be reused to construct an error message. If OTOH we supported multiple
levels, we would need to introduce new nodes that lead to complex bnode
structures and ugly Turtle/JSON-LD.)
And I can also see how we can still explain this one level to users. I
would struggle to explain to users why we ended up with another way of
expressing complex expressions that are already handled (better) by
general SPARQL, and require complex bnode structures to represent them.
>
> I don't think this is about ShExC. I was using ShExC as a terse way to
> write nested validation constraints but I could write it again in your
> RDF syntax.
FWIW the SPIN RDF syntax of the SELECT above would look like
[ a sp:Select ;
sp:resultVariables ( [ sp:varName "patient" ] ) ;
sp:where (
[
sp:subject [ sp:varName "patient" ] ;
sp:predicate core:cureIndication ;
sp:object [ sp:varName "indication" ] ;
]
[
sp:subject [ sp:varName "indication" ] ;
sp:predicate core:hasIntervention ;
sp:object [ sp:varName "intervention" ] ;
]
[ a sp:Filter ;
sp:expression [ a sp:in ;
sp:arg1 [ sp:varName "intervention" ] ;
sp:arg2 core:KidneyTransplant ;
sp:arg3 core:HeartTransplant
]
]
[ a sp:TriplePath ;
sp:subject [ sp:varName "indication" ] ;
sp:object core:ImprovedToNormal ;
sp:path [ a sp:SeqPath ;
sp:path1 core:hasOutcomeAssessment ;
sp:path2 core:hasResultValue
] ;
] )
]
which isn't perfectly readable to humans, but quite processable by tools
(and covers all of SPARQL, not just some subset). I am quite confident
that your ShEx RDF syntax would have similar complexity - that's just
the price of triple-based notations.
Holger
Received on Tuesday, 11 November 2014 23:37:58 UTC