<feed xmlns="http://www.w3.org/2005/Atom" xmlns:foaf="http://xmlns.com/foaf/0.1/"><title>norman.walsh.name: Comments on /2009/06/23/notXProc</title><link rel="alternate" type="text/html" href="http://norman.walsh.name/2009/06/23/notXProc"/><id>http://norman.walsh.name/2009/06/23/notXProc/comments.atom</id><updated>2012-02-13T09:38:07.503411Z</updated><entry><title>Comment 1 on /2009/06/23/notXProc</title><link rel="alternate" type="text/html" href="http://norman.walsh.name/2009/06/23/notXProc#comment0001"/><id>http://norman.walsh.name/2010/09/25/oauth#comment0001</id><published>2009-06-24T21:30:47Z</published><updated>2009-06-24T21:30:47Z</updated><author><name>Vojtěch Toman</name><foaf:mbox_sha1sum>da39a3ee5e6b4b0d3255bfef95601890afd80709</foaf:mbox_sha1sum></author><content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
    <p>A very interesting exercise indeed. What should we take from it? Being an implementer myself, my first reaction was... mild terror: There is no way of stopping Norm from making Calabash the hottest XProc processor out there :)
</p>
<p>My main problem with this is - and you made it clear several times in the text - interoperability. That you made this feature optional does not mean that people will not be using it. Once you give them a feature that will make certain things easier (or possible at all), I can't imagine they would resist, just because they should honour standards. And when that happens, other processors are out of the game. Of course they can then start a game of their own, but...
</p>
<p>XProc is so much fun to implement - and to extend. I would be the first (or close second) to testify that: Calumet, our processor, is <i>made</i> to be extensible, and its API almost <i>encourages</i> programmers to write plug-ins to provide extension functionality. So I place myself at risk here, too. I have done my best to stay on the good side of the force by supporting only the "standard" ways of extending XProc (extension steps, support for additional URI schemes, etc.), but there is a certain danger that things might go awry if evil programmers really wanted to.
</p>
<p>What you just showed is a way to extend or improve (some may think: fix) the core language itself. It makes Calabash a non-conformant XProc processor. Or, as you put it, a processor of a different language - but a language that happens to use the same namespace as XProc and thus some of the pipelines <i>may</i> run with other processors (sometimes they run fine, sometimes fail, and sometimes they produce different results). Interoperability hell.
</p>
<p>Suppose the most likely - at least for me - scenario in which the WG agrees there is some merit in your proposal, but that things are not going to change for V1. In that case, is there a way out of this for Calabash? I think there is, and it actually based on standard XProc versioning mechanism.

</p>
    <p>The specification does not explicitly mention this possibility, but in theory, Calabash could invent its own (Calabash-specific) XProc version, something like: <code>http://xmlcalabash.com/ns/extensions/xproc-1.5.xpl</code>. You could then create the following pipeline:
</p>
<pre>&lt;p:pipeline&gt;
  &lt;p:import href="http://xmlcalabash.com/ns/extensions/xproc-1.5.xpl"/&gt;
  ...
&lt;/p:pipeline&gt;</pre>

<p>In Calabash, using this XProc version would mean that your "general-values" feature would be enabled. Other processors would reject this pipeline because they would not support this XProc version. Probably not the best solution, but in my opinion, still better than an ad-hoc command-line switch.</p>
  </div></content></entry><entry><title>Comment 2 on /2009/06/23/notXProc</title><link rel="alternate" type="text/html" href="http://norman.walsh.name/2009/06/23/notXProc#comment0002"/><id>http://norman.walsh.name/2010/09/25/oauth#comment0002</id><published>2009-06-25T11:20:25Z</published><updated>2009-06-25T11:20:25Z</updated><author><name>Norman Walsh</name><foaf:mbox_sha1sum>da39a3ee5e6b4b0d3255bfef95601890afd80709</foaf:mbox_sha1sum></author><content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
    <p>That's an interesting idea, Vojtěch. I was thinking that the pipelines ought
to be non-conformant in some way too, to discourage attempts to use them
interoperably. Rather than the import trick, I think I'm inclined to change
the syntax in a different way, adding an "as" attribute to variable, option,
and parameter elements. That'd be non-standard too, so other processors would
reject the pipeline.
</p>
    <p>
What I think will really happen though is that I'll turn the feature off again
in a release or two. The overwhelming majority of pipelines don't need the
feature and the last thing I want is a landscape where XProc aren't
interoperable.
</p>
    <p>
As we go forward, we'll see what users ask for and what problems they encounter.
If we all have users who need the same thing, then we can use the exproc.org
(or expath.org) venues to develop extensions cooperatively.
</p>
    <p>
If XProc is successful enough and popular enough (and I think all the available
evidence suggests it will be) to warrant a V.next, I think this feature is
a very good candidate for standardizing in that version.
</p>
    <p>
But let's get this version to Recommendation before we worry about it too much!</p>
  </div></content></entry><entry><title>Comment 3 on /2009/06/23/notXProc</title><link rel="alternate" type="text/html" href="http://norman.walsh.name/2009/06/23/notXProc#comment0003"/><id>http://norman.walsh.name/2010/09/25/oauth#comment0003</id><published>2009-06-25T14:24:20Z</published><updated>2009-06-25T14:24:20Z</updated><author><name>Jim Fuller</name><foaf:mbox_sha1sum>da39a3ee5e6b4b0d3255bfef95601890afd80709</foaf:mbox_sha1sum></author><content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
    <p>'end running' around options/params/vars is just an expression that these elements really do not go far enough to do the job for what people probably want/expect.
</p>
    <p>
since you reopened this can of worms I will express how I would like to see things:
</p>
    <p>
* rationalize options/params/variables into one element and keep them as strings ... these elements seem like a compromise 
</p>
    <p>
* allow input bindings to be accessible from inside steps who want to access them (p:xslt,p:xquery)
</p>
    <p>
for example:
</p>
    <p>
<code>
   &lt;p:declare-step type="p:xslt" xml:id="xslt" xmlns:xproc="http://xproc.net/xproc" xproc:support="true"&gt;
</code>
    </p>
    <p>
      <code>
      &lt;p:input port="source" sequence="true" primary="true" select="/"/&gt;
</code>
    </p>
    <p>
      <code>
      &lt;p:input port="stylesheet" primary="false" select="/"/&gt;
</code>
    </p>
    <p>
      <code>
      &lt;p:input port="parameters" primary="false" kind="parameter" select="/"/&gt;
</code>
    </p>
    <p>
      <code>
&lt;!-- I would allow this //--&gt;
</code>
    </p>
    <p>
      <code>
      &lt;p:input port="*" primary="false"/&gt;
</code>
    </p>
    <p>
      <code>
      &lt;p:output port="result" primary="true" select="/"/&gt;
</code>
    </p>
    <p>
      <code>
      &lt;p:output port="secondary" primary="false" sequence="true" select="/"/&gt;
</code>
    </p>
    <p>
      <code>
      &lt;p:option name="initial-mode"/&gt;
</code>
    </p>
    <p>
      <code>
      &lt;p:option name="template-name"/&gt;
</code>
    </p>
    <p>
      <code>
      &lt;p:option name="output-base-uri"/&gt;
</code>
    </p>
    <p>
      <code>
      &lt;p:option name="version"/&gt;
</code>
    </p>
    <p>
      <code>
   &lt;/p:declare-step&gt;
</code>
    </p>
    <p>
      <code>
</code>
</p>
    <p>
then you could just bring in xml as a binding
</p>
    <p>
<code>
  &lt;p:xslt&gt;
</code>
    </p>
    <p>
      <code>
    &lt;p:input port="source"&gt;
</code>
    </p>
    <p>
      <code>
      &lt;p:empty/&gt;
</code>
    </p>
    <p>
      <code>
    &lt;/p:input&gt;
</code>
    </p>
    <p>
      <code>
    &lt;p:input port="name"/&gt;
</code>
    </p>
    <p>
      <code>
    &lt;p:input port="name2"/&gt;
</code>
    </p>
    <p>
      <code>
    &lt;p:input port="fragment"/&gt;
</code>
    </p>
    <p>
      <code>
&lt;p:input port="stylesheet"&gt;
</code>
    </p>
    <p>
      <code>
      &lt;p:inline&gt;
</code>
    </p>
    <p>
      <code>
        &lt;xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                        version="2.0"&gt;
</code>
    </p>
    <p>
      <code>
          &lt;xsl:param name="name"/&gt;
</code>
    </p>
    <p>
      <code>
          &lt;xsl:param name="name2"/&gt;
</code>
    </p>
    <p>
      <code>
          &lt;xsl:param name="fragment"/&gt;
</code>
    </p>
    <p>
      <code>
          &lt;xsl:template name="cx:main"&gt;
</code>
    </p>
    <p>
      <code>
            &lt;cx:doc&gt;
</code>
    </p>
    <p>
      <code>
              &lt;name&gt;&lt;xsl:copy-of select="$name"/&gt;&lt;/name&gt;
</code>
    </p>
    <p>
      <code>
              &lt;name2&gt;&lt;xsl:copy-of select="$name2"/&gt;&lt;/name2&gt;
</code>
    </p>
    <p>
      <code>
              &lt;frag&gt;&lt;xsl:copy-of select="$fragment"/&gt;&lt;/frag&gt;
</code>
    </p>
    <p>
      <code>
            &lt;/cx:doc&gt;
</code>
    </p>
    <p>
      <code>
          &lt;/xsl:template&gt;
</code>
    </p>
    <p>
      <code>
        &lt;/xsl:stylesheet&gt;
</code>
    </p>
    <p>
      <code>
      &lt;/p:inline&gt;
</code>
    </p>
    <p>
      <code>
    &lt;/p:input&gt;
</code>
    </p>
    <p>
      <code>
&lt;/p:xslt&gt;
</code>
    </p>
    <p>
      <code>
</code>
</p>
    <p>
otherwise I am with Vojtech in that such behavior (esp now with the spec so precariously close) should reuse xproc reuse mechanisms.
</p>
    <p>
interesting stuff though</p>
  </div></content></entry></feed>

