<br><font size=2 face="sans-serif">My view: The logical type is binary,
so the data in the information item is binary, the length facets should
always deal in bytes, and validation checks the length of the binary data
in bytes.</font>
<br>
<br><font size=2 face="sans-serif">From the above, of the two simplifications
below, I would rather disallow the text representations of xs:hexBinary
and xs:base64Binary. Fyi MRM today </font>
<br><font size=2 face="sans-serif">- does not support text reps for binary
</font>
<br><font size=2 face="sans-serif">- has not had such a request from users
</font>
<br><font size=2 face="sans-serif">- uses length/minLength/maxLength facets
to validate binary field length post-parse</font>
<br><font size=2 face="sans-serif">- uses length/maxLength to populate
the default for the physical length. </font>
<br>
<br><font size=2 face="sans-serif">Regards, Steve<br>
<br>
Steve Hanson<br>
WebSphere Message Brokers<br>
Hursley, UK<br>
Internet: smh@uk.ibm.com<br>
Phone (+44)/(0) 1962-815848</font>
<br>
<br>
<br>
<table width=100%>
<tr valign=top>
<td width=40%><font size=1 face="sans-serif"><b>Mike Beckerle &lt;beckerle@us.ibm.com&gt;</b>
</font>
<br><font size=1 face="sans-serif">Sent by: dfdl-wg-bounces@ogf.org</font>
<p><font size=1 face="sans-serif">16/11/2007 23:09</font>
<td width=59%>
<table width=100%>
<tr valign=top>
<td>
<div align=right><font size=1 face="sans-serif">To</font></div>
<td><font size=1 face="sans-serif">dfdl-wg@ogf.org</font>
<tr valign=top>
<td>
<div align=right><font size=1 face="sans-serif">cc</font></div>
<td>
<tr valign=top>
<td>
<div align=right><font size=1 face="sans-serif">Subject</font></div>
<td><font size=1 face="sans-serif">[DFDL-WG] DFDL hexBinary and base64Binary</font></table>
<br>
<table>
<tr valign=top>
<td>
<td></table>
<br></table>
<br>
<br>
<br><font size=2 face="sans-serif"><br>
I'm trying to wrap up the opaque/hexBinary/base64Binary topic.</font><font size=3>
<br>
</font><font size=2 face="sans-serif"><br>
I need opinions on this discussion.</font><font size=3> <br>
</font><font size=2 face="sans-serif"><br>
Currently we have a property, dfdl:binaryType </font><font size=2 face="Arial"><b>:</b></font><font size=3>
<br>
</font><font size=2 face="Arial"><b><br>
Properties Specific to Binary Types (hexBinary, base64Binary)</b></font><font size=3>
</font>
<table border=4 width=100%>
<tr valign=top>
<td width=19%><font size=1 face="Arial"><i>Property Name</i></font><font size=3>
</font>
<td width=80%><font size=1 face="Arial"><i>Description</i></font><font size=3>
</font>
<tr valign=top>
<td><font size=1 face="Arial">binaryType</font><font size=3> </font>
<td><font size=1 face="Arial">Enum</font><font size=3> </font>
<p><font size=1 face="Arial">This specifies the encoding method for the
binary. &nbsp;</font><font size=3> </font>
<p><font size=1 face="Arial">Valid values are ‘unspecified’, ‘hexBinary’,
‘base64Binary’, ‘uuencoded’</font><font size=3> </font>
<p><font size=1 face="Arial">Annotation: dfdl:element (simple type ‘binary’,
‘opaque’)</font></table>
<p><font size=3><br>
</font><font size=2 face="sans-serif"><br>
This property speaks to what kinds of representations can we interpret
and construct logical hexbinary values from? (similarly base64Binary)</font><font size=3>
<br>
</font><font size=2 face="sans-serif"><br>
I believe the above is not clear, and causes issues with the xs:length
facet of XSD.</font><font size=3> <br>
</font><font size=2 face="sans-serif"><br>
I propose the 4 tables below which describe the 4 cases:</font><font size=3>
<br>
</font><font size=2 face="sans-serif"><br>
hexbinary - binary</font><font size=3> </font><font size=2 face="sans-serif"><br>
hexbinary - text</font><font size=3> </font><font size=2 face="sans-serif"><br>
base64binary - binary</font><font size=3> </font><font size=2 face="sans-serif"><br>
base64binary - text</font><font size=3> <br>
</font><font size=2 face="sans-serif"><br>
I have specified these so that the meaning of the xs:length facet is always
interpreted exactly as in XSD. It always refers to the number of bytes
of the unencoded binary data, and never to the number of characters in
the encoded form.</font><font size=3> <br>
</font>
<table border=4 width=100%>
<tr valign=top>
<td width=9%>
<div align=center><font size=1 face="Arial"><b><i>type</i></b></font></div>
<td width=9%>
<div align=center><font size=1 face="Arial"><b><i>representation</i></b></font></div>
<td width=27%>
<div align=center><font size=1 face="Arial"><b><i>lengthKind</i></b></font></div>
<td width=16%>
<div align=center><font size=1 face="Arial"><b><i>resulting length (in
bytes)</i></b></font></div>
<td width=37%>
<div align=center><font size=1 face="Arial"><b><i>other</i></b></font></div>
<tr valign=top>
<td><font size=2 face="Arial">xs:hexBinary</font><font size=3> </font>
<td><font size=2 face="Arial">binary</font><font size=3> </font>
<td><font size=2 face="Arial">implicit</font><font size=3> </font>
<td><font size=2 face="Arial">xs:length facet </font>
<td>
<tr valign=top>
<td>
<td>
<td><font size=2 face="Arial">explicit</font><font size=3> </font>
<td><font size=2 face="Arial">dfdl:length </font>
<td><font size=1 face="Arial">Validation: xs:length facet must be equal
to resulting length in bytes &nbsp;</font><font size=3> </font>
<p><font size=1 face="Arial">(TBD: similar range checks on xs:minLength,
xs:maxLength) </font>
<tr valign=top>
<td>
<td>
<td><font size=2 face="Arial">endOfData or delimited or nullTerminated</font><font size=3>
</font>
<td><font size=2 face="Arial">variable</font><font size=3> </font>
<td></table>
<br>
<table border=4 width=100%>
<tr valign=top>
<td width=7%>
<div align=center><font size=1 face="Arial"><b><i>type</i></b></font></div>
<td width=7%>
<div align=center><font size=1 face="Arial"><b><i>representation</i></b></font></div>
<td width=19%>
<div align=center><font size=1 face="Arial"><b><i>lengthKind</i></b></font></div>
<td width=15%>
<div align=center><font size=1 face="Arial"><b><i>resulting length (in
characters)</i></b></font></div>
<td width=49%>
<div align=center><font size=1 face="Arial"><b><i>other</i></b></font></div>
<tr valign=top>
<td><font size=2 face="Arial">xs:hexBinary</font><font size=3> </font>
<td><font size=2 face="Arial">text</font><font size=3> </font>
<td><font size=2 face="Arial">implicit</font><font size=3> </font>
<td><font size=2 face="Arial">2 * xs:length facet</font><font size=3> </font>
<td>
<tr valign=top>
<td>
<td>
<td><font size=2 face="Arial">explicit</font><font size=3> </font>
<td><font size=2 face="Arial">dfdl:length</font><font size=3> </font>
<td><font size=1 face="Arial">Validation: xs:length facet &nbsp;* 2 must
be equal to resulting character length (after removing all non-hex characters)</font><font size=3>
</font>
<p><font size=1 face="Arial">&nbsp;(TBD: similar range checks on xs:minLength,
xs:maxLength) </font>
<tr valign=top>
<td>
<td>
<td><font size=2 face="Arial">endOfData, delimited, nullTerminated</font><font size=3>
</font>
<td><font size=2 face="Arial">Variable</font><font size=3> </font>
<td></table>
<p>
<table border=4 width=100%>
<tr valign=top>
<td width=11%>
<div align=center><font size=1 face="Arial"><b><i>type</i></b></font></div>
<td width=9%>
<div align=center><font size=1 face="Arial"><b><i>representation</i></b></font></div>
<td width=26%>
<div align=center><font size=1 face="Arial"><b><i>dfdl:lengthKind</i></b></font></div>
<td width=15%>
<div align=center><font size=1 face="Arial"><b><i>resulting length (in
bytes)</i></b></font></div>
<td width=36%>
<div align=center><font size=1 face="Arial"><b><i>other</i></b></font></div>
<tr valign=top>
<td><font size=2 face="Arial">xs:base64Binary</font><font size=3> </font>
<td><font size=2 face="Arial">binary</font><font size=3> </font>
<td><font size=2 face="Arial">implicit</font><font size=3> </font>
<td><font size=2 face="Arial">xs:length facet </font>
<td>
<tr valign=top>
<td>
<td>
<td><font size=2 face="Arial">explicit</font><font size=3> </font>
<td><font size=2 face="Arial">dfdl:length </font>
<td><font size=1 face="Arial">Validation: xs:length facet must be equal
to resulting length in bytes </font>
<p><font size=1 face="Arial">(TBD: similar range checks on xs:minLength,
xs:maxLength) </font>
<tr valign=top>
<td>
<td>
<td><font size=2 face="Arial">endOfData or delimited or nullTerminated</font><font size=3>
</font>
<td><font size=2 face="Arial">variable</font><font size=3> </font>
<td></table>
<p>
<table border=4 width=100%>
<tr valign=top>
<td width=8%>
<div align=center><font size=1 face="Arial"><b><i>type</i></b></font></div>
<td width=7%>
<div align=center><font size=1 face="Arial"><b><i>representation</i></b></font></div>
<td width=18%>
<div align=center><font size=1 face="Arial"><b><i>lengthKind</i></b></font></div>
<td width=14%>
<div align=center><font size=1 face="Arial"><b><i>resulting length (in
characters)</i></b></font></div>
<td width=51%>
<div align=center><font size=1 face="Arial"><b><i>other</i></b></font></div>
<tr valign=top>
<td><font size=2 face="Arial">xs:base64Binary</font><font size=3> </font>
<td><font size=2 face="Arial">text</font><font size=3> </font>
<td><font size=2 face="Arial">implicit</font><font size=3> </font>
<td><font size=2 face="Arial">8/6 * xs:length facet</font><font size=3>
</font>
<td>
<tr valign=top>
<td>
<td>
<td><font size=2 face="Arial">explicit</font><font size=3> </font>
<td><font size=2 face="Arial">dfdl:length</font><font size=3> </font>
<td><font size=1 face="Arial">Validation: xs:length facet &nbsp;* &nbsp;8/6
must be equal to resulting character length (after removing all non-base64-encoding
characters)</font><font size=3> </font>
<p><font size=1 face="Arial">(TBD: similar range checks on xs:minLength,
xs:maxLength) </font>
<tr valign=top>
<td>
<td>
<td><font size=2 face="Arial">endOfData, delimited, nullTerminated</font><font size=3>
</font>
<td><font size=2 face="Arial">Variable</font><font size=3> </font>
<td></table>
<p><font size=2 face="sans-serif">Looking at the above, one way to simplify
things quite a bit is to disallow the xs:length and xs:minLength and xs:maxLength
&nbsp;facet on hexBinary and base64Binary types in DFDL schemas.</font><font size=3>
</font>
<p><font size=2 face="sans-serif">Then the implicit lengthKind goes away,
and the complex validation check for the xs:length facet goes away. &nbsp;I
recommend this.</font><font size=3> </font>
<p><font size=2 face="sans-serif">Another simplification alternative is
to disallow representation text altogether, but I am concerned that peopel
with data that does contain hex or base64 data will naturally want to use
these types to model it. &nbsp;I don't recommend this.</font><font size=3>
</font>
<p><font size=2 face="sans-serif">...mikeb</font><font size=3> </font>
<p><font size=2 face="sans-serif">Mike Beckerle<br>
STSM, Architect, Scalable Computing<br>
IBM Software Group<br>
Information Platform and Solutions<br>
Westborough, MA 01581<br>
direct: voice and FAX 508-599-7148<br>
assistant: Pam Riordan &nbsp; <br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; priordan@us.ibm.com
<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 508-599-7046<br>
</font><tt><font size=2>--<br>
 &nbsp;dfdl-wg mailing list<br>
 &nbsp;dfdl-wg@ogf.org<br>
 &nbsp;http://www.ogf.org/mailman/listinfo/dfdl-wg</font></tt>
<br><font size=3 face="sans-serif"><br>
</font>
<br><font size=3 face="sans-serif"><br>
</font>
<hr><font size=2 face="sans-serif"><br>
<i><br>
</i></font>
<p><font size=2 face="sans-serif"><i>Unless stated otherwise above:<br>
IBM United Kingdom Limited - Registered in England and Wales with number
741598. <br>
Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6
3AU</i></font>
<p><font size=2 face="sans-serif"><br>
</font><font size=3 face="sans-serif"><br>
</font>
<br>
<br><font size=3 face="sans-serif"><br>
<br>
</font>
<br><font size=3 face="sans-serif"><br>
</font>
<hr><font size=2 face="sans-serif"><br>
<i><br>
</i></font>
<p><font size=2 face="sans-serif"><i>Unless stated otherwise above:<br>
IBM United Kingdom Limited - Registered in England and Wales with number
741598. <br>
Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6
3AU</i></font>
<p><font size=2 face="sans-serif"><br>
</font><font size=3 face="sans-serif"><br>
</font>
<br>
<br><font size=3 face="sans-serif"><br>
</font>