- From: Thomas Hoppe <thomas.hoppe@n-fuse.de>
- Date: Sat, 10 Jan 2015 14:17:17 +0100
- To: public-hydra@w3.org
Hi,
I don't see why we would need `hydra:allowedIndividual`. I have
something easier in mind:
I would just enumerate the allowed individuals inline as they are.
The API client knows only from the fact that the individuals are
declared as `hydra:allowedIndividuals`
that they make up the range of selection items from which it (or a user)
can choose.
The client could then look for usual properties like `rdfs:label` to
present them to a user.
In that case also all RDF/ JSON-LD mechanisms for localization would
kick in as well.
With inline enumeration:
"hydra:allowedIndividuals": [
{
"@id": "EventCancelled",
"rdfs:label": "manifestazione annullata"
},
{
"@id": "EventPostponed",
"rdfs:label": "manifestazione rinviata"
}
]
Or with properties from some domain specific vocab:
"hydra:allowedIndividuals": [
{
"someVocab:eventStatus": "EventCancelled",
"rdfs:label": "manifestazione annullata"
},
{
"someVocab:eventStatus": "EventPostponed",
"rdfs:label": "manifestazione rinviata"
}
]
Also I want to stress again that we also need
to be able to link to some external resource:
"hydra:allowedIndividuals": {
"@id": "https://example.com/event_status/"
}
This could be a normal API resource, a hydra collection probably.
But also in this case, It would be awkward if every item in this collection
would need to have an `hydra:allowedIndividual` property.
Greets, Thomas
On 01/10/2015 07:51 AM, Dietrich Schulten wrote:
> In order to get internationalized captions for allowed individuals one
> could do the following. If :allowedIndividuals is expected to contain
> objects with an attribute :allowedIndividual (:allowedIndividuals
> :range :AllowedIndividual), one can use that with "@type":"vocab" to
> interpret the values as individuals in the default vocab, here enum
> values in schema.org (see below and [1]).
>
> Drawback: If someone just wants enum values without captions, things
> are more complicated than necessary.
>
> Opinions?
>
> Assuming that the client requested Italian as language (the other
> language facilities of json ld such as @language or language map would
> work, too [2]).
>
> {
> "@context": {
> "@vocab": "http://schema.org/",
> "hydra": "http://www.w3.org/ns/hydra/core#",
> "hydra:allowedIndividual": {
> "@type": "@vocab"
> },
> },
> ...
> "hydra:supportedProperty": [
> {
> "hydra:property": "eventStatus",
> "hydra:allowedIndividuals": [
> {
> "hydra:allowedIndividual": "EventCancelled",
> "hydra:title": "manifestazione annullata"
> },
> {
> "hydra:allowedIndividual": "EventPostponed",
> "hydra:title": "manifestazione rinviata"
> }
> ]
> }
> ]
> ...
> }
>
> In JSONLD-Playground:
> [1] http://tinyurl.com/qz85ep6
> [2] http://tinyurl.com/om7fsqc
>
> Am 09.01.2015 um 18:03 schrieb Dietrich Schulten:
>>
>> I was considering to use oslc:allowedValue in hydra-java but wasn't
>> sure if I could use it because its value is explicitly a reference to
>> another class, not an embeddable restriction - and I need it in
>> embedded form for the moment.
>> I see the label-value problem, too. I'll try to make it work with
>> @type:vocab.
>>
>> On January 9, 2015 5:17:38 PM Kev Kirkland <kev@dataunity.org> wrote:
>>
>>> Just to chime in - I agree also.
>>>
>>> I've implemented the 'oslc:allowedValue' system from Resource Shape
>>> 2.0 [1] in the AngularJS Hydra client [2]. It's a stop gap solution
>>> as I needed something working in a hurry for Data Unity. I went with
>>> OSLC as it was quick to understand and implement, but I'm very open
>>> minded about other solutions.
>>>
>>> One of the issues I've found with 'oslc:allowedValue' is that I
>>> can't find a way to specify a label for an RDF literal 'enum' value.
>>> This means the label in the HTML option list matches the literal
>>> value used in the vocab, which isn't always easily understood by the
>>> user. This could well be down to my lack of understanding about OSLC
>>> though.
>>>
>>> I've only put 'oslc:allowedValue' directly on the resource
>>> representation at this stage, so I haven't figured out how to
>>> integrate it closely with Hydra. The AngularJS Hydra client looks
>>> for OSLC information on the Resource when building the Form view,
>>> then uses it to populate HTML drop downs on the page.
>>>
>>> Cheers,
>>>
>>> Kev
>>>
>>> [1] http://www.w3.org/Submission/2014/SUBM-shapes-20140211/
>>> [2] https://github.com/dataunity/dataunity-hydra-client
>>>
>>> On 9 January 2015 at 15:23, Thomas Hoppe <thomas.hoppe@n-fuse.de
>>> <mailto:thomas.hoppe@n-fuse.de>> wrote:
>>>
>>> Hi,
>>>
>>> I just wanted to add that I consider the case Dietrich is
>>> describing;
>>> in my own words:
>>> Specifying expected properties _plus_ a range/ resource/
>>> collection/ enumeration
>>> of potential values a very important one.
>>> Ex: User profile creation case where you ask for the country of
>>> residence of a user and expect an item from a resource in the
>>> same API as value.
>>> I wanted to bring up this case earlier but wanted to wait until
>>> we have resolved the
>>> "easy" scenarios.
>>> I also think that OWL restrictions are probably too hard to
>>> understand/ implement
>>> and that only because of this I think that having a property
>>> like `hydra:range`
>>> could make sense.
>>>
>>> Greets, Thomas
>>>
>>> On 01/06/2015 12:21 PM, Dietrich Schulten wrote:
>>>> -----BEGIN PGP SIGNED MESSAGE-----
>>>> Hash: SHA1
>>>>
>>>> Am 05.01.2015 um 11:15 schrieb Ruben Verborgh:
>>>>> HI Dietrich,
>>>>>
>>>>> [From issue text:]
>>>>>
>>>>>>> Isn't that part of ontological modelling, and thus
>>>>>>> part of the
>>>>>>> property?
>>>>>> I do not think the ontological model of a property covers it.
>>>>> Perhaps not all cases, but I think for many.
>>>>>
>>>>>> On the one hand, sometimes not all possible values are
>>>>>> predefined, but they may be extensible by individuals from other
>>>>>> vocabs, see the usage of goodrelations enums fromschema.org <http://schema.org>.
>>>>> In that case, you might have a more specific property. (But I
>>>>> realize this modeling-based solution is not for everybody.)
>>>> What about the other hand [from issue text]?
>>>>
>>>>>> On the other hand, while a value might occur on a class in
>>>>>> general,
>>>> it might not be suitable in a particular context.
>>>>
>>>> For instance, assume that only the creator of an event should be able
>>>> to cancel it altogether (PUT eventStatus EventCanceled), others can
>>>> only change the status to rescheduled or postponed. Or, let's say it
>>>> should only be possible to reschedule an event as long as we are more
>>>> than two weeks away from the event date.
>>>>
>>>> As a REST service implementor I would like to tell the client exactly
>>>> which status changes are available for a resource right now.
>>>>
>>>> Are there OWL constructs which would allow me to do so?
>>>>
>>>> BTW, the Resource Shapes paper [1] section 4 discusses another point
>>>> why OWL is not well suited to describe application constraints. As
>>>> they put it, "Unfortunately, an OWL reasoner will go to great lengths
>>>> to make some superficially inconsistent looking graphs consistent". By
>>>> saying that a property :owner is a :functionalProperty of a
>>>> :ChangeRequest, I do not prevent people to post a ChangeRequest with
>>>> two owners :Bob and :Joe. A reasoner would simply infer that :Bob and
>>>> :Joe must be the same resource and happily accept the change request.
>>>>
>>>>
>>>>>> If you think rdfs:range, it is not about value constraints but
>>>>>> inference, so it doesn't enumerate possible values at all (I've
>>>>>> learned that much by now). Or do you have something else in
>>>>>> mind?
>>>>> OWL does it. I understand most people don't want to go that
>>>>> “complex” (even though it's quite alright), but we should just be
>>>>> aware that a modeling-based solution also exists.
>>>> And it would have the beauty that it is already available and the
>>>> concepts are known, at least by modelers. I would certainly prefer
>>>> that over defining new hydra properties.
>>>>
>>>> What do you have in mind, maybe owl:Restriction?
>>>>
>>>>> For example: foaf:knows has a range of foaf:Person. If we're
>>>>> developing a social application, it might make sense to restrict
>>>>> this to only people on the network. Yet listing them exhaustively
>>>>> would probably not make sense. So then perhaps a ex:knows
>>>>> (subproperty of foaf:knows) where the range is “people from the
>>>>> network” makes sense.
>>>>>
>>>> But how can I express a Range "people from the
>>>> network", given that
>>>> the number of people on the network is dynamic? You bring up an
>>>> interesting point. A ReST service would also want to tell the client:
>>>> use this link (or IriTemplate) to get a hydra:Collection of allowed
>>>> values. A third property hydra:allowedResources which may contain an
>>>> IriTemplate or a plain Resource which can be dereferenced into a
>>>> Collection or PagedCollection could achieve that. I'll update #82
>>>> accordingly [2] and see which comments I get :)
>>>>
>>>> The original purpose of #82 is to have a means to list a rather
>>>> limited number of possible values and to leverage @type:@vocab for
>>>> enumerated values likehttp://schema.org/DeliveryMethod which has
>>>> members from goodrelations.
>>>>
>>>> [1]http://events.linkeddata.org/ldow2013/papers/ldow2013-paper-02.pdf
>>>> [2]https://github.com/HydraCG/Specifications/issues/82
>>>>
>>>>
>>>> - --
>>>> Dietrich Schulten
>>>> Escalon System-Entwicklung
>>>> Bubenhalde 10
>>>> 74199 Untergruppenbach
>>>> -----BEGIN PGP SIGNATURE-----
>>>> Version: GnuPG v2.0.22 (MingW32)
>>>>
>>>> iEYEARECAAYFAlSrxUcACgkQuKLNitGfiZP6PgCgts8wESKTDz3atmXofBPheWTt
>>>> ACAAn2S9kUWiUwpgZUd/cPXnDujw00ib
>>>> =z5B1
>>>> -----END PGP SIGNATURE-----
>>>>
>>>
>>>
>>>
>>>
>>> --
>>> www.dataunity.org <http://www.dataunity.org>
>>> twitter: @data_unity
>
Received on Saturday, 10 January 2015 13:17:49 UTC