Re: representing hypermedia controls in RDF
Hi Gannon, [Sorry for the delay, your mail accidentally skipped my inbox!] My question can be rephrased thus: Does the theoretical size of the target audience for a distributed affordance matter ? The audience size doesn't matter, as each user has personal preferences. The idea is that the client has an extra piece of intelligence that adds the actions the user cares about. For instance, if you prefer to see movies in a certain theatre and always buy books through Barnes Noble, then you will bookmark those actions. When your client (browser) then arrives on a page with a movie or book, it will automatically insert links to buy tickets for that theatre or order through Barnes Noble, instead of suggesting Netflix, Amazon or iTunes. As the processing happens on the client side, we can scale without impacting the infrastructure. It seems to me that distributed entails that one size fits does not fit all clients, that constrains the Open World … Exactly! But this is why the client performs the adaptation: it's personalized and scalable in the number of clients. Is this the answer you're looking for? Additionally, the diagram in http://ruben.verborgh.org/publications/verborgh_wsrest_2013/ might clarify things. Best, Ruben
Re: representing hypermedia controls in RDF
On 11/25/13 6:47 PM, mike amundsen wrote: snipI still believe that one can talk about REST concepts accurately and fluently without the word Affordance ./snip and who said it could not? why are you saying this kind of stuff here? As you can see from the recent exchange between Ruben and I, this isn't as obvious as you assume. My fundamental goal is simply to be clear about the use of Affordance with regards to REST narratives -- for myself, and hopefully others. if you don't want to use this word, don't. are you trying to tell me i cannot use it? I was trying to determine if this word is indeed immutable with regards to REST. Anyway, now that this matter is cleared up, I think we can move on to others tasks such as harmonizing REST and Linked Data [1] :-) [1] http://www.w3.org/community/hydra/ . Kingsley mamund +1.859.757.1449 skype: mca.amundsen http://amundsen.com/blog/ http://twitter.com/mamund https://github.com/mamund http://www.linkedin.com/in/mamund On Mon, Nov 25, 2013 at 6:20 PM, Kingsley Idehen kide...@openlinksw.com mailto:kide...@openlinksw.com wrote: On 11/25/13 5:03 PM, Ruben Verborgh wrote: Hi Kingsley Note, Affordance doesn't show up in any of the standard dictionaries I have access to. That said, it does have a Wiktionary entry [1], but that particular definition doesn't actually make a case for it being immutable or devoid of an alternative :-) Norman's The Design of Everyday Things describes the word nicely. In case it is of any help, my understanding of the word affordance is based on the verb: - a URL enables addressing a resource = the URL is an enabler; - the link affords going to the resource = the link is an affordance. Best, Ruben Which can also read as follows, without any loss of meaning: - a URL enables resource naming = a URL is an identifier since it enables resource denotation (naming); - the link facilitates resource retrieval = the link is a *facilitator* . I still believe that one can talk about REST concepts accurately and fluently without the word Affordance . [1] http://www.merriam-webster.com/dictionary/facilitator . -- Regards, Kingsley Idehen Founder CEO OpenLink Software Company Web: http://www.openlinksw.com Personal Weblog: http://www.openlinksw.com/blog/~kidehen http://www.openlinksw.com/blog/%7Ekidehen Twitter Profile: https://twitter.com/kidehen Google+ Profile: https://plus.google.com/+KingsleyIdehen/about LinkedIn Profile: http://www.linkedin.com/in/kidehen -- Regards, Kingsley Idehen Founder CEO OpenLink Software Company Web: http://www.openlinksw.com Personal Weblog: http://www.openlinksw.com/blog/~kidehen Twitter Profile: https://twitter.com/kidehen Google+ Profile: https://plus.google.com/+KingsleyIdehen/about LinkedIn Profile: http://www.linkedin.com/in/kidehen smime.p7s Description: S/MIME Cryptographic Signature
Re: representing hypermedia controls in RDF
Hi Kingsley, Are words such as enables , facilitates etc.. so bad that we can no longer make statements like: a/ enables name to address indirection in HTML via URIs? Basically, that it enables exploitation URI serve dually as a document name and a content access address i.e., a hyperlink. Would REST be less useful if the word affordance wasn't engrained in its narrative? In my talks, I say that enabling is stronger than affording. You can visit the page without the link, that's enabled by the server. (E.g., you can copy/paste a URI in to the address bar.) However, the link affords it: it has an actionable property that lets you do it directly (even though you could do it without). Best, Ruben
Re: representing hypermedia controls in RDF
On 11/25/13 8:22 AM, Ruben Verborgh wrote: Hi Kingsley, Are words such as enables , facilitates etc.. so bad that we can no longer make statements like: a/ enables name to address indirection in HTML via URIs? Basically, that it enables exploitation URI serve dually as a document name and a content access address i.e., a hyperlink. Would REST be less useful if the word affordance wasn't engrained in its narrative? In my talks, I say that enabling is stronger than affording. You can visit the page without the link, that's enabled by the server. (E.g., you can copy/paste a URI in to the address bar.) However, the link affords it: it has an actionable property that lets you do it directly (even though you could do it without). Best, Ruben Ruben, Do you have a link to the talk in question? -- Regards, Kingsley Idehen Founder CEO OpenLink Software Company Web: http://www.openlinksw.com Personal Weblog: http://www.openlinksw.com/blog/~kidehen Twitter Profile: https://twitter.com/kidehen Google+ Profile: https://plus.google.com/+KingsleyIdehen/about LinkedIn Profile: http://www.linkedin.com/in/kidehen smime.p7s Description: S/MIME Cryptographic Signature
Re: representing hypermedia controls in RDF
Hi Kingsley, In my talks, I say that enabling is stronger than affording. Do you have a link to the talk in question? Well, it's something I always mention verbally, so enabling will not be on the slides. Nevertheless, here's a presentation on it for a wide audience: http://www.slideshare.net/RubenVerborgh/the-web-a-hypermedia-story On slides 41–46, I explain Fielding's definition of hypermedia, with slides 44–46 specifically focusing on affordance. And here are slides for my research project Distributed Affordance (what's in a name), which explains the topic in a similar way on slides 7–18: http://www.slideshare.net/RubenVerborgh/distributed-affordance-21175728 Affordance is in my opinion the crucial word that defines the REST architectural style, as its loose conversational coupling is only possible because representations _afford_ subsequent actions; RPC-style interactions just _enable_ those actions. Best, Ruben
Re: representing hypermedia controls in RDF
On 11/25/13 2:33 PM, Ruben Verborgh wrote: Hi Kingsley, In my talks, I say that enabling is stronger than affording. Do you have a link to the talk in question? Well, it's something I always mention verbally, so enabling will not be on the slides. Nevertheless, here's a presentation on it for a wide audience: http://www.slideshare.net/RubenVerborgh/the-web-a-hypermedia-story On slides 41–46, I explain Fielding's definition of hypermedia, with slides 44–46 specifically focusing on affordance. And here are slides for my research project Distributed Affordance (what's in a name), which explains the topic in a similar way on slides 7–18: http://www.slideshare.net/RubenVerborgh/distributed-affordance-21175728 Affordance is in my opinion the crucial word that defines the REST architectural style, as its loose conversational coupling is only possible because representations _afford_ subsequent actions; RPC-style interactions just _enable_ those actions. Best, Ruben I will digest you presentation, and then comment afterwards (*more than likely off-list*) on the word Affordance and whether it is immutable with regards to REST oriented narratives. Note, Affordance doesn't show up in any of the standard dictionaries I have access to. That said, it does have a Wiktionary entry [1], but that particular definition doesn't actually make a case for it being immutable or devoid of an alternative :-) -- Regards, Kingsley Idehen Founder CEO OpenLink Software Company Web: http://www.openlinksw.com Personal Weblog: http://www.openlinksw.com/blog/~kidehen Twitter Profile: https://twitter.com/kidehen Google+ Profile: https://plus.google.com/+KingsleyIdehen/about LinkedIn Profile: http://www.linkedin.com/in/kidehen smime.p7s Description: S/MIME Cryptographic Signature
Re: representing hypermedia controls in RDF
Hi Ruben, I haven't been able to pull up your distributed affordance presentation but had a general question: Are you thinking in terms of IPv4 or IPv6 ? I think it makes a difference, since the Loop Back address space in IPv4 (16,777,214) puts ca. 425 people (of about 7,126,653,500 people, today, US Census Estimate) on one anonymous node. IPv6 is much different, but it seems to me 425 people sharing a party line is much different communication than private. Is privacy dead because we ran out of virtual mail boxes ? Yikes. --Gannon On Mon, 11/25/13, Ruben Verborgh ruben.verbo...@ugent.be wrote: Subject: Re: representing hypermedia controls in RDF To: Kingsley Idehen kide...@openlinksw.com Cc: public-lod Data public-lod@w3.org Date: Monday, November 25, 2013, 1:33 PM Hi Kingsley, In my talks, I say that enabling is stronger than affording. Do you have a link to the talk in question? Well, it's something I always mention verbally, so enabling will not be on the slides. Nevertheless, here's a presentation on it for a wide audience: http://www.slideshare.net/RubenVerborgh/the-web-a-hypermedia-story On slides 41–46, I explain Fielding's definition of hypermedia, with slides 44–46 specifically focusing on affordance. And here are slides for my research project Distributed Affordance (what's in a name), which explains the topic in a similar way on slides 7–18: http://www.slideshare.net/RubenVerborgh/distributed-affordance-21175728 Affordance is in my opinion the crucial word that defines the REST architectural style, as its loose conversational coupling is only possible because representations _afford_ subsequent actions; RPC-style interactions just _enable_ those actions. Best, Ruben
Re: representing hypermedia controls in RDF
Hi Kingsley Note, Affordance doesn't show up in any of the standard dictionaries I have access to. That said, it does have a Wiktionary entry [1], but that particular definition doesn't actually make a case for it being immutable or devoid of an alternative :-) Norman's The Design of Everyday Things describes the word nicely. In case it is of any help, my understanding of the word affordance is based on the verb: - a URL enables addressing a resource = the URL is an enabler; - the link affords going to the resource = the link is an affordance. Best, Ruben
Re: representing hypermedia controls in RDF
Hi Gannon, Are you thinking in terms of IPv4 or IPv6 ? I'm sorry but I lost you here… how can I IPv4/6 relate to this? Best, Ruben
Re: representing hypermedia controls in RDF
http://en.wikipedia.org/wiki/Affordance mamund +1.859.757.1449 skype: mca.amundsen http://amundsen.com/blog/ http://twitter.com/mamund https://github.com/mamund http://www.linkedin.com/in/mamund On Mon, Nov 25, 2013 at 5:03 PM, Ruben Verborgh ruben.verbo...@ugent.bewrote: Hi Kingsley Note, Affordance doesn't show up in any of the standard dictionaries I have access to. That said, it does have a Wiktionary entry [1], but that particular definition doesn't actually make a case for it being immutable or devoid of an alternative :-) Norman's The Design of Everyday Things describes the word nicely. In case it is of any help, my understanding of the word affordance is based on the verb: - a URL enables addressing a resource = the URL is an enabler; - the link affords going to the resource = the link is an affordance. Best, Ruben
Re: representing hypermedia controls in RDF
I did see the presentation. Apparently Dr. Hausenblas may have warned you about me too late :-) My question can be rephrased thus: Does the theoretical size of the target audience for a distributed affordance matter ? In IPv4, the target audience would be a community with a population of about 425. In IPv6, probably much less than one (although I've not calculated it). It seems to me that distributed entails that one size fits does not fit all clients, that constrains the Open World ... so, it would be very hard to tell if the concept and architecture are in operation. Maybe TBL needs a 6th Star. On Mon, 11/25/13, Ruben Verborgh ruben.verbo...@ugent.be wrote: Subject: Re: representing hypermedia controls in RDF To: Gannon Dick gannon_d...@yahoo.com Cc: public-lod Data public-lod@w3.org Date: Monday, November 25, 2013, 4:05 PM Hi Gannon, Are you thinking in terms of IPv4 or IPv6 ? I'm sorry but I lost you here… how can I IPv4/6 relate to this? Best, Ruben
Re: representing hypermedia controls in RDF
On 11/25/13 5:03 PM, Ruben Verborgh wrote: Hi Kingsley Note, Affordance doesn't show up in any of the standard dictionaries I have access to. That said, it does have a Wiktionary entry [1], but that particular definition doesn't actually make a case for it being immutable or devoid of an alternative :-) Norman's The Design of Everyday Things describes the word nicely. In case it is of any help, my understanding of the word affordance is based on the verb: - a URL enables addressing a resource = the URL is an enabler; - the link affords going to the resource = the link is an affordance. Best, Ruben Which can also read as follows, without any loss of meaning: - a URL enables resource naming = a URL is an identifier since it enables resource denotation (naming); - the link facilitates resource retrieval = the link is a *facilitator* . I still believe that one can talk about REST concepts accurately and fluently without the word Affordance . [1] http://www.merriam-webster.com/dictionary/facilitator . -- Regards, Kingsley Idehen Founder CEO OpenLink Software Company Web: http://www.openlinksw.com Personal Weblog: http://www.openlinksw.com/blog/~kidehen Twitter Profile: https://twitter.com/kidehen Google+ Profile: https://plus.google.com/+KingsleyIdehen/about LinkedIn Profile: http://www.linkedin.com/in/kidehen smime.p7s Description: S/MIME Cryptographic Signature
Re: representing hypermedia controls in RDF
snipI still believe that one can talk about REST concepts accurately and fluently without the word Affordance ./snip and who said it could not? why are you saying this kind of stuff here? if you don't want to use this word, don't. are you trying to tell me i cannot use it? mamund +1.859.757.1449 skype: mca.amundsen http://amundsen.com/blog/ http://twitter.com/mamund https://github.com/mamund http://www.linkedin.com/in/mamund On Mon, Nov 25, 2013 at 6:20 PM, Kingsley Idehen kide...@openlinksw.comwrote: On 11/25/13 5:03 PM, Ruben Verborgh wrote: Hi Kingsley Note, Affordance doesn't show up in any of the standard dictionaries I have access to. That said, it does have a Wiktionary entry [1], but that particular definition doesn't actually make a case for it being immutable or devoid of an alternative :-) Norman's The Design of Everyday Things describes the word nicely. In case it is of any help, my understanding of the word affordance is based on the verb: - a URL enables addressing a resource = the URL is an enabler; - the link affords going to the resource = the link is an affordance. Best, Ruben Which can also read as follows, without any loss of meaning: - a URL enables resource naming = a URL is an identifier since it enables resource denotation (naming); - the link facilitates resource retrieval = the link is a *facilitator* . I still believe that one can talk about REST concepts accurately and fluently without the word Affordance . [1] http://www.merriam-webster.com/dictionary/facilitator . -- Regards, Kingsley Idehen Founder CEO OpenLink Software Company Web: http://www.openlinksw.com Personal Weblog: http://www.openlinksw.com/blog/~kidehen Twitter Profile: https://twitter.com/kidehen Google+ Profile: https://plus.google.com/+KingsleyIdehen/about LinkedIn Profile: http://www.linkedin.com/in/kidehen
Re: representing hypermedia controls in RDF
On Thu, Nov 21, 2013 at 1:01 PM, Markus Lanthaler markus.lantha...@gmx.net wrote: +public-hydra On Thursday, November 21, 2013 5:11 PM, Mark Baker wrote: Cool. Very similar to RDF Forms in important ways, though I think RDF Forms internalizes some useful features that Hydra could benefit from; stripping out information that isn't required (or isn't an optimization) for a state transition, e.g. DeleteResourceOperation. Right, we already discussed removing all those prefided *ResourceOperations. The only reason I included them in the first place was to bootstrap the system so that developers could build simple CRUD-based systems without having to define these things themselves. This is ISSUE-5 [1] btw. :-) Yep, I started down that path too. Then I had to use it :) PUT should also be usable without any required parameterization, Not so convinced about that.. It's a relatively minor point, but the idea there is that the common case will involve retrieving a representation, modifying it, then PUTting it back. Obviously the media type of initially retrieved representation is all you need in that case. Not to suggest it's the only case, though, so I'm all for non-authoritative optimizations. though declaring an accepted media type (something that seems to be missing from hydra) Right.. Hydra currently assumes the client uses the media type it used to retrieve the API documentation or the entry point for its requests. This leaves binaries out, I know. It isn't currently specified but I think that could be handled by specific classes together with hydra:expects as well. I haven't quite figured out hydra:expects. The examples show that it's something other than a media type, and moreover, something (e.g. comment) which I'd normally use a predicate/rel for. can be considered an optimization. And POST can be used for much more than creation, so I think CreateResourceOperation is a misnomer (or else overly specific). Of course.. that's the whole reason that Operations thing exists in the first place. But it isn't Hydra's job to define them. Concrete APIs will create their own by subclassing Operation (or one of the three others unless we remove it). Ok. Also, the next version of RDF Forms has been sitting in my head for a few years after collecting a little bit of experience with the current version. One of the big changes I would make is to go fully predicate based rather than class based simply because I expect it would be more flexible and also fit better into, e.g. HTML or the Link header. So if I had a POST-accepting resource, instead of this: http://example.org/res1 a hydra:CreateResourceOperation . I'd go with; hydra:sink http://example.org/res1 . (yah, that example represents at least 3 improvements I'd suggest for the language - sorry if it's too dense) Indeed. I don't understand that example at all. Could you explain it a bit more in detail? Well, the most important difference is the use of the predicate. The intent there is that if you consider the two resources in play - the one containing the form/affordances, and the one receiving the data that results from the form being used - then they share a generic relationship which can be called a sink, aka The second resource acts as a sink for data that emerges as a result of the affordances in the first being followed. So sink is 1-to-1 with HTTP POST, and would of course require additional parameterization, but that's the gist. For documents containing multiple forms, I guess you'd want a subject that wasn't the document itself, but some identifier for the form; and you'd also need that same id to hook the parameters to, obv. [1] https://github.com/HydraCG/Specifications/issues/5 We may or may not need one depending how we connect parameterization to operations after the required decisions surrounding them have been mode. Obviously we need to support parameterized GET requests though. And FWIW, I don't like the Link construct. If the publisher doesn't want me to crawl some particular subset of their URI space, they should describe that space in robots.txt.
RE: representing hypermedia controls in RDF
On Thursday, November 21, 2013 10:43 PM, Kingsley Idehen wrote: On 11/21/13 4:18 PM, Markus Lanthaler wrote: Anyway, do you have a URL for a Turtle doc? No, as I said, at the moment I don't serve a Turtle version. Of course you can use a translator to turn the JSON-LD into Turtle (but you know that).. here's a link http://bit.ly/hydra-core-ttl just in case. As I said, in a related post, let's not inadvertently introduce problems for existing Linked Data tools. JSON-LD and TURTLE is much better than JSON-LD only. Thus, all you have to do is incorporate the URL above into the doc that's currently missing said reference :-) Done. Cheers, Markus -- Markus Lanthaler @markuslanthaler smime.p7s Description: S/MIME cryptographic signature
Re: representing hypermedia controls in RDF
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.lantha...@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?
Re: representing hypermedia controls in RDF
Hey Ruben, regarding RFC6570, I'm not planning to adopt it, since the specification is better suited for building URIs, not matching them (1.4 Limitations): In general, regular expression languages are better suited for variable matching I'm using JAX-RS syntax since it can be used for matching and building, and has utility classes that help you do that. I don't like how Linked Data API uses endpoints either. I reuse api:ListEndpoint in some of Graphity ontologies, but give it no special meaning. If I understand right what you want, I am using SIOC to define the parent/child relationship between resources (which is usually represented by a slash in the URI): http://rdfs.org/sioc/spec/#term_Container In your case, it could be: /topics a sioc:Container . /topics/Global_Warming sioc:has_space /topics . Cheers, Martynas graphityhq.com On Wed, Nov 20, 2013 at 4:52 PM, Ruben Verborgh ruben.verbo...@ugent.be wrote: Hi Martynas, - URI templates: Linked Data API vocabulary https://code.google.com/p/linked-data-api/wiki/API_Vocabulary Cool, I do like that. Have you thought about extending to RFC6570? Do you know about usage of this vocabulary? The one thing that I like less is the notion of endpoints. While this is perfect for SPARQL, which is indeed an endpoint or “data-handling process” that expects a “block of data” [1], it does not work well in resource-oriented environments. I’m looking for predicates that work with groups of resource, such as: /topics/Global_Warming :belongsTo /topics. /topics a :ResourceList; api:itemTemplate /topics/{topicID}. That is, I don't consider there to be a topics endpoint; instead, there is a topics resource which lists several topics, and individual topics can be accessed by ID. The reason I would still need the template is because /topics/ is not exhaustive, and new elements can be created by following the template. This would be equivalent to a HTML GET form. - HTML forms: RDF/POST encoding http://www.lsrn.org/semweb/rdfpost.html Interesting, thanks! Best, Ruben [1] http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.5
RE: representing hypermedia controls in RDF
Hi Martynas, On Friday, November 22, 2013 3:12 PM, Martynas Jusevičius wrote: 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. These things quickly turn into philosophical discussions but simply speaking the difference lies in the expectations of a client. In XML for example, namespaces are just identifiers. There's no expectation that you can go and dereference that namespace identifier (even though in most cases they use HTTP URIs). The same is true about RDF. All URIs are just identifiers. From an RDF point of view, there's no difference between isbn:343-224122 and http://example.com/343-224122. As you say, they are opaque. But if you build applications, it is important to distinguish between identifiers and hyperlinks. A browser for example doesn't render the string http://example.com/343-224122 as a clickable link unless you mark it up as one using the a tag. Linked Data advocates that all URIs are dereferenceable. But that's communicated out of band. Apart from JSON-LD, which states that URIs SHOULD be dereferenceable, no other RDF media type makes such a statement. Thus you need to use constructs such as hydra:Link and hydra:Resource to make the distinction explicit. Hope this helps. If not, let me know. -- Markus Lanthaler @markuslanthaler
Re: representing hypermedia controls in RDF
snip A browser for example doesn't render the string http://example.com/343-224122 as a clickable link unless you mark it up as one using the a tag. /snip Yep, the A element is the thing that _affords_ clicking. it is the A element which is the affordance. Affordances don't just supply addresses, they supply information about what you can _do_ with that address (navigate, transclude, send arguments, write data, remove data, etc.). The appearance of a URL alone provides very little affordance. For example: - http://example.com/x - http://example.com/y one of the two URLs points to a blog page to which the user can navigate, the other points to a logo which should be displayed inline. which is which? Now this: - a href=...blog/a - img href=... / one of the two URLs points to a blog page, the other points to a logo. which is which? Note it is not the URL that provides the information (which is for navigation, which is for transclusion), but the element in which the URL appears. The element is the affordance. These are HTML affordances. There are a couple more hypermedia affordances in HTML. Other message models (media types) contain their own affordances. It is the appearance of affordances within the response representation that is a key characteristic of hypermedia messages. mamund +1.859.757.1449 skype: mca.amundsen http://amundsen.com/blog/ http://twitter.com/mamund https://github.com/mamund http://www.linkedin.com/in/mamund On Fri, Nov 22, 2013 at 10:13 AM, Markus Lanthaler markus.lantha...@gmx.net wrote: Hi Martynas, On Friday, November 22, 2013 3:12 PM, Martynas Jusevičius wrote: 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. These things quickly turn into philosophical discussions but simply speaking the difference lies in the expectations of a client. In XML for example, namespaces are just identifiers. There's no expectation that you can go and dereference that namespace identifier (even though in most cases they use HTTP URIs). The same is true about RDF. All URIs are just identifiers. From an RDF point of view, there's no difference between isbn:343-224122 and http://example.com/343-224122. As you say, they are opaque. But if you build applications, it is important to distinguish between identifiers and hyperlinks. A browser for example doesn't render the string http://example.com/343-224122 as a clickable link unless you mark it up as one using the a tag. Linked Data advocates that all URIs are dereferenceable. But that's communicated out of band. Apart from JSON-LD, which states that URIs SHOULD be dereferenceable, no other RDF media type makes such a statement. Thus you need to use constructs such as hydra:Link and hydra:Resource to make the distinction explicit. Hope this helps. If not, let me know. -- Markus Lanthaler @markuslanthaler
Re: representing hypermedia controls in RDF
Mike, so if RDF representation includes a triple such as http://example.com/x a foaf:Image . is that an affordance? Because that gives me enough information to render it as img src=http://example.com/x/. By the way, nothing stops me from having a href=isbn:343-224122 either. It will probably be clickable, but won't work. Martynas On Fri, Nov 22, 2013 at 4:42 PM, mike amundsen mam...@yahoo.com wrote: snip A browser for example doesn't render the string http://example.com/343-224122 as a clickable link unless you mark it up as one using the a tag. /snip Yep, the A element is the thing that _affords_ clicking. it is the A element which is the affordance. Affordances don't just supply addresses, they supply information about what you can _do_ with that address (navigate, transclude, send arguments, write data, remove data, etc.). The appearance of a URL alone provides very little affordance. For example: - http://example.com/x - http://example.com/y one of the two URLs points to a blog page to which the user can navigate, the other points to a logo which should be displayed inline. which is which? Now this: - a href=...blog/a - img href=... / one of the two URLs points to a blog page, the other points to a logo. which is which? Note it is not the URL that provides the information (which is for navigation, which is for transclusion), but the element in which the URL appears. The element is the affordance. These are HTML affordances. There are a couple more hypermedia affordances in HTML. Other message models (media types) contain their own affordances. It is the appearance of affordances within the response representation that is a key characteristic of hypermedia messages. mamund +1.859.757.1449 skype: mca.amundsen http://amundsen.com/blog/ http://twitter.com/mamund https://github.com/mamund http://www.linkedin.com/in/mamund On Fri, Nov 22, 2013 at 10:13 AM, Markus Lanthaler markus.lantha...@gmx.net wrote: Hi Martynas, On Friday, November 22, 2013 3:12 PM, Martynas Jusevičius wrote: 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. These things quickly turn into philosophical discussions but simply speaking the difference lies in the expectations of a client. In XML for example, namespaces are just identifiers. There's no expectation that you can go and dereference that namespace identifier (even though in most cases they use HTTP URIs). The same is true about RDF. All URIs are just identifiers. From an RDF point of view, there's no difference between isbn:343-224122 and http://example.com/343-224122. As you say, they are opaque. But if you build applications, it is important to distinguish between identifiers and hyperlinks. A browser for example doesn't render the string http://example.com/343-224122 as a clickable link unless you mark it up as one using the a tag. Linked Data advocates that all URIs are dereferenceable. But that's communicated out of band. Apart from JSON-LD, which states that URIs SHOULD be dereferenceable, no other RDF media type makes such a statement. Thus you need to use constructs such as hydra:Link and hydra:Resource to make the distinction explicit. Hope this helps. If not, let me know. -- Markus Lanthaler @markuslanthaler
Fwd: representing hypermedia controls in RDF
again - to the list! Yes, http://example.com/x a foaf:Image . is an affordance. of course, that affordance (like HTML.IMG) relies a number of expectations which most all of us recognize when we see it. From the network perspective, the expectations are (to keep it simple): - this is a safe[1] and idempotent[2] operation - an image media type to be returned. From the client application perspective, the expectations are: - use an HTTP.GET when executing this operation - take the results of the locator and transclude it into the existing view if any these expectations are not fulfilled, the affordance is usually considered broken (the network failed) or mis-used (the client did something else). snip By the way, nothing stops me from having a href=isbn:343-224122 either. It will probably be clickable, but won't work. /snip I would restate this as it is *possible* to have... since there is, actually something that stops you - the expectations of so many others who recognize this affordance. Think of the HTML.A as a door in a room. If i go up to a door, turn the handle, and nothing happens (I don't navigate to a new room), I consider the door broken or (as Donald Norman might say) that the door is lying to me. If I encounter a home where many of the doors act in this unexpected way, I find the experience off-putting. I might even judge the architect incompetent to, at the least, perverse. Now consider a hypermedia representation where many of the affordances are either not working as expected (as in your case) or are actually inscrutable to me; ones that just don't tell me enough to be usable. There is an advantage to using affordances in that they offer a shared understanding without the need for narrative or instructions. That's why we can drive most vehicles if we've already learned to drive one. Why we can operate most telephones, etc. Devices that have unfamiliar or counter-intuitive affordances are frustrating and, in some rare cases, can be dangerous. [1] http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.1.1 [2] http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.1.2 mamund +1.859.757.1449 skype: mca.amundsen http://amundsen.com/blog/ http://twitter.com/mamund https://github.com/mamund http://www.linkedin.com/in/mamund On Fri, Nov 22, 2013 at 12:16 PM, Martynas Jusevičius marty...@graphity.org wrote: Mike, so if RDF representation includes a triple such as http://example.com/x a foaf:Image . is that an affordance? Because that gives me enough information to render it as img src=http://example.com/x/. By the way, nothing stops me from having a href=isbn:343-224122 either. It will probably be clickable, but won't work. Martynas On Fri, Nov 22, 2013 at 4:42 PM, mike amundsen mam...@yahoo.com wrote: snip A browser for example doesn't render the string http://example.com/343-224122 as a clickable link unless you mark it up as one using the a tag. /snip Yep, the A element is the thing that _affords_ clicking. it is the A element which is the affordance. Affordances don't just supply addresses, they supply information about what you can _do_ with that address (navigate, transclude, send arguments, write data, remove data, etc.). The appearance of a URL alone provides very little affordance. For example: - http://example.com/x - http://example.com/y one of the two URLs points to a blog page to which the user can navigate, the other points to a logo which should be displayed inline. which is which? Now this: - a href=...blog/a - img href=... / one of the two URLs points to a blog page, the other points to a logo. which is which? Note it is not the URL that provides the information (which is for navigation, which is for transclusion), but the element in which the URL appears. The element is the affordance. These are HTML affordances. There are a couple more hypermedia affordances in HTML. Other message models (media types) contain their own affordances. It is the appearance of affordances within the response representation that is a key characteristic of hypermedia messages. mamund +1.859.757.1449 skype: mca.amundsen http://amundsen.com/blog/ http://twitter.com/mamund https://github.com/mamund http://www.linkedin.com/in/mamund On Fri, Nov 22, 2013 at 10:13 AM, Markus Lanthaler markus.lantha...@gmx.net wrote: Hi Martynas, On Friday, November 22, 2013 3:12 PM, Martynas Jusevičius wrote: 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. These things quickly turn into philosophical discussions but simply speaking the difference lies in the expectations of a client. In XML for example, namespaces are just identifiers. There's no expectation that you can go
Re: representing hypermedia controls in RDF
sigh... copying to the list this time. On Fri, Nov 22, 2013 at 1:10 PM, mike amundsen mam...@yahoo.com wrote: yep. In past writing/speaking I've drawn a line from James Gibson through Donald Norman and up to Roy Fielding[1] [1] http://amundsen.com/blog/archives/1109 mamund +1.859.757.1449 skype: mca.amundsen http://amundsen.com/blog/ http://twitter.com/mamund https://github.com/mamund http://www.linkedin.com/in/mamund On Fri, Nov 22, 2013 at 12:40 PM, Pat Hayes pha...@ihmc.us wrote: On Nov 22, 2013, at 9:42 AM, mike amundsen mam...@yahoo.com wrote: snip A browser for example doesn't render the string http://example.com/343-224122 as a clickable link unless you mark it up as one using the a tag. /snip Yep, the A element is the thing that _affords_ clicking. it is the A element which is the affordance. Just out of interest, as you using affordance in the same sense that it is used in ecological pyschology? ( http://en.wikipedia.org/wiki/Affordance) Pat Hayes Affordances don't just supply addresses, they supply information about what you can _do_ with that address (navigate, transclude, send arguments, write data, remove data, etc.). The appearance of a URL alone provides very little affordance. For example: - http://example.com/x - http://example.com/y one of the two URLs points to a blog page to which the user can navigate, the other points to a logo which should be displayed inline. which is which? Now this: - a href=...blog/a - img href=... / one of the two URLs points to a blog page, the other points to a logo. which is which? Note it is not the URL that provides the information (which is for navigation, which is for transclusion), but the element in which the URL appears. The element is the affordance. These are HTML affordances. There are a couple more hypermedia affordances in HTML. Other message models (media types) contain their own affordances. It is the appearance of affordances within the response representation that is a key characteristic of hypermedia messages. mamund +1.859.757.1449 skype: mca.amundsen http://amundsen.com/blog/ http://twitter.com/mamund https://github.com/mamund http://www.linkedin.com/in/mamund On Fri, Nov 22, 2013 at 10:13 AM, Markus Lanthaler markus.lantha...@gmx.net wrote: Hi Martynas, On Friday, November 22, 2013 3:12 PM, Martynas Jusevičius wrote: 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. These things quickly turn into philosophical discussions but simply speaking the difference lies in the expectations of a client. In XML for example, namespaces are just identifiers. There's no expectation that you can go and dereference that namespace identifier (even though in most cases they use HTTP URIs). The same is true about RDF. All URIs are just identifiers. From an RDF point of view, there's no difference between isbn:343-224122 and http://example.com/343-224122. As you say, they are opaque. But if you build applications, it is important to distinguish between identifiers and hyperlinks. A browser for example doesn't render the string http://example.com/343-224122 as a clickable link unless you mark it up as one using the a tag. Linked Data advocates that all URIs are dereferenceable. But that's communicated out of band. Apart from JSON-LD, which states that URIs SHOULD be dereferenceable, no other RDF media type makes such a statement. Thus you need to use constructs such as hydra:Link and hydra:Resource to make the distinction explicit. Hope this helps. If not, let me know. -- Markus Lanthaler @markuslanthaler IHMC (850)434 8903 home 40 South Alcaniz St.(850)202 4416 office Pensacola(850)202 4440 fax FL 32502 (850)291 0667 mobile (preferred) pha...@ihmc.us http://www.ihmc.us/users/phayes
Re: representing hypermedia controls in RDF
On 11/22/13 3:10 PM, mike amundsen wrote: sigh... copying to the list this time. On Fri, Nov 22, 2013 at 1:10 PM, mike amundsen mam...@yahoo.com mailto:mam...@yahoo.com wrote: yep. In past writing/speaking I've drawn a line from James Gibson through Donald Norman and up to Roy Fielding[1] [1] http://amundsen.com/blog/archives/1109 Are words such as enables , facilitates etc.. so bad that we can no longer make statements like: a/ enables name to address indirection in HTML via URIs? Basically, that it enables exploitation URI serve dually as a document name and a content access address i.e., a hyperlink. Would REST be less useful if the word affordance wasn't engrained in its narrative? [1] http://bit.ly/15tk1Au -- hash based URIs that denote things unambiguously while also making full use of HTTP URI duality [2] http://bit.ly/17RQQXX -- name resolution, data source names, and networks. -- Regards, Kingsley Idehen Founder CEO OpenLink Software Company Web: http://www.openlinksw.com Personal Weblog: http://www.openlinksw.com/blog/~kidehen Twitter Profile: https://twitter.com/kidehen Google+ Profile: https://plus.google.com/+KingsleyIdehen/about LinkedIn Profile: http://www.linkedin.com/in/kidehen smime.p7s Description: S/MIME Cryptographic Signature
RE: representing hypermedia controls in RDF
Hi Ruben, You probably already expected me asking this :-) Why not Hydra [1]? On Wed, 20 Nov 2013 11:23:08 +, Ruben Verborgh wrote: Do we have other approaches besides RDF Forms [1] to represent hypermedia controls in RDF? Basically, I'm looking for any of the following: - representing hyperlinks in RDF (in addition to subject/object URLs) hydra:Resource along with hydra:Link covers that: http://bit.ly/1b9IK32 - representing URI templates [2] It's covered by hydra:IriTemplate: http://bit.ly/1e2z2NW - 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 Btw. for those who don't know, there's a W3C Community Group working on Hydra [2]. Feel free to join at any time if you are interested in this stuff. Cheers, Markus [1] http://www.markus-lanthaler.com/hydra/ [2] http://www.w3.org/community/hydra/ -- Markus Lanthaler @markuslanthaler
Re: representing hypermedia controls in RDF
On 11/21/13 6:14 AM, Markus Lanthaler wrote: Hi Ruben, You probably already expected me asking this :-) Why not Hydra [1]? On Wed, 20 Nov 2013 11:23:08 +, Ruben Verborgh wrote: Do we have other approaches besides RDF Forms [1] to represent hypermedia controls in RDF? Basically, I'm looking for any of the following: - representing hyperlinks in RDF (in addition to subject/object URLs) hydra:Resource along with hydra:Link covers that: http://bit.ly/1b9IK32 - representing URI templates [2] It's covered by hydra:IriTemplate: http://bit.ly/1e2z2NW - 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 Btw. for those who don't know, there's a W3C Community Group working on Hydra [2]. Feel free to join at any time if you are interested in this stuff. Cheers, Markus [1] http://www.markus-lanthaler.com/hydra/ [2] http://www.w3.org/community/hydra/ -- Markus Lanthaler @markuslanthaler Markus, Is there a JSON-LD or Turtle version of this vocabulary? -- Regards, Kingsley Idehen Founder CEO OpenLink Software Company Web: http://www.openlinksw.com Personal Weblog: http://www.openlinksw.com/blog/~kidehen Twitter Profile: https://twitter.com/kidehen Google+ Profile: https://plus.google.com/+KingsleyIdehen/about LinkedIn Profile: http://www.linkedin.com/in/kidehen smime.p7s Description: S/MIME Cryptographic Signature
RE: representing hypermedia controls in RDF
On Thursday, November 21, 2013 5:06 PM, Kingsley Idehen wrote: On 11/21/13 7:33 AM, Markus Lanthaler wrote: Sure.. it's included at the end of the spec [1 above] and also available as standalone JSON-LD file: http://purl.org/hydra/core Note, there's a content negotiation problem here, as shown by: curl -ILH Accept: text/turtle http://purl.org/hydra/core HTTP/1.1 302 Moved Temporarily Date: Thu, 21 Nov 2013 16:04:32 GMT Server: 1060 NetKernel v3.3 - Powered by Jetty Location: http://www.markus-lanthaler.com/hydra/core Content-Type: text/html; charset=iso-8859-1 Yeah I don't have control over purl so it will return text/html by default to render the redirect message X-Purl: 2.0; http://localhost:8080 Expires: Thu, 01 Jan 1970 00:00:00 GMT Content-Length: 275 HTTP/1.1 200 OK Server: cloudflare-nginx Date: Thu, 21 Nov 2013 16:04:33 GMT Content-Type: application/ld+json All fine at my end though so everything should work. Or did I miss something? Please note that there's no turtle serialization available atm so I return JSON-LD instead. -- Markus Lanthaler @markuslanthaler smime.p7s Description: S/MIME cryptographic signature
Re: representing hypermedia controls in RDF
Hi Markus, You probably already expected me asking this :-) Why not Hydra [1]? Ah, there you are! Welcome ;-) - 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? More or less like: a href=http://en.wikipedia.org/wiki/Daft_Punk;http://dbpedia.org/resource/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. 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. - 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}. 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! (Also, have you considered hydra:template's range as something more specific than xsd:string?) - 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? Btw. for those who don't know, there's a W3C Community Group working on Hydra [2]. I should be more active there. Perhaps this is a starting point! Best, Ruben
Re: representing hypermedia controls in RDF
Server: cloudflare-nginx All fine at my end though so everything should work. Not sure if it's of any help, but CloudFlare doesn't do content negotiation; i.e., as soon as one representation is cached, it always serves that one, regardless of any Accept headers sent by subsequent clients. (And I'd be happy if somebody knew a free cache service that does it right.) Ruben
Re: representing hypermedia controls in RDF
On Thu, Nov 21, 2013 at 6:14 AM, Markus Lanthaler markus.lantha...@gmx.net wrote: Hi Ruben, You probably already expected me asking this :-) Why not Hydra [1]? Cool. Very similar to RDF Forms in important ways, though I think RDF Forms internalizes some useful features that Hydra could benefit from; stripping out information that isn't required (or isn't an optimization) for a state transition, e.g. DeleteResourceOperation. PUT should also be usable without any required parameterization, though declaring an accepted media type (something that seems to be missing from hydra) can be considered an optimization. And POST can be used for much more than creation, so I think CreateResourceOperation is a misnomer (or else overly specific). Also, the next version of RDF Forms has been sitting in my head for a few years after collecting a little bit of experience with the current version. One of the big changes I would make is to go fully predicate based rather than class based simply because I expect it would be more flexible and also fit better into, e.g. HTML or the Link header. So if I had a POST-accepting resource, instead of this: http://example.org/res1 a hydra:CreateResourceOperation . I'd go with; hydra:sink http://example.org/res1 . (yah, that example represents at least 3 improvements I'd suggest for the language - sorry if it's too dense) I have some other thought similar to Ruben's too. But I've gone ahead and joined the group, and once I'm caught up on the discussion to date, we can discuss this further over there.
RE: representing hypermedia controls in RDF
On Thursday, November 21, 2013 9:22 PM, Kingsley Idehen wrote: On 11/21/13 2:00 PM, Markus Lanthaler wrote: On Thursday, November 21, 2013 7:34 PM, Kingsley Idehen wrote: But I am looking for Turtle, hence: curl -ILH Accept: text/turtlehttp://purl.org/hydra/core :-) Sure.. but the server is still free to return an alternative media type if it is unable to obey to the Accept header. Well it has an HTTP 406 for communicating that back to the client i.e., being a little more helpful :-) Not sure this is more helpful.. it introduces an additional RTT in the best case. In the worst case the interaction stops there. Anyway, do you have a URL for a Turtle doc? No, as I said, at the moment I don't serve a Turtle version. Of course you can use a translator to turn the JSON-LD into Turtle (but you know that).. here's a link http://bit.ly/hydra-core-ttl just in case. -- Markus Lanthaler @markuslanthaler smime.p7s Description: S/MIME cryptographic signature
Re: representing hypermedia controls in RDF
On 11/21/13 1:01 PM, Markus Lanthaler wrote: Awesome! Welcome on board:-) [1]https://github.com/HydraCG/Specifications/issues/5 SeeAlso: http://linkeddata.uriburner.com/about/id/entity/https/github.com/HydraCG/Specifications/issues -- Linked Data URI for Hydra Issues on Github. -- Regards, Kingsley Idehen Founder CEO OpenLink Software Company Web: http://www.openlinksw.com Personal Weblog: http://www.openlinksw.com/blog/~kidehen Twitter Profile: https://twitter.com/kidehen Google+ Profile: https://plus.google.com/+KingsleyIdehen/about LinkedIn Profile: http://www.linkedin.com/in/kidehen smime.p7s Description: S/MIME Cryptographic Signature
RE: representing hypermedia controls in RDF
+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:
Re: representing hypermedia controls in RDF
On 11/21/13 4:18 PM, Markus Lanthaler wrote: Anyway, do you have a URL for a Turtle doc? No, as I said, at the moment I don't serve a Turtle version. Of course you can use a translator to turn the JSON-LD into Turtle (but you know that).. here's a link http://bit.ly/hydra-core-ttl just in case. As I said, in a related post, let's not inadvertently introduce problems for existing Linked Data tools. JSON-LD and TURTLE is much better than JSON-LD only. Thus, all you have to do is incorporate the URL above into the doc that's currently missing said reference :-) -- Regards, Kingsley Idehen Founder CEO OpenLink Software Company Web: http://www.openlinksw.com Personal Weblog: http://www.openlinksw.com/blog/~kidehen Twitter Profile: https://twitter.com/kidehen Google+ Profile: https://plus.google.com/+KingsleyIdehen/about LinkedIn Profile: http://www.linkedin.com/in/kidehen smime.p7s Description: S/MIME Cryptographic Signature
Re: representing hypermedia controls in RDF
On 11/21/13 7:33 AM, Markus Lanthaler wrote: [1]http://www.markus-lanthaler.com/hydra/ [2]http://www.w3.org/community/hydra/ Markus, Is there a JSON-LD or Turtle version of this vocabulary? Sure.. it's included at the end of the spec [1 above] and also available as standalone JSON-LD file: http://purl.org/hydra/core Awesome! -- Regards, Kingsley Idehen Founder CEO OpenLink Software Company Web: http://www.openlinksw.com Personal Weblog: http://www.openlinksw.com/blog/~kidehen Twitter Profile: https://twitter.com/kidehen Google+ Profile: https://plus.google.com/+KingsleyIdehen/about LinkedIn Profile: http://www.linkedin.com/in/kidehen smime.p7s Description: S/MIME Cryptographic Signature
RE: representing hypermedia controls in RDF
Hi Kingsley, On Thursday, November 21, 2013 1:16 PM, Kingsley Idehen wrote: On 11/21/13 6:14 AM, Markus Lanthaler wrote: Hi Ruben, You probably already expected me asking this :-) Why not Hydra [1]? [...] [1] http://www.markus-lanthaler.com/hydra/ [2] http://www.w3.org/community/hydra/ Markus, Is there a JSON-LD or Turtle version of this vocabulary? Sure.. it's included at the end of the spec [1 above] and also available as standalone JSON-LD file: http://purl.org/hydra/core -- Markus Lanthaler @markuslanthaler smime.p7s Description: S/MIME cryptographic signature
RE: representing hypermedia controls in RDF
+public-hydra On Thursday, November 21, 2013 5:11 PM, Mark Baker wrote: Cool. Very similar to RDF Forms in important ways, though I think RDF Forms internalizes some useful features that Hydra could benefit from; stripping out information that isn't required (or isn't an optimization) for a state transition, e.g. DeleteResourceOperation. Right, we already discussed removing all those prefided *ResourceOperations. The only reason I included them in the first place was to bootstrap the system so that developers could build simple CRUD-based systems without having to define these things themselves. This is ISSUE-5 [1] btw. :-) PUT should also be usable without any required parameterization, Not so convinced about that.. though declaring an accepted media type (something that seems to be missing from hydra) Right.. Hydra currently assumes the client uses the media type it used to retrieve the API documentation or the entry point for its requests. This leaves binaries out, I know. It isn't currently specified but I think that could be handled by specific classes together with hydra:expects as well. can be considered an optimization. And POST can be used for much more than creation, so I think CreateResourceOperation is a misnomer (or else overly specific). Of course.. that's the whole reason that Operations thing exists in the first place. But it isn't Hydra's job to define them. Concrete APIs will create their own by subclassing Operation (or one of the three others unless we remove it). Also, the next version of RDF Forms has been sitting in my head for a few years after collecting a little bit of experience with the current version. One of the big changes I would make is to go fully predicate based rather than class based simply because I expect it would be more flexible and also fit better into, e.g. HTML or the Link header. So if I had a POST-accepting resource, instead of this: http://example.org/res1 a hydra:CreateResourceOperation . I'd go with; hydra:sink http://example.org/res1 . (yah, that example represents at least 3 improvements I'd suggest for the language - sorry if it's too dense) Indeed. I don't understand that example at all. Could you explain it a bit more in detail? I have some other thought similar to Ruben's too. But I've gone ahead and joined the group, and once I'm caught up on the discussion to date, we can discuss this further over there. Awesome! Welcome on board :-) [1] https://github.com/HydraCG/Specifications/issues/5 -- Markus Lanthaler @markuslanthaler
Re: representing hypermedia controls in RDF
On 11/21/13 2:00 PM, Markus Lanthaler wrote: On Thursday, November 21, 2013 7:34 PM, Kingsley Idehen wrote: On 11/21/13 12:46 PM, Markus Lanthaler wrote: HTTP/1.1 200 OK Server: cloudflare-nginx Date: Thu, 21 Nov 2013 16:04:33 GMT Content-Type: application/ld+json All fine at my end though so everything should work. Or did I miss something? Please note that there's no turtle serialization available atm so I return JSON-LD instead. But I am looking for Turtle, hence: curl -ILH Accept: text/turtlehttp://purl.org/hydra/core :-) Sure.. but the server is still free to return an alternative media type if it is unable to obey to the Accept header. Well it has an HTTP 406 for communicating that back to the client i.e., being a little more helpful :-) Anyway, do you have a URL for a Turtle doc? Kingsley -- Markus Lanthaler @markuslanthaler -- Regards, Kingsley Idehen Founder CEO OpenLink Software Company Web: http://www.openlinksw.com Personal Weblog: http://www.openlinksw.com/blog/~kidehen Twitter Profile: https://twitter.com/kidehen Google+ Profile: https://plus.google.com/+KingsleyIdehen/about LinkedIn Profile: http://www.linkedin.com/in/kidehen smime.p7s Description: S/MIME Cryptographic Signature
Re: representing hypermedia controls in RDF
On 11/21/13 12:46 PM, Markus Lanthaler wrote: HTTP/1.1 200 OK Server: cloudflare-nginx Date: Thu, 21 Nov 2013 16:04:33 GMT Content-Type: application/ld+json All fine at my end though so everything should work. Or did I miss something? Please note that there's no turtle serialization available atm so I return JSON-LD instead. But I am looking for Turtle, hence: curl -ILH Accept: text/turtlehttp://purl.org/hydra/core :-) -- Regards, Kingsley Idehen Founder CEO OpenLink Software Company Web: http://www.openlinksw.com Personal Weblog: http://www.openlinksw.com/blog/~kidehen Twitter Profile: https://twitter.com/kidehen Google+ Profile: https://plus.google.com/+KingsleyIdehen/about LinkedIn Profile: http://www.linkedin.com/in/kidehen smime.p7s Description: S/MIME Cryptographic Signature
RE: representing hypermedia controls in RDF
On Thursday, November 21, 2013 7:37 PM, Kingsley Idehen wrote: On 11/21/13 1:01 PM, Markus Lanthaler wrote: Awesome! Welcome on board:-) [1]https://github.com/HydraCG/Specifications/issues/5 SeeAlso: http://linkeddata.uriburner.com/about/id/entity/https/github.com/HydraC G/Specifications/issues -- Linked Data URI for Hydra Issues on Github. Cool, thanks Kingsley! -- Markus Lanthaler @markuslanthaler smime.p7s Description: S/MIME cryptographic signature
RE: representing hypermedia controls in RDF
On Thursday, November 21, 2013 7:34 PM, Kingsley Idehen wrote: On 11/21/13 12:46 PM, Markus Lanthaler wrote: HTTP/1.1 200 OK Server: cloudflare-nginx Date: Thu, 21 Nov 2013 16:04:33 GMT Content-Type: application/ld+json All fine at my end though so everything should work. Or did I miss something? Please note that there's no turtle serialization available atm so I return JSON-LD instead. But I am looking for Turtle, hence: curl -ILH Accept: text/turtlehttp://purl.org/hydra/core :-) Sure.. but the server is still free to return an alternative media type if it is unable to obey to the Accept header. -- Markus Lanthaler @markuslanthaler smime.p7s Description: S/MIME cryptographic signature
Re: representing hypermedia controls in RDF
On 11/21/13 7:33 AM, Markus Lanthaler wrote: Sure.. it's included at the end of the spec [1 above] and also available as standalone JSON-LD file: http://purl.org/hydra/core Note, there's a content negotiation problem here, as shown by: curl -ILH Accept: text/turtle http://purl.org/hydra/core HTTP/1.1 302 Moved Temporarily Date: Thu, 21 Nov 2013 16:04:32 GMT Server: 1060 NetKernel v3.3 - Powered by Jetty *Location: http://www.markus-lanthaler.com/hydra/core* Content-Type: text/html; charset=iso-8859-1 X-Purl: 2.0; http://localhost:8080 Expires: Thu, 01 Jan 1970 00:00:00 GMT Content-Length: 275 HTTP/1.1 200 OK Server: cloudflare-nginx Date: Thu, 21 Nov 2013 16:04:33 GMT *Content-Type: application/ld+json* Content-Length: 15979 Connection: keep-alive Set-Cookie: __cfduid=dc93830208e521a057d2be9b1c4bb62021385049873045; expires=Mon, 23-Dec-2019 23:50:00 GMT; path=/; domain=.markus-lanthaler.com; HttpOnly Access-Control-Allow-Origin: * Last-Modified: Thu, 14 Nov 2013 17:30:58 GMT ETag: 5ddb676-3e6b-4eb2671e2a309 Accept-Ranges: bytes Vary: User-Agent CF-RAY: d0e9dca8b59040c -- Regards, Kingsley Idehen Founder CEO OpenLink Software Company Web: http://www.openlinksw.com Personal Weblog: http://www.openlinksw.com/blog/~kidehen Twitter Profile: https://twitter.com/kidehen Google+ Profile: https://plus.google.com/+KingsleyIdehen/about LinkedIn Profile: http://www.linkedin.com/in/kidehen smime.p7s Description: S/MIME Cryptographic Signature
representing hypermedia controls in RDF
Dear all, Do we have other approaches besides RDF Forms [1] to represent hypermedia controls in RDF? Basically, I’m looking for any of the following: - representing hyperlinks in RDF (in addition to subject/object URLs) - representing URI templates [2] - representing forms (in the HTML sense) I’m aware of CoIN, which describes URI construction [2]. Is it used? Pointers to vocabularies or examples would be very much appreciated! Thanks, Ruben [1] http://www.markbaker.ca/2003/05/RDF-Forms/ [2] http://tools.ietf.org/html/rfc6570 [2] http://court.googlecode.com/hg/resources/docs/coin/spec.html
Re: representing hypermedia controls in RDF
I'm interested in the answers you get to the first and last of your questions but the middle one I can do. The under used POWDER Recommendation allows you to make statements about resources based on URI patterns (with due semantic integrity [1]) - which may or may not be useful to you. See http://www.w3.org/TR/powder-grouping/ HTH Phil. [1] http://www.w3.org/TR/powder-formal/ On 20/11/2013 11:23, Ruben Verborgh wrote: Dear all, Do we have other approaches besides RDF Forms [1] to represent hypermedia controls in RDF? Basically, I’m looking for any of the following: - representing hyperlinks in RDF (in addition to subject/object URLs) - representing URI templates [2] - representing forms (in the HTML sense) I’m aware of CoIN, which describes URI construction [2]. Is it used? Pointers to vocabularies or examples would be very much appreciated! Thanks, Ruben [1] http://www.markbaker.ca/2003/05/RDF-Forms/ [2] http://tools.ietf.org/html/rfc6570 [2] http://court.googlecode.com/hg/resources/docs/coin/spec.html -- Phil Archer W3C eGovernment http://philarcher.org +44 (0)7887 767755 @philarcher1
Re: representing hypermedia controls in RDF
Ruben, 2 things I'm aware of and have implemented: - URI templates: Linked Data API vocabulary https://code.google.com/p/linked-data-api/wiki/API_Vocabulary Graphity reuses api:uriTemplate and api:itemTemplate to match request URIs against ontology classes. The actual template syntax is reused from JAX-RS: http://docs.oracle.com/cd/E19798-01/821-1841/ginpw/ - HTML forms: RDF/POST encoding http://www.lsrn.org/semweb/rdfpost.html Graphity includes a Jena-based RDF/POST parser: https://github.com/Graphity/graphity-browser/blob/master/src/main/java/org/graphity/client/reader/RDFPostReader.java Hope that helps. Martynas graphityhq.com On Wed, Nov 20, 2013 at 12:23 PM, Ruben Verborgh ruben.verbo...@ugent.be wrote: Dear all, Do we have other approaches besides RDF Forms [1] to represent hypermedia controls in RDF? Basically, I’m looking for any of the following: - representing hyperlinks in RDF (in addition to subject/object URLs) - representing URI templates [2] - representing forms (in the HTML sense) I’m aware of CoIN, which describes URI construction [2]. Is it used? Pointers to vocabularies or examples would be very much appreciated! Thanks, Ruben [1] http://www.markbaker.ca/2003/05/RDF-Forms/ [2] http://tools.ietf.org/html/rfc6570 [2] http://court.googlecode.com/hg/resources/docs/coin/spec.html
Re: representing hypermedia controls in RDF
Hi Ruben, I haven’t used it (or really read the spec) but you might be interested in taking a look at the Linked Data Platform 1,2], which provides some patterns for expressing create/update/delete hypermedia controls in RDF. I’d be interested to hear what your specific use case is. //Ed [1] http://www.w3.org/TR/ldp/ [2] http://www.w3.org/TR/ldp-ucr/ On Nov 20, 2013, at 6:23 AM, Ruben Verborgh ruben.verbo...@ugent.be wrote: Dear all, Do we have other approaches besides RDF Forms [1] to represent hypermedia controls in RDF? Basically, I’m looking for any of the following: - representing hyperlinks in RDF (in addition to subject/object URLs) - representing URI templates [2] - representing forms (in the HTML sense) I’m aware of CoIN, which describes URI construction [2]. Is it used? Pointers to vocabularies or examples would be very much appreciated! Thanks, Ruben [1] http://www.markbaker.ca/2003/05/RDF-Forms/ [2] http://tools.ietf.org/html/rfc6570 [2] http://court.googlecode.com/hg/resources/docs/coin/spec.html
Re: representing hypermedia controls in RDF
Ruben, greetings. On 2013 Nov 20, at 11:23, Ruben Verborgh wrote: Do we have other approaches besides RDF Forms [1] to represent hypermedia controls in RDF? You _might_ find it interesting to read about HyTime (the Wikipedia page has reasonable starting links https://en.wikipedia.org/wiki/HyTime). HyTime defines a set of hypertext-oriented element types that [let] document authors to build hypertext and multimedia presentations in a standardized way. The elided words in that sentence indicate that it was linked to SGML, but don't let that put you off. Speaking for myself, it was HyTime that let me see that the really big deal about SGML, and later XML, is that it's about abstract semantic structures rather than pointy brackets. Unfortunately the HyTime spec is bizarrely -- perversely -- opaque (for reasons which I semi-understand), which ruined its chances of significant adoption. Its current legacy rests on the core ideas rather than the actual 'hypermedia' stuff it was apparently focused on, but the hypermedia modeling is the result of good work by smart people, and it would make a very interesting project to see if HyTime's time (ahem!) has finally come. All the best, Norman -- Norman Gray : http://nxg.me.uk SUPA School of Physics and Astronomy, University of Glasgow, UK
Re: representing hypermedia controls in RDF
Hi Phil, Thanks for the pointer. POWDER is definitely interesting and relevant, but I’m a bit hesitant to apply regexing. In general, I’m quite a fan of opaque URLs; that is, let the server maintain full control. While HTML GET forms are a level-breaker in that regard, I like the strictness about them: there’s only one way to get from the form to a URL, and the server is still in control because it created the form. What are your thoughts about this? Best, Ruben On 20 Nov 2013, at 11:37, Phil Archer ph...@w3.org wrote: I'm interested in the answers you get to the first and last of your questions but the middle one I can do. The under used POWDER Recommendation allows you to make statements about resources based on URI patterns (with due semantic integrity [1]) - which may or may not be useful to you. See http://www.w3.org/TR/powder-grouping/ HTH Phil. [1] http://www.w3.org/TR/powder-formal/
Re: representing hypermedia controls in RDF
Hi Martynas, - URI templates: Linked Data API vocabulary https://code.google.com/p/linked-data-api/wiki/API_Vocabulary Cool, I do like that. Have you thought about extending to RFC6570? Do you know about usage of this vocabulary? The one thing that I like less is the notion of endpoints. While this is perfect for SPARQL, which is indeed an endpoint or “data-handling process” that expects a “block of data” [1], it does not work well in resource-oriented environments. I’m looking for predicates that work with groups of resource, such as: /topics/Global_Warming :belongsTo /topics. /topics a :ResourceList; api:itemTemplate /topics/{topicID}. That is, I don't consider there to be a topics endpoint; instead, there is a topics resource which lists several topics, and individual topics can be accessed by ID. The reason I would still need the template is because /topics/ is not exhaustive, and new elements can be created by following the template. This would be equivalent to a HTML GET form. - HTML forms: RDF/POST encoding http://www.lsrn.org/semweb/rdfpost.html Interesting, thanks! Best, Ruben [1] http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.5
Re: representing hypermedia controls in RDF
Hi Ed, CC: Mark Baker, I've actually been part of the LDP group; I fully agreed with Mark's concern on the lack of hypermedia controls [1]. LDP is based on a set of agreements, not on a set of dynamic affordances. Would have loved to see a proposal such as this one [2] make it, but it was then clarified that the goal of LDP was to make one API [3]. Best, Ruben [1] http://lists.w3.org/Archives/Public/public-ldp/2012Nov/0007.html [2] http://lists.w3.org/Archives/Public/public-ldp/2012Nov/0018.html [3] http://lists.w3.org/Archives/Public/public-ldp/2012Nov/0029.html On 20 Nov 2013, at 12:49, Edward Summers e...@pobox.com wrote: Hi Ruben, I haven’t used it (or really read the spec) but you might be interested in taking a look at the Linked Data Platform 1,2], which provides some patterns for expressing create/update/delete hypermedia controls in RDF. I’d be interested to hear what your specific use case is. //Ed
Re: representing hypermedia controls in RDF
Hi Norman, Interesting pointer, thanks, I'm amazed to see this existed for so long! HyTime defines a set of hypertext-oriented element types that [let] document authors to build hypertext and multimedia presentations in a standardized way. The issue is probably to integrate this on the RDF level, e.g., those semantics but written as RDF. While I like the conceptual level of abstraction, at some point, you have to serialize it, and this is where I'm at. Best, Ruben
Re: representing hypermedia controls in RDF
Ahh, I see you are (at least) two steps ahead of me. Thanks for sending along those references to previous conversation. I’m still curious about your use case :-) //Ed On Nov 20, 2013, at 10:58 AM, Ruben Verborgh ruben.verbo...@ugent.be wrote: Hi Ed, CC: Mark Baker, I've actually been part of the LDP group; I fully agreed with Mark's concern on the lack of hypermedia controls [1]. LDP is based on a set of agreements, not on a set of dynamic affordances. Would have loved to see a proposal such as this one [2] make it, but it was then clarified that the goal of LDP was to make one API [3]. Best, Ruben [1] http://lists.w3.org/Archives/Public/public-ldp/2012Nov/0007.html [2] http://lists.w3.org/Archives/Public/public-ldp/2012Nov/0018.html [3] http://lists.w3.org/Archives/Public/public-ldp/2012Nov/0029.html On 20 Nov 2013, at 12:49, Edward Summers e...@pobox.com wrote: Hi Ruben, I haven’t used it (or really read the spec) but you might be interested in taking a look at the Linked Data Platform 1,2], which provides some patterns for expressing create/update/delete hypermedia controls in RDF. I’d be interested to hear what your specific use case is. //Ed
Re: representing hypermedia controls in RDF
Hi Ed, Forgot to answer this part: I’d be interested to hear what your specific use case is. In my research [1], I'm looking at giving machines the same affordances as people. Many things on today's Web cannot be done by machines due to a lack of affordances. While RDF allows to interpret data and facts, it does not help to interpret actions. So use cases I'm looking at are: - how to represent a HTML page with a form in RDF, so automated clients can use it? - how to make such clients search? - how to make them execute state-changing actions? Giving them access to hypermedia controls is a crucial part in that [2]. Best, Ruben [1] http://ruben.verborgh.org/publications/ [2] http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven