- From: Maik Riechert <m.riechert@reading.ac.uk>
- Date: Tue, 10 Nov 2015 18:44:11 +0000
- To: Dietrich Schulten <ds@escalon.de>
- Cc: Hydra <public-hydra@w3.org>, Ruben Verborgh <ruben.verborgh@ugent.be>, Tomasz Pluskiewicz <tomasz@t-code.pl>
- Message-ID: <56423AFB.8040007@reading.ac.uk>
Am 10.11.2015 um 17:29 schrieb Dietrich Schulten:
>
>
> Am 10.11.2015 17:30 schrieb Maik Riechert <m.riechert@reading.ac.uk>:
> >
> >
> >
> > On 10/11/2015 14:35, Tomasz Pluskiewicz wrote:
> > > November 10 2015 2:42 PM, "Maik Riechert"
> <m.riechert@reading.ac.uk> wrote:
> > >> On 10/11/2015 13:26, Dietrich Schulten wrote:
> > >>
> > >>>> I don't see multi-valued parameters in the spec right now.
> > >>>> Others, do we have something for that?
> > >>>>
> > >>> We do, since we refer to RFC 6570 for the IriTemplate syntax.
> > >>>
> > >>> The UriTemplates RFC 6570 has a * modifier for this:
> > >>> http://tools.ietf.org/html/rfc6570#page-16
> > >> I know the RFC but I'm not sure how hydra's IriTemplateMapping
> works in
> > >> that case. The client doesn't inspect the template string, it
> just uses
> > >> it, so it doesn't know about * modifiers in the template. That
> means the
> > >> client has to know that a given variable is supposed to be a list
> or a
> > >> map of values. Where does that information go? Is that inside the
> > >> "property"? How would the "range" look like then?
> > >>
> > > I think the client would actually have inspect the template. The
> template mapping is there to translate URI part and query param names
> to URIs. It shouldn't do more IMO.
> > So, hypothetically, if a template mapping has "property": "foaf:name"
> > and the variable is included in the template as {?name*}. Does that
> then
> > either mean: a) multiple "foaf:name"'s should be put into the name
> > variable,
>
> zero or more foaf:name values may be put into the uritemplate
> expansion, if the variable is optional. If the mapping says it is
> required, then one or more.
>
> I see your issue, though. You want to express an expected value and
> cardinalities somehow. There is no decision yet what a compliant
> client should support for this purpose.
>
> A possible solution might be to use
> http://schema.org/PropertyValueSpecification or SHACL to describe
> expected values. For the former, that could look like this:
>
> .. Context defines schema: prefix..
> "mapping": [
> {
> "@type": [
> "IriTemplateMapping",
> "schema:PropertyValueSpecification"
> ],
> "variable": "q",
> "property": "foaf:name",
> "required": true,
> "schema:multipleValues" : true
> }
> ]
>
> It lacks a property for allowed values, though.
>
OK, starts to make more sense.
But coming back to "property", what should that actually tell the
client? Should the client assert "ok, that mapping variable corresponds
to foaf:name, I know that, it's the name of a thing and has a range of
rdfs:Literal, so I can directly use that for the template variable". But
what if "property": "dct:publisher"? Then the client can assert "Ok,
dct:publisher has range dct:Agent, so this could basically be anything,
and I have no idea how to translate a dct:Agent object into a plain
string, let's just use the Agent's @id then and hope for the best..?"
When you say it lacks a property for allowed values, how should that
look like? For Literal-like properties, couldn't you do that:
"@context": [
"http://www.w3.org/ns/hydra/core",
{
"owl": "http://www.w3.org/2002/07/owl#",
"DataRange": "owl:DataRange",
"oneOf": {"@id": "owl:oneOf", "@container": "@list"}
}
],
...
"mappings": [{
"type": "IriTemplateMapping",
"variable": "var",
"property": {
"@id": "vocab:myliteral",
"range": {
"@type": "DataRange",
"oneOf": ["first", "second"]
}
}
}]
But maybe I'm mixing up concepts here, since this only works for
rdfs:Literal, and even then I would like to assign more meaning to each
of the possible oneOf strings.
> We haven't really looked at SHACL yet. I am not sure if any of its
> mechanisms to connect shapes and instances can be applied to hydra.
> Holger Knublauch has made a proposal for hydra:Class though, and that
> might work with IriTemplateMapping, too. SHACL is still quite
> volatile, sh:allowedValue was renamed to sh:in just recently.
>
> or b) "foaf:name" itself as a single entity becomes a
> > composite value somehow?
>
> In which way would it become a composite value?
>
Well, forget foaf:name, let's think about someone creating an API and he
somehow needs multiple values and he wants the clients to recognize the
specific multi-valued variable somehow. So, he might say, ok let's name
the property myvocab:listOfPeopleIds which has a range of rdfs:List and
then clients that recognize that property will know that they should put
the rdf list of people IDs into the given template variable. But again,
maybe I overthink this way too far. Maybe the role of the property is
not as important as I thought it is, and it may not be about
transforming RDF graphs into plain strings, but rather about associating
the variable to a known concept, which in the end would mean that the
client always needs custom logic for constructing the variable values
for each mapping/property.
Some clarifications on the whole concept would be very welcome.
> If a) is true, then how would you describe the
> > collection of foaf:name's as such? For example, just including a
> comment
> > like "all foaf:name's are connected by an OR in that filter operation".
>
> Query parameters are no query language, and I think most members agree
> that we should again rely on 3rd party solutions rather than inventing
> our own.
>
Ok, fair enough.
Cheers
Maik
Received on Tuesday, 10 November 2015 18:45:00 UTC