W3C home > Mailing lists > Public > public-rdf-dawg@w3.org > January to March 2005

Re: variables as nodes? (re: XML Binding Format)

From: Eric Prud'hommeaux <eric@w3.org>
Date: Wed, 23 Mar 2005 07:37:50 -0500
To: Bijan Parsia <bparsia@isr.umd.edu>
Cc: howardk@fatdog.com, Yoshio FUKUSHIGE <fuku@w3.org>, 'RDF Data Access Working Group' <public-rdf-dawg@w3.org>
Message-ID: <20050323123750.GA27026@w3.org>
On Tue, Mar 22, 2005 at 03:06:06PM -0500, Bijan Parsia wrote:
> 
> On Mar 22, 2005, at 2:09 PM, Howard Katz wrote:
> 
> >Bijan,
> >Can you briefly explain why the attribute form is more "XML Schemable" 
> >than
> >the element form?
> 
> I'm no schema wonk (which is fine, btw :)), but looking at:
> 
>   <xs:element name="result">
>     <xs:complexType>
>       <xs:group minOccurs="0" maxOccurs="unbounded" ref="res:var"/>
>       <xs:attribute ref="xml:lang"/>
>     </xs:complexType>
>   </xs:element>
>   <xs:group name="var">
>     <xs:sequence>
>       <xs:any namespace="##targetNamespace" processContents="skip"/>
>     </xs:sequence>
>   </xs:group>
> 
> That processContents="skip" is a consequence of not having a fixed set 
> of names for the binding forms and that is unfortunate.

I think it comes down to, unlike RelaxNG,

var = element res:* {
     xmllang?, uriAttr?, datatypeAttr?, bnodeidAttr?, boundAttr?,
     literal
}

XML Schema can't have wildcard nodenames. I think this is why RDF/XML
is only describable with RelaxNG.

> I would prefer for the element children of resutls to be fixed and data 
> bindable. I would also like to use xsi:type to enforce schema 
> processing of their children.

Another argument for this is that it fits with the common idiom for
XSLT templates. I originally voted for a regular XML syntax that was
also usefully parsable as RDF. Failing that, I prefer to go all the
way to the XML side and do things in the most common idioms possible,
which I think is consistent with Yoshio's syntax.

> Heck. It'd be nice to be able to distinguish bindings with a node vs. a 
> literal content. If we can't distinguish by attribute value, then i'd 
> be in favor of things like nodeVar, literalVar, etc.
> 
> I do not yet intend this as a proposal. I hope to flesh it out a bit 
> more. Deadlines and illness have interceded a bit.
> 
> But even the little bit more schema processing seems worth it to me.
> 
> I did some experiments with kendall on Dave's example transform scripts 
> to HTML tables, and it doesn't complicate them significantly (to my 
> eye). Also, you can, in XQuery, use typecase (or whatever it's called) 
> which might have optimization and safety advantages.

Maybe it's not significant, but transformers that don't have a priori
knowledge of which variables to expect (say, an HTML presenter for
*any* results) will need to use

<!-- datatyped literals template -->
<xsl:template match="*/[type='datatype']">
  <html:th>?<xsl:value-of select="self::name()"/></html:th>

instead of

<!-- datatyped literals template -->
<xsl:template match="var/[type='datatype']">
  <html:th>?<xsl:value-of select="@name"/></html:th>

The former is not many more characters, but involves being further
into the tutorial and further from the shortcut syntaxes of XSLT.


PROPOSAL: that the XML Results Format change from
    <result>
      <x bnodeid="r2"/>
      <hpage uri="http://work.example.org/bob/"/>
      <name xml:lang="en">Bob</name>
      <mbox uri="mailto:bob@work"/>
      <age
      datatype="http://www.w3.org/2001/XMLSchema#integer">30</age> 
      <blurb bound="false"/>
      <friend bnodeid="r1"/>
   </result>
to
    <result>
      <bind name="x" bnodeid="r2"/>
      <bind name="hpage" uri="http://work.example.org/bob/"/>
      <bind name="name" xml:lang="en">Bob</bind>
      <bind name="mbox" uri="mailto:bob@work"/>
      <bind name="age"
      datatype="http://www.w3.org/2001/XMLSchema#integer">30</bind> 
      <bind name="blurb" bound="false"/>
      <bind name="friend" bnodeid="r1"/>
   </result>

I reallize it's extra bytes, but I think having XML Schema validation

  <xs:group name="var">
    <xs:complexType>
      <xs:attribute name="uri" type="res:URI-reference"/>
      <xs:attribute name="datatype" type="res:URI-reference"/>
      <xs:attribute name="bnodeid" type="xs:NMTOKEN"/>
      <xs:attribute name="bound">
    </xs:complexType>
  </xs:group>

all the way down is worth it.
-- 
-eric

office: +81.466.49.1170 W3C, Keio Research Institute at SFC,
                        Shonan Fujisawa Campus, Keio University,
                        5322 Endo, Fujisawa, Kanagawa 252-8520
                        JAPAN
        +1.617.258.5741 NE43-344, MIT, Cambridge, MA 02144 USA
cell:   +81.90.6533.3882

(eric@w3.org)
Feel free to forward this message to any list for any purpose other than
email address distribution.

Received on Wednesday, 23 March 2005 12:37:50 GMT

This archive was generated by hypermail 2.3.1 : Tuesday, 26 March 2013 16:15:22 GMT