Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
127 changes: 123 additions & 4 deletions spec/latest/core/core.jsonld
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,19 @@
"mapping": "hydra:mapping",
"IriTemplateMapping": "hydra:IriTemplateMapping",
"variable": "hydra:variable",
"skip": { "@id": "hydra:skip", "@type": "xsd:integer" },
"take": { "@id": "hydra:take", "@type": "xsd:integer" },
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think that skip/take are too specific go beyond Hydra Core. Sound more like Data than generic API description language.

I agree it's a desired feature but maybe this could became part of an extension focused on handling collections in different way?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If it is a desired feature, it should be provided in the core. I'm opened for alternative approaches though. These are just terms that are commonly used in other querying languages like SQL (TOP, LIMIT), LINQ (Skip, Take), etc.

"returnsHeader": { "@id": "hydra:returnsHeader", "@type": "xsd:string" },
"expectsHeader": { "@id": "hydra:expectsHeader", "@type": "xsd:string" },
"mediaType": { "@id": "hydra:mediaType", "@type": "hydra:MediaType" },
"MediaType": "hydra:MediaType",
"Header": "hydra:Header",
"HeaderTemplate": "hydra:HeaderTemplate",
"MediaTypedResource": "hydra:MediaTypedResource",
"CollectionSpecification": "hydra:CollectionSpecification",
"Template": "hydra:Template",
"headerName": { "@id": "hydra:headerName", "@type": "xsd:string" },
"target": { "@id": "hydra:target", "@type": "@id" },
"defines": { "@reverse": "rdfs:isDefinedBy" },
"comment": "rdfs:comment",
"label": "rdfs:label",
Expand Down Expand Up @@ -240,7 +253,7 @@
"label": "expects",
"comment": "The information expected by the Web API.",
"domain": "hydra:Operation",
"range": "hydra:Class",
"range": "hydra:Resource",
"vs:term_status": "testing"
},
{
Expand All @@ -249,7 +262,7 @@
"label": "returns",
"comment": "The information returned by the Web API on success",
"domain": "hydra:Operation",
"range": "hydra:Class",
"range": "hydra:Resource",
"vs:term_status": "testing"
},
{
Expand Down Expand Up @@ -428,7 +441,7 @@
{
"@id": "hydra:IriTemplate",
"@type": "hydra:Class",
"subClassOf": "hydra:Resource",
"subClassOf": ["hydra:Template", "hydra:Resource"],
"label": "IRI Template",
"comment": "The class of IRI templates.",
"vs:term_status": "testing"
Expand Down Expand Up @@ -485,7 +498,7 @@
"@type": "rdf:Property",
"label": "mapping",
"comment": "A variable-to-property mapping of the IRI template.",
"domain": "hydra:IriTemplate",
"domain": "hydra:Template",
"range": "hydra:IriTemplateMapping",
"vs:term_status": "testing"
},
Expand All @@ -505,6 +518,112 @@
"domain": "hydra:IriTemplateMapping",
"range": "xsd:string",
"vs:term_status": "testing"
},
{
"@id": "hydra:target",
"@type": "rdf:Property",
"label": "invocation target",
"comment": "Explicit target of the invocation of the operation.",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Related to #154?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yep, as it is stated in the PR's description at the very beginning

"domain": "hydra:Operation",
"rangeIncludes": ["hydra:IriTemplate", "hydra:Resource"],
"vs:term_status": "testing"
},
{
"@id": "hydra:returnsHeader",
"@type": "rdf:Property",
"label": "returns header",
"comment": "Name of the header returned by the operation.",
"domain": "hydra:Operation",
"range": "xsd:string",
"vs:term_status": "testing"
},
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How about possibleResponseHeader? That ways it's aligned with possibleStatus and HTTP terminology

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I actually tried to be consistent with returns/expects. Indeed, for returned header possible may work. For expected it won't

{
"@id": "hydra:expectsHeader",
"@type": "rdf:Property",
"label": "expects header",
"comment": "Specification of the header expected by the operation.",
"domain": "hydra:Operation",
"rangeIncludes": ["hydra:Header", "hydra:HeaderTemplate"],
"vs:term_status": "testing"
},
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ditto, I propose to rename to requestHeader for example

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While I believe both returned and expected headers should be connected to each other conceptually, this name is OK for me. For returned it should be then responseHeader

{
"@id": "hydra:Template",
"@type": "rdfs:Class",
"label": "Template",
"comment": "Some abstract template.",
"vs:term_status": "testing"
},
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is way too vague. Why do you think we need an "abstract template"? Sound very much like OOP

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was for backward compatibility - I didn't want to introduce another term for template in headers, thus I had to revamp the domain of the existing one. I also didn't want to replace domain with other predicate, thus this is why the abstract

{
"@id": "hydra:Header",
"@type": "rdfs:DataType",
"label": "Header",
"comment": "Specification of the header, including name and value(s).",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wonder, what is the current stand on Hydra vs HTTP?

I mean, adding headers to the core signifies a close relation with the protocol. Did we ever decide to keep Hydra somewhat agnostic in that regard?

@RubenVerborgh @lanthaler

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are possibleStatus and method - these are already quite strictly bound to the protocol. Also headers are not HTTP specific - other protocols may have similar notion. SOAP is a bad example here (as it can be over HTTP), but the envelope has a notion of the header as well.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Point taken

"vs:term_status": "testing"
},
{
"@id": "hydra:HeaderTemplate",
"@type": "rdfs:Class",
"subClassOf": "hydra:Template",
"label": "Header template",
"comment": "Specification of the header template with variables to be replaced with actual values.",
"vs:term_status": "testing"
},
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is the practical need for this Header template?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was just wondering i.e. about an Authorization header where you mark the authorization scheme and the secret following it. Maybe other vendor-specific headers would require this.
In general, this is indeed a feature covering exotic scenarios.

{
"@id": "hydra:headerName",
"@type": "rdf:Property",
"label": "header name",
"comment": "Name of the header.",
"domain": "hydra:HeaderTemplate",
"range": "xsd:string",
"vs:term_status": "testing"
},
{
"@id": "hydra:MediaTypedResource",
"@type": "rdfs:Class",
"subClassOf": "hydra:Resource",
"label": "Resource with media type",
"comment": "Resource that has an RFC 6838 compliant media type specified.",
"vs:term_status": "testing"
},
{
"@id": "hydra:mediaType",
"@type": "rdf:Property",
"label": "media type",
"comment": "Points to the RFC 6838 compliant media type specification.",
"domain": "hydra:MediaTypedResource",
"range": "hydra:MediaType",
"vs:term_status": "testing"
},
{
"@id": "hydra:MediaType",
"@type": "rdfs:DataType",
"label": "Media type",
"comment": "An RFC 6838 compliant media type specification.",
"vs:term_status": "testing"
},
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The media type stuff is cool in principle but how does it relate to the other changes within this PR?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wanted to enable hydra to expect/return resources other than RDF. One of the approach of describing a resource would be to use the media type, i.e. for JPG or DOCX file that would be expected by the API

{
"@id": "hydra:CollectionSpecification",
"@type": "rdfs:Class",
"subClassOf": "hydra:Collection",
"label": "Collection specification",
"comment": "Describes a collection returned by the operation.",
"vs:term_status": "testing"
},
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Where does that come from? How would this come up against the "manages block"? Sounds similar

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ther was an issue on denoting on the API what the collection describes. This was an attempt of enabling that part of the spec with such a description.

{
"@id": "hydra:skip",
"@type": "rdf:Property",
"label": "skip",
"comment": "Instructs to skip N elements of the set.",
"range": "xsd:integer",
"vs:term_status": "testing"
},
{
"@id": "hydra:take",
"@type": "rdf:Property",
"label": "take",
"comment": "Instructs to limit set only to N elements.",
"range": "xsd:integer",
"vs:term_status": "testing"
}
]
}
1 change: 1 addition & 0 deletions spec/latest/core/diagram.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<mxfile modified="2019-02-05T19:54:49.436Z" host="www.draw.io" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0" etag="Z2rhXDptmFDliVCD3Pqa" version="10.1.3-4" type="device"><diagram id="XnWQGJoGxgPmXKETyfLD" name="Page-1">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</diagram></mxfile>
Binary file modified spec/latest/core/vocabulary.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.