- From: Markus Lanthaler <markus.lanthaler@gmx.net>
- Date: Thu, 21 Nov 2013 18:43:46 +0100
- To: "'Ruben Verborgh'" <ruben.verborgh@ugent.be>
- Cc: "'public-lod Data'" <public-lod@w3.org>
+public-hydra since there are a couple of things which we should look at there as well On Thursday, November 21, 2013 3:03 PM, Ruben Verborgh wrote: > >> - representing hyperlinks in RDF (in addition to subject/object > >> URLs) > > > > hydra:Resource along with hydra:Link covers that: > > http://bit.ly/1b9IK32 > > And it does it the way I like: resource-oriented! > > Yet, the semantic gap I need to bridge is on the level of predicates. > None of the Hydra properties [1] have hydra:Link as range or domain. > So how to connect a link to a resource? Right, nothing has hydra:Link as range because it's a specialization of rdf:Property. The range would need to be hydra:Resource. Typically you would define your link relations, aka predicates, to express the semantic relationship between the two resources. If you want such a predicate to become a hypermedia affordance, you type it as hydra:Link instead of rdf:Property: vocab:homepage a hydra:Link . <a> vocab:homepage <b> That way even clients that know nothing about vocab:homepage will be able to find out that it is a link relation and that <b> is expected to be dereferenceable. The spec doesn't include any entailments yet (to not scare too many people away at this stage) but they would be xxx a hydra:Link . aaa xxx bbb . ==> bbb a hydra:Resource . > More or less like: > <a > href="http://en.wikipedia.org/wiki/Daft_Punk">http://dbpedia.org/resour > ce/Daft_Punk</a> > On the human Web, we do this all the time: > <a href="http://en.wikipedia.org/wiki/Daft_Punk">Daft Punk</a> > The difference of course with the Semantic Web is that the identifiers > need to be URIs, not labels. Right. Hydra provides a framework to define such things. It (currently) doesn't define a predicate for untyped hyperlinks because I believe they generally don't make much sense in a m2m context. Nevertheless, it may make sense to define something for very simple use case (crawlers) or to be able to express, e.g., links extracted from a HTML page. I raised ISSUE-15 [1] to keep track of this. > I guess a seeAlso would do, (but then again, seeAlso probably applies > to anything): > dbpedia:Daft_Punk rdfs:seeAlso wikipedia:Daft_Punk. > > However, I really want something stronger here. > But perhaps usual hyperlinks are not interesting enough, > as they can actually be represented as predicates (= typed links): > > dbpedia:Daft_Punk :hasArticle wikipedia:Daft_Punk. Right, but nothing here tell's you whether wikipedia:Daft_Punk is just an identifier or a hyperlink. If you type wikipedia:Daft_Punk as hydra:Resource or :hasArticle as hydra:Link it becomes explicit. > >> - representing URI templates [2] > > It's covered by hydra:IriTemplate: http://bit.ly/1e2z2NW > > Now this case is much more interesting than simple links :-) > > Same semantic problem for me though: > what predicates do I use to connect them to my resource? > For instance: > > </users> :membersHaveTemplate :UsersTemplate. > :UsersTemplate a hydra:IriTemplate; > hydra:template "/users/{userid}". Well, same thing in principle :membersHaveTemplate a hydra:TemplatedLink . Of course Hydra can't know what :membersHaveTemplate really *means*, i.e., in which relationship the two resource stand. It just allows you to tell a client that it's values are link templates and that you can use them to construct URLs which lead you to things that are of type hydra:Resource > So what I actually need is the equivalent of hydra:members, > but then with a template as range. > Should we discuss take this to the Hydra list? I'd be interested! Definitely.. I already CCed public-hydra. We should move the discussion there as it is quite specific to hydra. > (Also, have you considered hydra:template's range as something more > specific than xsd:string?) No, I'm not aware of any type representing RFC6570 IRI templates and didn't see the need to complicate Hydra by defining one :-) > >> - representing forms (in the HTML sense) > > In Hydra this is done by a combination of hydra:Operation, > hydra:expects and > > hydra:supportedProperties, see http://bit.ly/17t9ecB > > I like example 10 in that regard, but I'm stuck at predicates again: > how to connect the Link to the resource it applies to? I'm not sure I understand your question. Example 10 defines the property http://api.example.com/doc/#comments You can then simply use it in your data @prefix api: <http://api.example.com/doc/#> . </> api:comments </comments/> . The client can lookup what api:comments is. It will find out that it is a hydra:Link, so it represents a hyperlink. Furthermore, it will see that it can create new comments by POSTing a api:Comment to /comments/. Have you seen the issue tracker demo on my homepage? http://bit.ly/15i8rpp If you go to the entrypoint there's a JSON property "issues". If you move the mouse over it you'll see that it expands to vocab:EntryPoint/issues if you dereference that URL [2] you'll get its definition: { "@id": "vocab:EntryPoint/issues", "@type": "hydra:Link", "label": "issues", "description": "The collection of all issues", "domain": "vocab:EntryPoint", "range": "http://purl.org/hydra/core#Collection", "supportedOperations": [ { "@id": "_:issue_create", "method": "POST", "label": "Creates a new Issue entity", "description": null, "expects": "vocab:Issue", "returns": "vocab:Issue", "statusCodes": [ { "code": 201, "description": "If the Issue entity was created successfully." } ] }, ... ] } along with the definition of vocab:Issue, this gives a hypermedia client all the necessary information to dynamically render a form that can be used to create a new issue. Did this clarify things a bit? Cheers, Markus [1] https://github.com/HydraCG/Specifications/issues/15 [2] http://www.markus-lanthaler.com/hydra/api-demo/vocab -- Markus Lanthaler @markuslanthaler
Received on Thursday, 21 November 2013 17:44:28 UTC