White Spaces in xsd:hexBinary

The WebID incubator group has encountered a subtle RDF problem with xsd:hexBinary,  and we would like some feedback on this. It is not clear yet who we should be asking here, so I have sent this out a bit widely. 

The WebID Protocol requires users who need a global login to publish their public key at their WebID Profile. The profile is described here

  http://webid.info/spec
or
  http://www.w3.org/2005/Incubator/webid/spec/#turtle
or the latest editor's draft
  https://dvcs.w3.org/hg/WebID/raw-file/tip/spec/index-respec.html#turtle

The Turtle example in the editor's draft gives as example the following

----------8<----------------------------------------------
@prefix cert: <http://www.w3.org/ns/auth/cert#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix rdfs: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

<#me> a foaf:Person;
  foaf:name "Bob";
  foaf:knows <https://example.edu/p/Alois#MSc>;
  foaf:weblog <http://bob.example/blog>;
  cert:key [ a cert:RSAPublicKey;
    rdfs:label "made on 23 November 2011 on my laptop";
    cert:modulus "cb24ed85d64d794b69c701c186acc059501e856000f661c93204d8380e07191c5c8b368d2ac32a428acb970398664368dc2a867320220f755e99ca2eecdae62e8d15fb58e1b76ae59cb7ace8838394d59e7250b449176e51a494951a1c366c6217d8768d682dde78dd4d55e613f8839cf275d4c8403743e7862601f3c49a6366e12bb8f498262c3c77de19bce40b32f89ae62c3780f5b6275be337e2b3153ae2ba72a9975ae71ab724649497066b660fcf774b7543d980952d2e8586200eda4158b014e75465d91ecf93efc7ac170c11fc7246fc6ded79c37780000ac4e079f671fd4f207ad770809e0e2d7b0ef5493befe73544d8e1be3dddb52455c61391a1"^^xsd:hexBinary;
    cert:exponent 65537 ;
   ] .
----------8<----------------------------------------------

So as you receive this e-mail you may notice immediately a problem: the various e-mail services will have cut up that long line into a number 70 character lines. So imagine in the future that I send someone a mail to paste this onto a server, and they follow my advice. Is what they paste the same semantically as what I sent them?

Currently a profile with internal white spaces will pass the OpenLink verifier

   http://id.myopenlink.net/ods/webid_demo.vsp

but it won't pass the foafssl one

   https://foafssl.org/test/WebId

Which is right? 
The xmlschema definition of hexBinary explains in english how it works

    http://www.w3.org/TR/xmlschema-2/#hexBinary

and if one wants a few more details one has to look at the following 
(at the end of the document)

<xs:simpleType name="hexBinary" id="hexBinary">
   <xs:annotation>
     <xs:appinfo>
       <hfp:hasFacet name="length"/>
       <hfp:hasFacet name="minLength"/>
       <hfp:hasFacet name="maxLength"/>
       <hfp:hasFacet name="pattern"/>
       <hfp:hasFacet name="enumeration"/>
       <hfp:hasFacet name="whiteSpace"/>
       <hfp:hasProperty name="ordered" value="false"/>
       <hfp:hasProperty name="bounded" value="false"/>
       <hfp:hasProperty name="cardinality" value="countably infinite"/>
       <hfp:hasProperty name="numeric" value="false"/>
     </xs:appinfo>
     <xs:documentation source="http://www.w3.org/TR/xmlschema-2/#binary"/>
   </xs:annotation>
   <xs:restriction base="xs:anySimpleType">
     <xs:whiteSpace fixed="true" value="collapse" id="hexBinary.whiteSpace"/>
   </xs:restriction>
 </xs:simpleType>

which I interpret to say that hexBinary has the whiteSpace facet in collapsed mode.

this is defined in
  http://www.w3.org/TR/xmlschema-2/#rf-whiteSpace


+ replace: All occurrences of #x9 (tab), #xA (line feed) and #xD (carriage return) are replaced with #x20 (space)
+ collapse: After the processing implied by replace, contiguous sequences of #x20's are collapsed to a single #x20, and leading and trailing #x20's are removed

As I see it this means that all spaces in the sequence are going to be reduced down to 1 space. This means that


 """cb 24            ed
    85"""^^xsd:hexBinary

will be converted to 

  "cb 24 ed 85"^^xsd:hexBinary

but never to 

  "cb24ed85"^^xsd:hexBinary

which it would need to be if one wanted to find it to be equal to it.
(but I may have misread something!)


Even if this were something then that RDF/XML had to stand by, it is not clear if then Turtle or RDFa - especially RDFa in html - the precisely same rules apply.
For example wherever an xsd:hexBinary appears in any RDF notation it will not be possible to put more than one number. It seems therefore that one is forced to interpret the string as one number, and so that one should remove all white spaces.

If one did that one would have a much more resilient format. One could also just remove white spaces on the principle
of "be lenient in what you accept and strict in what you produce"



	Henry



Social Web Architect
http://bblfish.net/

Received on Monday, 16 January 2012 12:23:38 UTC