- From: Dietrich Schulten <ds@escalon.de>
- Date: Sun, 22 Feb 2015 17:15:48 +0100
- To: public-hydra@w3.org
Disclaimer: there is still a glitch, see below for a possible solution.
Am 22.02.2015 um 14:19 schrieb Dietrich Schulten:
> Hi,
>
> Am 21.02.2015 um 16:18 schrieb Dietrich Schulten:
>
> {
> "@context": {
> "@vocab": "http://schema.org/",
> "hydra": "http://www.w3.org/ns/hydra/core#",
> "hydra:property": {"@type": "@vocab"}
> },
> "@type": "Order",
> "@id": "http://example.com/orders/1234",
> "orderedItem": [
> {
> "@type": "Product",
> "name": "Latte Macchiato",
> "@id": "http://example.com/orders/1234/items/1",
> "offers": {
> "@type": "Offer",
> "addOn": [
> {
> "@type": "Offer",
> "itemOffered": {
> "@type": "Product",
> "@id": "http://example.com/orders/1234/items/1/addOns",
> "name": "shot",
> "hydra:operation": {
> "hydra:httpMethod": "POST",
> "@type": "OrderAction",
> "hydra:expects": {
> "@type": "Product",
> "hydra:supportedProperty": [
> {
> "hydra:property": "name",
> "hydra:required": true,
> "defaultValue": "shot",
> "readOnlyValue": true
> }
> ]
> }
> }
> },
> "price": 0.2,
> "priceCurrency": "EUR"
> },
> {
> "@type": "Offer",
> "itemOffered": {
> "@type": "Product",
> "@id": "http://example.com/orders/1234/items/1/addOns",
> "name": "Brioche con crema",
> "description": "Breakfast special",
> "hydra:operation": [
> {
> "hydra:httpMethod": "POST",
> "@type": "OrderAction",
> "hydra:expects": {
> "@type": "Product",
> "hydra:supportedProperty": [
> {
> "hydra:property": "name",
> "hydra:required": true,
> "defaultValue": "Brioche con crema",
> "readOnlyValue": true
> }
> ]
> }
> }
> ]
> },
> "price": 1.00,
> "priceCurrency": "EUR"
> }
> ]
> }
> }
> ]
> }
>
Both products at the itemOffered properties share the same @id, namely
/orders/1234/items/1/addOns.
GET /orders/1234/items/1/addOns would have to return a collection of
extras which have been added to the Latte Macchiato.
So the URI /orders/1234/items/1/addOns cannot be the @id of an itemOffered.
This shows a general design constraint: hydra:operation can only target
a http method on the @id of the surrounding subject.
A possible solution is to use hydra:collection as indirection. Now the
URI to POST to is the collection URI and the product on offer could have
its own URI.
{
"@context": {
"@vocab": "http://schema.org/",
"hydra": "http://www.w3.org/ns/hydra/core#",
"hydra:property": {"@type": "@vocab"}
},
"@type": "Order",
"@id": "http://example.com/orders/1234",
"orderedItem": [
{
"@type": "Product",
"name": "Latte Macchiato",
"@id": "http://example.com/orders/1234/items/1",
"offers": {
"@type": "Offer",
"addOn": [
{
"@type": "Offer",
"itemOffered": {
"@type": "Product",
"name": "shot",
"hydra:collection" : {
"@id": "http://example.com/orders/1234/items/1/addOns",
"hydra:operation": {
"hydra:httpMethod": "POST",
"@type": "OrderAction",
"hydra:expects": {
"@type": "Product",
"hydra:supportedProperty": [
{
"hydra:property": "name",
"hydra:required": true,
"defaultValue": "shot",
"readOnlyValue": true
}
]
}
}
}
},
"price": 0.2,
"priceCurrency": "EUR"
},
{
"@type": "Offer",
"itemOffered": {
"@type": "Product",
"name": "Brioche con crema",
"description": "Breakfast special",
"hydra:collection" : {
"@id": "http://example.com/orders/1234/items/1/addOns",
"hydra:operation": {
"hydra:httpMethod": "POST",
"@type": "OrderAction",
"hydra:expects": {
"@type": "Product",
"hydra:supportedProperty": [
{
"hydra:property": "name",
"hydra:required": true,
"defaultValue": "Brioche con crema",
"readOnlyValue": true
}
]
}
}
}
},
"price": 1.00,
"priceCurrency": "EUR"
}
]
}
}
]
}
Comments? Does anyone see more issues?
Best regards,
Dietrich
Received on Sunday, 22 February 2015 16:16:29 UTC