[Oslc-Automation] Action resources - implementation patterns

Martin P Pain martinpain at uk.ibm.com
Mon Jan 6 09:48:32 EST 2014


Response inline



Kind regards,

Martin Pain
Software Developer - Green Hat
Rational Test Virtualization Server, Rational Test Control Panel
Open Services for Lifecycle Collaboration - Automation WG joint chair

E-mail: martinpain at uk.ibm.com
Find me on:  and within IBM on:  




IBM United Kingdom Limited
Registered in England and Wales with number 741598
Registered office: PO Box 41, North Harbour, Portsmouth, Hants. PO6 3AU

"Oslc-Automation" <oslc-automation-bounces at open-services.net> wrote on 
27/12/2013 19:03:32:

> From: John Arwe <johnarwe at us.ibm.com>
> To: oslc-automation at open-services.net, 
> Date: 27/12/2013 19:03
> Subject: Re: [Oslc-Automation] Action resources - implementation 
patterns
> Sent by: "Oslc-Automation" <oslc-automation-bounces at open-services.net>
> 
> I did a reasonably slow, focused, top-to-bottom read of the Core 
> Actions draft, and made some updates over the past 2 days.  I think 
> we're getting really close. 
> 
> The 12/26 edits should be completely non-controversial. Typo, adding
> links, etc. 
> Today(12/27)'s edits are very likely non-controversial.  Smaller-
> scale cleanup of certain sections.  Probably worth a look from 
> Martin to be sure I didn't accidentally vary from his intent. 
> The big-animal outstanding questions/comments I had are listed below. 


> 1:  Secondary bindings: I think we should cover that entirely in 
> Automation, not Core. 
> 1a: Let Core be about Actions -- the parts that multiple parties 
> need (UI introspection, bindings, and "execute now" discovery).  The
> only thing I'd leave in Core around delayed execution is the 
> interaction pattern heading, and make its content consists entirely 
> of text (probably non-normative) pointing to Automation as having 
> defined such an interaction pattern. 
> 1b: Let Automation cover the delayed execution angle.  That's the 
> only place the need has arisen.  Any "complications" like secondary 
> bindings it can pay for, rather than obscuring further what Core is 
> doing.  It's every bit as re-usable from Automation as from Core. 

No objections

> 1c: Secondary bindings might become "immediate execution action 
> bindings" instead.  Once they're relegated to Automation, it's 
> harder to confuse them with Core's bindings ;-) 
> 1d: I think Automation (when it defines delayed execution's pattern)
> states (as part of that pattern) which existing action bindings are/
> not allowed as secondary bindings, along with any additional 
> constraints those usages have.  If we can't do that, something is 
> fundamentally wrong.  I.e. if the only way to define the zero-body 
> http request interaction pattern (or any other in Core) so that it 
> "works right" when we later want to add a delayed execution 
> interaction pattern is to know about the future when defining zero-
> body, we're toast already.  Automation will need some generic 
> statement like "we're silent on; might work, might not" to cover 
> cases where new Core patterns/bindings/profiles are added in the 
> future, but that's life in the big city. 

OK

> 1e: In the existing "Use for secondary bindings" text, there is a 
> consistently repeated phrase "then it is to behave like" ... am I 
> correct in thinking that one is expected to read "it is" as a normative 
MUST?

Yes. Updated wiki.

> 2: In the final paragraph of [1], a statement is made: "However, as 
> already stated, implementations MUST NOT rely on this behaviour from
> other implementations".  I was going to lowercase the must-not 
> (since it's a restatement), and make the bulk of that text a 
> hyperlink to the original, but I'm unclear after reading it what 
> it's referring so I cannot create the link.  It might be referring 
> to the beginning of the same paragraph (which has a MUST NOT); I 
> cannot be sure what the final sentence's "this" refers to. 

"This" refers to the SHOULD in that same paragraph. The "already stated" 
does, as you guessed" refer to the "MUSt NOT" at the beginning of that 
paragraph. The final sentence is to emphasise to consumers that the SHOULD 
on the providers is a SHOULD not a MUST, and therefore cannot be relied 
on.

> 3: In the RDF body pattern [4], we say "It is possible for bindings 
> to match the identification rule of both the HTTP request with empty
> body pattern and this pattern."  I don't think that's actually true;
> the zero-body pattern [3] says " MUST have an rdf:type value of 
http:Request
> , and MUST have an http:body value of rdf:nil.", whereas the RDF 
> body pattern says "MUST have an http:body property whose target 
> resource:" ...other constraints that rule out rdf:nil. 

They do not say that the bindings "MUST have a single http:body property, 
which MUST have a single rdf:type value of...".

In other words, a single http:Request binding may have two http:body 
properties, one of which could have the value rdf:nil, and the other could 
match the "HTTP request with RDF body" rule. This would match both rules, 
as it both has "an http:body value of rdf:nil" and has "an http:body 
property whose target resource [matches the other constraints]".

I have now attempted to make this explicit in the "It is possible for 
bindings to match [both]" paragraph.

> 4: In the RDF body pattern [4] and resource shape pattern [2], we 
> say "It is possible for bindings to match the identification rule of
> both the HTTP request with empty body pattern and this pattern."  In
> that context "bindings" (plural) could mean "different bindings on 
> the same Action resource", but I think the intent might have been 
> "each [or: a single] binding".  I was not sure enough to update it 
> on the wiki however, given that others will be reading that possibly
> in parallel. 

"a binding" (each binding/a single binding) would be correct. I have 
updated the text to say "a binding".

> 5: In the resource shape pattern [2], we say "finding or 
> constructing an RDF resource that matches the defined resource shape
> and using an appropriate serialisation of that resource as the HTTP 
> request body."  I don't see how a client is going to know which 
> serialization(s) are "appropriate", and given that this is an input 
> we'd certainly *like* it to be both concrete and asserted (Content-
> Type: header) on the request rather than relying on the provider 
> (recipient) engaging in content-sniffing or on out of band means. 
> We could use http:headerName etc for that; doing so would require 
> changes to Appendix A's "common restrictions" [5].  The RDF body 
> pattern [4] has the same issue.

My intentions were:
A) I'd expect that all communications between the client and server
   so far have probably used a single serialization/format. This is
   the one I'd consider "appropriate". However, looking for
   Accept-Post headers might also be appropriate.
B) I would expect the consumers to set the Content-Type header. We
   should state this explicitly.

I've attempted to clarify both of these in the text.

> 6: In the RDF body pattern [4], I'm not sure what the extra(?) level
> of indirection through oslc:ContentAsRDF buys us.  Is this simply to
> follow the patten of [6]? 

Without it, we are defining the meaning of allresources linked to by the 
http:body predicate. However this predicate is not under our control.
Without the level of indirection, our definition of http:body would mean 
that if a provider used a content:ContentAsText resource with the 
intention of specifying a literal body, then what our spec would be saying 
is "POST a representation of the ContentAsText resource as RDF", rather 
than the provider's intention to "POST the text within the ContentAsText 
resource as text/plain".
While we could provide explicit exemptions for the RDF classes that we 
currently know of that can specify content, it seems better to follow the 
pattern that they've already set and attach these "serialize as RDF" 
semantics to an RDF class created for that purpose. This way we allow for 
other future ways of specifying content, and stand a better chance of 
being compatible with other uses of the http vocabulary.

> 7: The Automation pattern [7] made reference to "the HTTP request 
> pattern" (sic), which no longer exists.  I think from the context it
> intended to say "request with RDF body" i.e. [4], so I did create 
> that link (just in case I guessed wrong, others now know).  The same
> case+fix arose in [9]. 

That is correct.

> 8: In the final bullet of [8], we talk about something that sounds 
> like a server implementation issue.  If that's the case, seems like 
> a Best Practice (at most), not normative text. 

I've had more thoughts about this, and removing this point would help the 
scenario where the user uses a dialog configure an action before the 
resource exists. So I'm happy to remove it (and have now done so).

However, it is not entirely a server implementation issue, as it means 
that everything else (the template Automation Request, the Creation 
Factory or dialog URL) could be replaced with others found on the service 
provider (allowing for flexibility in how the request body is constructed) 
- the only thing that needs to remain constant is the Plan URL. However, I 
will leave it to the scenarios to drive this if needed.

> 9: In the delayed execution pattern [10], [11] left me in the dust 
> (I saw no sign of this in the examples or ODT, either). 
> Conceptually I'm "sure" I know what you're saying, it's simply 
> omitted syntax/examples I think. 

This should be simplified when we can list all the valid patterns for 
execution-time (secondary) bindings in one place, as you suggested above. 

> 10: The construction of Appendix A [12] seemed at odds with itself. 
> In the first section: "a consumer MUST...include the headers specified 
by the 
> http:headers property, if present", and in the second section 
> "providers MUST provide bindings that:    do NOT include the 
http:headers
> property".  This might be smart spec factoring if we're trying to 
> separate "simple profile" constraints from "support all of http:Request
".

The second section is one that may be included by specific profiles. It 
does not apply unless a profile explicitly includes it (I have updated it 
to state this). The first half is intended to "support all of http:Request
".

In any case, these are not contradictory - the second section is intended 
to require providers to offer at least onebinding per action that meets 
these conditions, not imposing these conditions on all bindings (again, 
I've tried to make this clearer). Therefore these restrictions allow 
consumers to either be programmed to only find and use the ones with no 
header values, or to understand how to parse and use the header values, 
and so be able to use them if present.

> 10a: If consumers are required to support http:headers anyway, then 
> this must be about saving providers' implementation budgets.  But 
> that's in their own best interests anyway, so what do we gain again?
> Promising consumers that we'll never use the code we just said they 
> had to write?  FWIW I've (recently) seen implementations completely 
> dependent on extension headers for authentication; although that 
> "just" means they'd need to define profile(s) instead of re-using these. 


Consumers only need to support http:headers if the profile they are 
written against does not include these restrictions. If they are using a 
profile that includes these restrictions, then all they have to do is 
check that no http:headers are present (as these restrictions require that 
each action will have at least one binding that does not use any headers - 
but it may have other bindings that do in addition).
I'll have a go at re-wording this to better communicate my intentions, but 
it's possible we're not gaining much.

> 10b: [12] end first section says "Note: If OSLC implementors want to
> specify literal HTTP request bodies (which are not covered by any 
> interaction patterns in this specification)"  I think that's no 
> longer true (RDF body?), or did you mean something different by 
> "literal body"? 

By "literal body" I mean something like text/plain (or binary data), e.g. 
:

    POST /actions
    Content-Type: text/plain
 
    action=delete&resource=1


Other responses to recent changes:

11. In the "what are actions?" section [13] it now says "without knowing 
anything about R other than its URI and (perhaps) how to construct HTTP 
requests given instructions". However, "how to construct HTTP requests 
given instructions" is not really "about R". Unless you mean "consumers 
must be able to retrieve R's triples".

12. Not related to your changes, but we have a "MUST" in the "providers" 
section [14] under the "Overview (informative)" section [15]. There is an 
equivalent MUST under the "instruction for executing currently available 
actions" section [16], so I've just removed the bold markup from the one 
in the informative section.

13. Under "instructions for executing currently available actions" [16] 
these words: "A consumer executes an action by following a single 
interaction pattern that it supports, and applying information supplied in 
the action binding to the pattern. A consumer MAY use any interaction 
pattern whose identification rule is matched by the action binding. " seem 
to suggest that a consumer MAY use an interaction pattern that it supports 
even if its rule did not match. Otherwise what is that MAY saying other 
than that they also might not? While it does not make sense for consumers 
to do so, should we include a MUST somewhere? e.g. "A consumer MUST use 
one of the interaction pattern(s) whose identification rules are matched 
by the action binding it has chosen."?



[13] 
http://open-services.net/wiki/core/Exposing-arbitrary-actions-on-RDF-resources/#What-are-actions
[14] 
http://open-services.net/wiki/core/Exposing-arbitrary-actions-on-RDF-resources/#Providers
[15] 
http://open-services.net/wiki/core/Exposing-arbitrary-actions-on-RDF-resources/#Overview-informative
[16] 
http://open-services.net/wiki/core/Exposing-arbitrary-actions-on-RDF-resources/#Instructions-for-executing-currently-available-actions

> [1] http://open-services.net/wiki/core/Exposing-arbitrary-actions-
> on-RDF-resources/#Types-of-actions 
> [2] http://open-services.net/wiki/core/Exposing-arbitrary-actions-
> on-RDF-resources/#pattern-resource-shape 
> [3] http://open-services.net/wiki/core/Exposing-arbitrary-actions-
> on-RDF-resources/#pattern-empty-body 
> [4] http://open-services.net/wiki/core/Exposing-arbitrary-actions-
> on-RDF-resources/#pattern-rdf-body 
> [5] http://open-services.net/wiki/core/Exposing-arbitrary-actions-
> on-RDF-resources/#Standard-restrictions-on-http.3ARequest-resources-
> for-simple-specification-profiles 
> [6] http://www.w3.org/TR/Content-in-RDF/#ContentClass 
> [7] http://open-services.net/wiki/core/Exposing-arbitrary-actions-
> on-RDF-resources/#pattern-autoreq 
> [8] http://open-services.net/wiki/core/Exposing-arbitrary-actions-
> on-RDF-resources/#Additional-provider-constraints 
> [9] http://open-services.net/wiki/core/Exposing-arbitrary-actions-
> on-RDF-resources/#Execution_3 
> [10] http://open-services.net/wiki/core/Exposing-arbitrary-actions-
> on-RDF-resources/#pattern-dialog-delayed-execution 
> [11] http://open-services.net/wiki/core/Exposing-arbitrary-actions-
> on-RDF-resources/#Additional-provider-constraints_1 
> [12] http://open-services.net/wiki/core/Exposing-arbitrary-actions-
> on-RDF-resources/#constructing-http-requests 
> Best Regards, John
> 
> Voice US 845-435-9470  BluePages 
> Tivoli OSLC Lead - Show me the Scenario 
> _______________________________________________
> Oslc-Automation mailing list
> Oslc-Automation at open-services.net
> 
http://open-services.net/mailman/listinfo/oslc-automation_open-services.net


Unless stated otherwise above:
IBM United Kingdom Limited - Registered in England and Wales with number 
741598. 
Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://open-services.net/pipermail/oslc-automation_open-services.net/attachments/20140106/8c6823ea/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: image/jpeg
Size: 518 bytes
Desc: not available
URL: <http://open-services.net/pipermail/oslc-automation_open-services.net/attachments/20140106/8c6823ea/attachment-0002.jpe>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: image/jpeg
Size: 1208 bytes
Desc: not available
URL: <http://open-services.net/pipermail/oslc-automation_open-services.net/attachments/20140106/8c6823ea/attachment-0003.jpe>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: image/gif
Size: 360 bytes
Desc: not available
URL: <http://open-services.net/pipermail/oslc-automation_open-services.net/attachments/20140106/8c6823ea/attachment-0001.gif>


More information about the Oslc-Automation mailing list