Re: Enumeration values

Am 06.09.2014 15:21, schrieb Gregg Kellogg:
> On Sep 6, 2014, at 12:04 PM, Dietrich Schulten <ds@escalon.de>
> wrote:
>> 
>> Hi,
>> 
>> while experimenting with Java annotations for Hydra enabled
>> classes, I ran into the problem of enumerated values: schema.org
>> uses http://schema.org/Enumeration with many subtypes such as 
>> http://schema.org/OnSitePickup and it has a general practice to
>> allow enumeration values from other vocabs as attribute values,
>> notably goodrelations, as in the businessFunction attribute
>> below:
>> 
>> { "@context": { "@vocab" : "http://schema.org/" }, "@type":
>> "Movie", "name": "Pirates of the Carribean" "offer": { 
>> "businessFunction": "http://purl.org/goodrelations/v1#LeaseOut" 
>> } }
>> 
>> An enumeration value is a URL. In the json-ld spec, it is not 
>> mentioned that I can use a term to define the semantics of an 
>> attribute *value*.
>> 
>> When applying enumeration values to a plain json file, the
>> problem arises that some mapping might be necessary. Assuming
>> this json:
>> 
>> { name: "Pirates of the Caribbean", acquire: "RENT", delivery:
>> "IN_SHOP" }
>> 
>> Can I write a context which says that "RENT" means 
>> http://purl.org/goodrelations/v1#LeaseOut and "IN_SHOP" means 
>> "http://schema.org/OnSitePickup"? The json-ld spec seems not to 
>> mention such a usage.
>> 
>> It seems that terms cannot appear as attribute values unless the 
>> attribute is @type. Also, jsonld-java doesn't understand what I
>> might mean by:
> 
> Actually, you want @type: @vocab, which will allow term values
> without needing a compact URI form.
> 
> Gregg

After some discussion with Gregg who pointed me to
http://www.w3.org/TR/json-ld-api/#value-expansion, this is the outcome.

The @vocab keyword has a second meaning which is not mentioned in the
json-ld spec, only in the api. If used as a value of @type in the
context, it says that the corresponding attribute value must be
expanded to an IRI.

Example:
Define @vocab to be schema.org, let "gr" be goodrelations, let
"delivery" be @type:@vocab, then the value of the "delivery" attribute
in the JSON will be expanded as an IRI.

The effect on the value of "delivery" is this:
- A compact IRI gr:LeaseOut expands to
http://purl.org/goodrelations/v1#LeaseOut.
- Without gr: the @vocab value of schema.org is prepended. Useful if
the enumerated value is in schema.org
- And now the surprise: If I additionally define RENT to be
gr:LeaseOut, that will be resolved, too:

{
 "@context": {
   "@vocab" : "http://schema.org/",
   "gr": "http://purl.org/goodrelations/v1#",
   "delivery" : {
     "@id" : "availableDeliveryMethod",
     "@type" : "@vocab"
   },
   "RENT": "gr:LeaseOut"
  },
  "@type": "Movie",
  "name": "Pirates of the Carribean",
  "offer": {
    "delivery": "RENT"
   }
}

expands to the following in the http://json-ld.org/playground/

{
  "@type": "http://schema.org/Movie",
  "http://schema.org/name": "Pirates of the Carribean",
  "http://schema.org/offer": {
    "http://schema.org/availableDeliveryMethod": {
      "@id": "http://purl.org/goodrelations/v1#LeaseOut"
    }
  }
}

Thanks a lot!

Dietrich

-- 
Dietrich Schulten
Escalon System-Entwicklung
Bubenhalde 10
74199 Untergruppenbach
+49 172 7369456

Received on Sunday, 7 September 2014 11:51:19 UTC