- From: Martynas Jusevicius <martynas@graphity.org>
- Date: Fri, 22 Nov 2013 15:12:11 +0100
- To: Markus Lanthaler <markus.lanthaler@gmx.net>
- Cc: Ruben Verborgh <ruben.verborgh@ugent.be>, public-lod Data <public-lod@w3.org>
Markus, in the Linked Data context, what is the difference between "identifier" and "hyperlink"? Last time I checked, URIs were opaque and there was no such distinction. Martynas On Thu, Nov 21, 2013 at 6:43 PM, Markus Lanthaler <markus.lanthaler@gmx.net> wrote: > +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 Friday, 22 November 2013 14:12:42 UTC