OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

ebxml-iic message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]


Subject: [ebxml-iic] Re: One point to clarify



Jacques,
 
  I'm posting this to the list as you suggested.  My comments are [MIKE2]
 
Mike
 
----- Original Message ----- 
From: Michael  <mailto:michael.kass@nist.gov> Kass 
To: Jacques Durand <mailto:JDurand@us.fujitsu.com>  
Sent: Monday, September 20, 2004 4:57 PM
Subject: Re: One point to clarify

Jacques,
 
   More inline
----- Original Message ----- 
From: Jacques Durand <mailto:JDurand@us.fujitsu.com>  
To: 'Michael Kass' <mailto:michael.kass@nist.gov>  ; Jacques
<mailto:JDurand@us.fujitsu.com> Durand 
Sent: Monday, September 20, 2004 4:28 PM
Subject: RE: One point to clarify

inline
-----Original Message-----
From: Michael Kass [mailto:michael.kass@nist.gov]
Sent: Monday, September 20, 2004 10:51 AM
To: Jacques Durand
Subject: Re: One point to clarify


 
----- Original Message ----- 
From: Jacques Durand <mailto:JDurand@us.fujitsu.com>  
To: 'Michael Kass' <mailto:michael.kass@nist.gov>  ; Jacques Durand
<mailto:JDurand@us.fujitsu.com>  
Sent: Monday, September 20, 2004 1:17 PM
Subject: RE: One point to clarify

Mike:
This is precisely the issue:
<VerifyContent>/FilterResult/Message//ErrorList[count()=0]</VerifyContent>
will be true in the two following cases:
(a)- there are messages selected by filter, but none with an ErrorList.
(b)- there were no messages selected by filter, because it timed-out.
Si I guess what we would write if we want the expr to be true only in case
of (a), is:
<VerifyContent>/FilterResult/Message[count()!=0]//ErrorList[count()=0]</Veri
fyContent>
Would that work?
 
[MIKE] - I think that your above query would acutally do the opposite..
meaning it is counting the number of Messages that DO NOT
have an ErrorList present [count()=0].  So it could conceivably evaluate to
"true" (pass), if if finds any message at all that does not contain an
ErrorList, which is not our intent if we want to invoke the default behavior
of the TestAssertion>
[Jacques Durand] actually my query path didn't make sense...(the count()!=0
is superfluous)   By the way, a "true" value here means
that the XPath returns a non-empty node-set as result.
 
 
I should have written my XPath Filter 
<VerifyContent>/FilterResult/Message[//eb:ErrrorList][count()=0]</VerifyCont
ent>
 
[MIKE] - This query returns  a boolean "true/false" result .   The boolean
result is determined by the "count()" function.
This query counts the number Messages having an "eb:ErrorList" present
somewhere in the message ( I could have been more specific where.. but this
suffices for the explanation) . If the count()=0, then the VerifyContent
result is "true", and the TestAssertion passes (default behavior).
Meaning..
if NO Messages containing an ErrorList are found in the FilterResult.. then
the TestAssertion passes.
[Jacques Durand] All this is based on this interpretation:
- if this XPath has produced a non-empty node-set, the assertion evaluates
to "true".
 
[MIKE2] - I believe that use of the "count()=0" function does not produce a
node-set object.. but produces a "boolean" object result   Not all XPath
queries produce a node-set.  Some XPath expressions produce a number, or a
string, or a boolean objectas their result.  I believe a non-empty string
results in a "true" result.  A boolean object result of "true" creates a
final XPath query result of "true".  A number returns true if "it is neither
a positive nor negative ZERO or a NAN" . (Please see section 8.3.4.4.1 of
the current Test Framework document for a description of the different types
of objects that can be returned by an XPath query.)   So... what this means
for this particular TestAssertion ( I think ) is that we are doing a boolean
evaluation count()=0 on the number of Message elements that contain an
ErrorList
 
- if this XPath has produced  an empty node-set, the assertion evaluates to
"false" .
 
[MIKE2] - I agree , if we are producing a node-set object as the result
object.  But I believe we are producing a boolean result object here
(because of the predicate count()=0 )  If the predicate were simply count(),
the result would be a number.  If the predicate were simply
[//eb:ErrorList], the  result would be a node-set.  So the semantic result
of the query below would be a boolean one, with a result of "true" (if
count()=0) or "false" (if count()!=0).  And this would satisfy our
TestAssertion without the need for any additional semantic paramters (such
as empty="true").
 
So in the present case, at the time we evaluate teh XPath, we want a
positive outcome (true) if either (1) no messages received, (2) messages
received but with no ErrorList. But in case (2), the above XPath would not
produce any node set... which means "false".
One simple way to deal with this corner case (emptyness of filter result) is
to write something like: 
<VerifyContent
empty="true">/FilterResult/Message[//eb:ErrrorList][count()=0]</VerifyConten
t>
what do you think?
 
[MIKE2] - I think that we need to verify the semantics of our expression
before we determine if we need to introduce more operators into an already
complex syntax.
 
 
Jacques
 
-----Original Message-----
From: Michael Kass [mailto:michael.kass@nist.gov]
Sent: Monday, September 20, 2004 9:32 AM
To: Jacques Durand
Subject: Re: One point to clarify


 
----- Original Message ----- 
From: Jacques Durand <mailto:JDurand@us.fujitsu.com>  
To: 'michael.kass@nist.gov' <mailto:'michael.kass@nist.gov'>  
Sent: Friday, September 17, 2004 10:03 PM
Subject: One point to clarify

Mike:
 
One more point to clarify :
3) Do we need to define a "stepDurationFail" Test Driver parameter ? Agree
we don't BUT:
Now, shouldn't we have a more explicit way to test the emptiness of a filter
result (e.g. an explicit built-in
boolean function like "emptyResult") ? We should, because regular
TestAssertion conditions on the result messages 
will not have an intuitive meaning. They usually assume that there is at
least one message in the result buffer.
If this result set is empty, teh testAssertion outcome is unclear: e.g.
verifying that no message filtered has 
a particular header element: "NOT(//mymessage/myelement)" what if the filter
result is empty? is that a "true" or a "false"? 
So it seems we need a primitive to test this. (Of course, we could use
"count()" to test the number of messages...
but for convenience shouldn't we have something much shorter like above
boolean built-in?)
 
[MIKE] - I think the easiest way to code this is:
 
<GetMessage>
<Filter>/MessageStore/Message//ErrorList</Filter>
</GetMessage>
<TestAssertion description="Verify that no ErrorList element is present">
<VerifyContent>/FilterResult/Message//ErrorList[count()=0]</VerifyContent>
</TestAssertion>
 
Using your StepDurationFail parameter:
 
<GetMessage>
<Filter>/MessageStore/Message//ErrorList</Filter>
</GetMessage>
<TestAssertion description="Verify that no ErrorList element is present
using the StepDurationFail parameter">
<VerifyParameter>
<Name>StepDurationFail</Name>
<Value>true</Value>
</VerifyParameter>
</TestAssertion>
 
I'll put it in the spec for with documentatio for the <Filter> element.
 
 



 
Also, could you post the OpenOffice draft on our site? (Or its PDF
conversion?
it is very easy to export a PDF from OpenOffice )
 
[MIKE] - I just posted it ( tracking is turned on).  I added the 3 use
cases, plus their normative representations in the Appendix.
Also, many small changes as we implemented here.    I'll post my response to
the ETSI comments shortly.
 
 
Thanks,
Jacques
 

------_=_NextPart_001_01C4A29A.A0324990
Content-Type: text/html;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML xmlns=3D"http://www.w3.org/TR/REC-html40"; xmlns:o =3D=20
"urn:schemas-microsoft-com:office:office" xmlns:w =3D=20
"urn:schemas-microsoft-com:office:word"><HEAD>
<META HTTP-EQUIV=3D"Content-Type" CONTENT=3D"text/html; =
charset=3Diso-8859-1">


<META content=3DWord.Document name=3DProgId>
<META content=3D"MSHTML 6.00.2800.1458" name=3DGENERATOR>
<META content=3D"Microsoft Word 9" name=3DOriginator><LINK=20
href=3D"cid:filelist.xml@01C40789.E689C8C0"; rel=3DFile-List><!--[if gte =
mso 9]><xml>
 <o:OfficeDocumentSettings>
  <o:DoNotRelyOnCSS/>
 </o:OfficeDocumentSettings>
</xml><![endif]--><!--[if gte mso 9]><xml>
 <w:WordDocument>
  <w:View>Normal</w:View>
  <w:Zoom>0</w:Zoom>
  <w:DocumentKind>DocumentEmail</w:DocumentKind>
  <w:EnvelopeVis/>
 </w:WordDocument>
</xml><![endif]-->
<STYLE>@page Section1 {size: 8.5in 11.0in; margin: 1.0in 1.25in 1.0in =
1.25in; mso-header-margin: .5in; mso-footer-margin: .5in; =
mso-paper-source: 0; }
P.MsoNormal {
	FONT-SIZE: 12pt; MARGIN: 0in 0in 0pt; FONT-FAMILY: "Times New Roman"; =
mso-style-parent: ""; mso-pagination: widow-orphan; =
mso-fareast-font-family: "Times New Roman"
}
LI.MsoNormal {
	FONT-SIZE: 12pt; MARGIN: 0in 0in 0pt; FONT-FAMILY: "Times New Roman"; =
mso-style-parent: ""; mso-pagination: widow-orphan; =
mso-fareast-font-family: "Times New Roman"
}
DIV.MsoNormal {
	FONT-SIZE: 12pt; MARGIN: 0in 0in 0pt; FONT-FAMILY: "Times New Roman"; =
mso-style-parent: ""; mso-pagination: widow-orphan; =
mso-fareast-font-family: "Times New Roman"
}
A:link {
	COLOR: blue; TEXT-DECORATION: underline; text-underline: single
}
SPAN.MsoHyperlink {
	COLOR: blue; TEXT-DECORATION: underline; text-underline: single
}
A:visited {
	COLOR: purple; TEXT-DECORATION: underline; text-underline: single
}
SPAN.MsoHyperlinkFollowed {
	COLOR: purple; TEXT-DECORATION: underline; text-underline: single
}
P.MsoAutoSig {
	FONT-SIZE: 12pt; MARGIN: 0in 0in 0pt; FONT-FAMILY: "Times New Roman"; =
mso-pagination: widow-orphan; mso-fareast-font-family: "Times New =
Roman"
}
LI.MsoAutoSig {
	FONT-SIZE: 12pt; MARGIN: 0in 0in 0pt; FONT-FAMILY: "Times New Roman"; =
mso-pagination: widow-orphan; mso-fareast-font-family: "Times New =
Roman"
}
DIV.MsoAutoSig {
	FONT-SIZE: 12pt; MARGIN: 0in 0in 0pt; FONT-FAMILY: "Times New Roman"; =
mso-pagination: widow-orphan; mso-fareast-font-family: "Times New =
Roman"
}
SPAN.EmailStyle15 {
	COLOR: black; mso-style-type: personal-compose; mso-ansi-font-size: =
10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; =
mso-bidi-font-family: Arial
}
DIV.Section1 {
	page: Section1
}
</STYLE>
</HEAD>
<BODY lang=3DEN-US style=3D"tab-interval: .5in" vLink=3Dpurple =
link=3Dblue=20
bgColor=3D#ffffff>
<DIV><SPAN class=3D097144600-25092004><FONT face=3DArial=20
color=3D#0000ff>Mike:</FONT></SPAN></DIV>
<DIV><SPAN class=3D097144600-25092004><FONT face=3DArial=20
color=3D#0000ff></FONT></SPAN>&nbsp;</DIV>
<DIV><SPAN class=3D097144600-25092004><FONT face=3DArial =
color=3D#0000ff>that seems to=20
work, XPath can indeed evaluate to boolean.</FONT></SPAN></DIV>
<DIV><SPAN class=3D097144600-25092004><FONT face=3DArial =
color=3D#0000ff>We need to=20
say a word on how to test emptiness of filter result, in the spec (not =
just in=20
use case), probably at the place we </FONT></SPAN></DIV>
<DIV><SPAN class=3D097144600-25092004><FONT face=3DArial =
color=3D#0000ff>explain how=20
to filter the message store.</FONT></SPAN></DIV>
<DIV><SPAN class=3D097144600-25092004><FONT face=3DArial=20
color=3D#0000ff></FONT></SPAN>&nbsp;</DIV>
<DIV><SPAN class=3D097144600-25092004><FONT face=3DArial =
color=3D#0000ff>From a=20
scripting perspective, it is OK to have two Test Assertions, one =
testing the=20
filter result is not empty,</FONT></SPAN></DIV>
<DIV><SPAN class=3D097144600-25092004><FONT face=3DArial =
color=3D#0000ff>and the other=20
testing&nbsp; if the content is what is expected.</FONT></SPAN></DIV>
<DIV><SPAN class=3D097144600-25092004><FONT face=3DArial=20
color=3D#0000ff></FONT></SPAN>&nbsp;</DIV>
<DIV><SPAN class=3D097144600-25092004><FONT face=3DArial =
color=3D#0000ff>I think we=20
need to show how that works in one of our use cases at least:=20
</FONT></SPAN></DIV>
<DIV><SPAN class=3D097144600-25092004><FONT face=3DArial =
color=3D#0000ff>as the timing=20
of GetMessage is an important for test cases, and cases where no result =
was=20
filtered will occur.</FONT></SPAN></DIV>
<DIV><SPAN class=3D097144600-25092004><FONT face=3DArial=20
color=3D#0000ff></FONT></SPAN>&nbsp;</DIV>
<DIV><SPAN class=3D097144600-25092004><FONT face=3DArial=20
color=3D#0000ff></FONT></SPAN>&nbsp;</DIV>
<DIV><SPAN class=3D097144600-25092004><FONT face=3DArial=20
color=3D#0000ff>jacques</FONT></SPAN></DIV>
<BLOCKQUOTE dir=3Dltr style=3D"MARGIN-RIGHT: 0px">
  <DIV class=3DOutlookMessageHeader dir=3Dltr align=3Dleft><FONT =
face=3DTahoma=20
  size=3D2>-----Original Message-----<BR><B>From:</B> Michael Kass=20
  [mailto:michael.kass@nist.gov]<BR><B>Sent:</B> Friday, September 24, =
2004 8:18=20
  AM<BR><B>To:</B> ebxml-iic@lists.oasis-open.org<BR><B>Subject:</B> =
[ebxml-iic]=20
  Re: One point to clarify<BR><BR></FONT></DIV>
  <DIV><FONT face=3DArial size=3D2>Jacques,</FONT></DIV>
  <DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
  <DIV><FONT face=3DArial size=3D2>&nbsp; I'm posting this to the list =
as you=20
  suggested.&nbsp; My comments are [MIKE2]</FONT></DIV>
  <DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
  <DIV><FONT face=3DArial size=3D2>Mike</FONT></DIV>
  <DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
  <BLOCKQUOTE dir=3Dltr=20
  style=3D"PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; =
BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
    <DIV style=3D"FONT: 10pt arial">----- Original Message ----- </DIV>
    <DIV=20
    style=3D"BACKGROUND: #e4e4e4; FONT: 10pt arial; font-color: =
black"><B>From:</B>=20
    <A title=3Dmichael.kass@nist.gov =
href=3D"mailto:michael.kass@nist.gov";>Michael=20
    Kass</A> </DIV>
    <DIV style=3D"FONT: 10pt arial"><B>To:</B> <A =
title=3DJDurand@us.fujitsu.com=20
    href=3D"mailto:JDurand@us.fujitsu.com";>Jacques Durand</A> </DIV>
    <DIV style=3D"FONT: 10pt arial"><B>Sent:</B> Monday, September 20, =
2004 4:57=20
    PM</DIV>
    <DIV style=3D"FONT: 10pt arial"><B>Subject:</B> Re: One point to =
clarify</DIV>
    <DIV><BR></DIV>
    <DIV><FONT face=3DArial size=3D2>Jacques,</FONT></DIV>
    <DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
    <DIV><FONT face=3DArial size=3D2>&nbsp;&nbsp; More =
inline</FONT></DIV>
    <BLOCKQUOTE dir=3Dltr=20
    style=3D"PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; =
BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
      <DIV style=3D"FONT: 10pt arial">----- Original Message ----- =
</DIV>
      <DIV=20
      style=3D"BACKGROUND: #e4e4e4; FONT: 10pt arial; font-color: =
black"><B>From:</B>=20
      <A title=3DJDurand@us.fujitsu.com=20
      href=3D"mailto:JDurand@us.fujitsu.com";>Jacques Durand</A> </DIV>
      <DIV style=3D"FONT: 10pt arial"><B>To:</B> <A =
title=3Dmichael.kass@nist.gov=20
      href=3D"mailto:michael.kass@nist.gov";>'Michael Kass'</A> ; <A=20
      title=3DJDurand@us.fujitsu.com =
href=3D"mailto:JDurand@us.fujitsu.com";>Jacques=20
      Durand</A> </DIV>
      <DIV style=3D"FONT: 10pt arial"><B>Sent:</B> Monday, September =
20, 2004 4:28=20
      PM</DIV>
      <DIV style=3D"FONT: 10pt arial"><B>Subject:</B> RE: One point to=20
      clarify</DIV>
      <DIV><BR></DIV>
      <DIV><FONT face=3DArial color=3D#0000ff><SPAN=20
      class=3D017001420-20092004>inline</SPAN></FONT></DIV>
      <BLOCKQUOTE dir=3Dltr style=3D"MARGIN-RIGHT: 0px">
        <DIV class=3DOutlookMessageHeader dir=3Dltr align=3Dleft><FONT =
face=3DTahoma=20
        size=3D2>-----Original Message-----<BR><B>From:</B> Michael =
Kass=20
        [mailto:michael.kass@nist.gov]<BR><B>Sent:</B> Monday, =
September 20,=20
        2004 10:51 AM<BR><B>To:</B> Jacques Durand<BR><B>Subject:</B> =
Re: One=20
        point to clarify<BR><BR></FONT></DIV>
        <DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
        <BLOCKQUOTE dir=3Dltr=20
        style=3D"PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: =
5px; BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
          <DIV style=3D"FONT: 10pt arial">----- Original Message ----- =
</DIV>
          <DIV=20
          style=3D"BACKGROUND: #e4e4e4; FONT: 10pt arial; font-color: =
black"><B>From:</B>=20
          <A title=3DJDurand@us.fujitsu.com=20
          href=3D"mailto:JDurand@us.fujitsu.com";>Jacques Durand</A> =
</DIV>
          <DIV style=3D"FONT: 10pt arial"><B>To:</B> <A=20
          title=3Dmichael.kass@nist.gov=20
          href=3D"mailto:michael.kass@nist.gov";>'Michael Kass'</A> ; <A =

          title=3DJDurand@us.fujitsu.com=20
          href=3D"mailto:JDurand@us.fujitsu.com";>Jacques Durand</A> =
</DIV>
          <DIV style=3D"FONT: 10pt arial"><B>Sent:</B> Monday, =
September 20, 2004=20
          1:17 PM</DIV>
          <DIV style=3D"FONT: 10pt arial"><B>Subject:</B> RE: One point =
to=20
          clarify</DIV>
          <DIV><BR></DIV>
          <DIV><SPAN class=3D533011317-20092004><FONT face=3DArial=20
          color=3D#0000ff>Mike:</FONT></SPAN></DIV>
          <DIV><SPAN class=3D533011317-20092004><FONT face=3DArial=20
          color=3D#0000ff>This is precisely the =
issue:</FONT></SPAN></DIV>
          <DIV><SPAN class=3D533011317-20092004><FONT=20
          =
face=3DArial>&lt;VerifyContent&gt;/<STRONG>FilterResult/Message//ErrorLi=
st[count()=3D0]&lt;/</STRONG>VerifyContent&gt;</FONT></SPAN></DIV>
          <DIV><SPAN class=3D533011317-20092004><FONT =
face=3DArial><SPAN=20
          class=3D533011317-20092004><FONT face=3DArial =
color=3D#0000ff>will be true=20
          in the two following cases:</FONT></SPAN></FONT></SPAN></DIV>
          <DIV><SPAN class=3D533011317-20092004><FONT face=3DArial=20
          color=3D#0000ff><SPAN class=3D533011317-20092004>(a)- there =
are messages=20
          selected by filter, but none with an=20
          ErrorList.</SPAN></FONT></SPAN></DIV>
          <DIV><SPAN class=3D533011317-20092004><FONT face=3DArial=20
          color=3D#0000ff><SPAN class=3D533011317-20092004>(b)- there =
were no=20
          messages selected by filter, because it=20
          timed-out.</SPAN></FONT></SPAN></DIV>
          <DIV><SPAN class=3D533011317-20092004><FONT face=3DArial=20
          color=3D#0000ff><SPAN class=3D533011317-20092004>Si I guess =
what we would=20
          write if we want the expr to be true only in case of (a),=20
          is:</SPAN></FONT></SPAN></DIV>
          <DIV><SPAN class=3D533011317-20092004><FONT =
face=3DArial><SPAN=20
          class=3D533011317-20092004><SPAN =
class=3D533011317-20092004><FONT=20
          =
face=3DArial>&lt;VerifyContent&gt;/<STRONG>FilterResult/Message[count()!=
=3D0]//ErrorList[count()=3D0]&lt;/</STRONG>VerifyContent&gt;</FONT></SPA=
N></SPAN></FONT></SPAN></DIV>
          <DIV><SPAN class=3D533011317-20092004><FONT face=3DArial=20
          color=3D#0000ff><SPAN class=3D533011317-20092004>Would that=20
          work?</SPAN></FONT></SPAN></DIV>
          <DIV><SPAN class=3D533011317-20092004><FONT face=3DArial=20
          color=3D#0000ff><SPAN=20
          class=3D533011317-20092004></SPAN></FONT></SPAN>&nbsp;</DIV>
          <DIV><SPAN class=3D533011317-20092004><FONT =
face=3DArial><SPAN=20
          class=3D533011317-20092004>[MIKE] - I think that your above =
query would=20
          acutally do the opposite.. meaning it is counting the number =
of=20
          Messages that DO NOT</SPAN></FONT></SPAN></DIV>
          <DIV><SPAN class=3D533011317-20092004><SPAN=20
          class=3D533011317-20092004><FONT face=3DArial>have an =
ErrorList present=20
          [count()=3D0].&nbsp; So it could conceivably evaluate to =
"true" (pass),=20
          if if finds any message at all that does not contain an =
ErrorList,=20
          which is not our intent if we want to invoke the default =
behavior of=20
          the TestAssertion&gt;<BR><SPAN =
class=3D017001420-20092004><FONT=20
          color=3D#ff0000>[Jacques Durand]&nbsp;actually my query path =
didn't make=20
          sense...(the count()!=3D0 is superfluous) &nbsp; By the way, =
a "true"=20
          value here means</FONT></SPAN></FONT></SPAN></SPAN></DIV>
          <DIV><SPAN class=3D533011317-20092004><SPAN=20
          class=3D533011317-20092004><FONT face=3DArial =
color=3D#ff0000><SPAN=20
          class=3D017001420-20092004>that the XPath returns a non-empty =
node-set=20
          as result.</SPAN></FONT></SPAN></SPAN></DIV>
          <DIV><SPAN class=3D533011317-20092004><FONT face=3DArial=20
          color=3D#0000ff><SPAN=20
          class=3D533011317-20092004></SPAN></FONT></SPAN>&nbsp;</DIV>
          <DIV><SPAN class=3D533011317-20092004><FONT face=3DArial=20
          color=3D#0000ff><SPAN=20
          class=3D533011317-20092004></SPAN></FONT></SPAN>&nbsp;</DIV>
          <DIV><SPAN class=3D533011317-20092004><FONT face=3DArial=20
          color=3D#0000ff><SPAN class=3D533011317-20092004>I should =
have written my=20
          XPath Filter </SPAN></FONT></SPAN></DIV>
          <DIV><SPAN class=3D533011317-20092004><FONT =
face=3DArial><SPAN=20
          class=3D533011317-20092004><SPAN =
class=3D533011317-20092004><FONT=20
          face=3DArial><SPAN class=3D533011317-20092004><SPAN=20
          class=3D533011317-20092004><FONT=20
          =
face=3DArial>&lt;VerifyContent&gt;/<STRONG>FilterResult/Message[//eb:Err=
rorList][count()=3D0]&lt;/</STRONG>VerifyContent&gt;</FONT></SPAN></SPAN=
></FONT></SPAN></SPAN></FONT></SPAN></DIV>
          <DIV><SPAN class=3D533011317-20092004><FONT =
face=3DArial><SPAN=20
          class=3D533011317-20092004><SPAN =
class=3D533011317-20092004><FONT=20
          face=3DArial><SPAN class=3D533011317-20092004><SPAN=20
          =
class=3D533011317-20092004></SPAN></SPAN></FONT></SPAN></SPAN></FONT></S=
PAN>&nbsp;</DIV>
          <DIV><SPAN class=3D533011317-20092004><FONT =
face=3DArial><SPAN=20
          class=3D533011317-20092004><SPAN =
class=3D533011317-20092004><FONT=20
          face=3DArial><SPAN class=3D533011317-20092004><SPAN=20
          class=3D533011317-20092004>[MIKE] - This query returns&nbsp; =
a boolean=20
          "true/false" result .&nbsp;&nbsp; The boolean result is =
determined by=20
          the "count()"=20
          =
function.</SPAN></SPAN></FONT></SPAN></SPAN></FONT></SPAN></DIV>
          <DIV><SPAN class=3D533011317-20092004><FONT =
face=3DArial><SPAN=20
          class=3D533011317-20092004><SPAN =
class=3D533011317-20092004><FONT=20
          face=3DArial><SPAN class=3D533011317-20092004><SPAN=20
          class=3D533011317-20092004>This query counts the number =
Messages having=20
          an "eb:ErrorList" present somewhere in the message ( I could =
have been=20
          more specific where.. but=20
          this</SPAN></SPAN></FONT></SPAN></SPAN></FONT></SPAN></DIV>
          <DIV><SPAN class=3D533011317-20092004><FONT =
face=3DArial><SPAN=20
          class=3D533011317-20092004><SPAN =
class=3D533011317-20092004><FONT=20
          face=3DArial><SPAN class=3D533011317-20092004><SPAN=20
          class=3D533011317-20092004>suffices for the explanation) . If =
the=20
          count()=3D0, then =
</SPAN></SPAN></FONT></SPAN></SPAN></FONT></SPAN><SPAN=20
          class=3D533011317-20092004><FONT face=3DArial><SPAN=20
          class=3D533011317-20092004><SPAN =
class=3D533011317-20092004><FONT=20
          face=3DArial><SPAN class=3D533011317-20092004><SPAN=20
          class=3D533011317-20092004>the VerifyContent result is =
"true", and the=20
          TestAssertion passes (default behavior).&nbsp;=20
          =
Meaning..</SPAN></SPAN></FONT></SPAN></SPAN></FONT></SPAN></DIV>
          <DIV><SPAN class=3D533011317-20092004><SPAN=20
          class=3D533011317-20092004><SPAN =
class=3D533011317-20092004><SPAN=20
          class=3D533011317-20092004><SPAN =
class=3D533011317-20092004><FONT=20
          face=3DArial>if NO Messages containing an ErrorList are found =
in the=20
          FilterResult.. then the TestAssertion passes.<BR><SPAN=20
          class=3D017001420-20092004><FONT color=3D#0000ff>[Jacques =
Durand]&nbsp;All=20
          this is based on this=20
          =
interpretation:</FONT></SPAN></FONT></SPAN></SPAN></SPAN></SPAN></SPAN><=
/DIV>
          <DIV><SPAN class=3D533011317-20092004><SPAN=20
          class=3D533011317-20092004><SPAN =
class=3D533011317-20092004><SPAN=20
          class=3D533011317-20092004><SPAN =
class=3D533011317-20092004><FONT=20
          face=3DArial><SPAN class=3D017001420-20092004><FONT =
color=3D#0000ff>- if=20
          this XPath has produced a non-empty node-set, the assertion =
evaluates=20
          to=20
          =
"true".</FONT></SPAN></FONT></SPAN></SPAN></SPAN></SPAN></SPAN></DIV>
          <DIV><SPAN class=3D533011317-20092004><SPAN=20
          class=3D533011317-20092004><SPAN =
class=3D533011317-20092004><SPAN=20
          class=3D533011317-20092004><SPAN =
class=3D533011317-20092004><FONT=20
          face=3DArial color=3D#0000ff><SPAN=20
          =
class=3D017001420-20092004></SPAN></FONT></SPAN></SPAN></SPAN></SPAN></S=
PAN>&nbsp;</DIV>
          <DIV><SPAN class=3D533011317-20092004><SPAN=20
          class=3D533011317-20092004><SPAN =
class=3D533011317-20092004><SPAN=20
          class=3D533011317-20092004><SPAN =
class=3D533011317-20092004><FONT=20
          face=3DArial><SPAN class=3D017001420-20092004><EM>[MIKE2] - I =
believe that=20
          use of the "count()=3D0" function does not produce a node-set =
object..=20
          but produces a "boolean" object&nbsp;result&nbsp;&nbsp; Not =
all XPath=20
          queries produce a node-set.&nbsp; Some XPath expressions =
produce a=20
          number, or a string, or a boolean objectas their =
result.&nbsp; I=20
          believe a non-empty string results in a "true" result.&nbsp; =
A boolean=20
          object result of "true" creates a final XPath query result of =

          "true".&nbsp; A&nbsp;number returns true if "it is neither a =
positive=20
          nor negative ZERO&nbsp;or a NAN" .&nbsp;(Please see section =
8.3.4.4.1=20
          of the current Test Framework document for a description of =
the=20
          different types of objects that can be returned by an XPath=20
          query.)&nbsp;&nbsp; So... what this means for this particular =

          TestAssertion ( I think ) is that we are doing a boolean =
evaluation=20
          count()=3D0 on the number of Message elements that contain an =

          =
ErrorList</EM></SPAN></FONT></SPAN></SPAN></SPAN></SPAN></SPAN></DIV>
          <DIV><SPAN class=3D533011317-20092004><SPAN=20
          class=3D533011317-20092004><SPAN =
class=3D533011317-20092004><SPAN=20
          class=3D533011317-20092004><SPAN =
class=3D533011317-20092004><FONT=20
          face=3DArial color=3D#0000ff><SPAN=20
          =
class=3D017001420-20092004></SPAN></FONT></SPAN></SPAN></SPAN></SPAN></S=
PAN>&nbsp;</DIV>
          <DIV><SPAN class=3D533011317-20092004><SPAN=20
          class=3D533011317-20092004><SPAN =
class=3D533011317-20092004><SPAN=20
          class=3D533011317-20092004><SPAN =
class=3D533011317-20092004><FONT=20
          face=3DArial><SPAN class=3D017001420-20092004><FONT =
color=3D#0000ff>- if=20
          this XPath has produced&nbsp; an empty node-set, the =
assertion=20
          evaluates to=20
          =
"false"&nbsp;.</FONT></SPAN></FONT></SPAN></SPAN></SPAN></SPAN></SPAN></=
DIV>
          <DIV><SPAN class=3D533011317-20092004><SPAN=20
          class=3D533011317-20092004><SPAN =
class=3D533011317-20092004><SPAN=20
          class=3D533011317-20092004><SPAN =
class=3D533011317-20092004><FONT=20
          face=3DArial color=3D#0000ff><SPAN=20
          =
class=3D017001420-20092004></SPAN></FONT></SPAN></SPAN></SPAN></SPAN></S=
PAN>&nbsp;</DIV>
          <DIV><SPAN class=3D533011317-20092004><SPAN=20
          class=3D533011317-20092004><SPAN =
class=3D533011317-20092004><SPAN=20
          class=3D533011317-20092004><SPAN =
class=3D533011317-20092004><FONT=20
          face=3DArial><SPAN class=3D017001420-20092004><EM>[MIKE2] - I =
agree , if=20
          we are producing a node-set object as the result =
object.&nbsp; But I=20
          believe we are producing a boolean result object here =
(because of the=20
          predicate<STRONG> </STRONG></EM><STRONG>count()=3D0</STRONG> =
)&nbsp; If=20
          the predicate were simply count(), the result would be a =
number.&nbsp;=20
          If the predicate were simply [//eb:ErrorList], =
the&nbsp;&nbsp;result=20
          would be a node-set.&nbsp; So the semantic result of the =
query below=20
          would be a boolean one, with a result of "true" (if =
count()=3D0) or=20
          "false" (if count()!=3D0).&nbsp; And this would satisfy our=20
          TestAssertion without the need for any additional semantic =
paramters=20
          (such as=20
          =
empty=3D"true").</SPAN></FONT></SPAN></SPAN></SPAN></SPAN></SPAN></DIV>
          <DIV><SPAN class=3D533011317-20092004><SPAN=20
          class=3D533011317-20092004><SPAN =
class=3D533011317-20092004><SPAN=20
          class=3D533011317-20092004><SPAN =
class=3D533011317-20092004><FONT=20
          face=3DArial color=3D#0000ff><SPAN=20
          =
class=3D017001420-20092004></SPAN></FONT></SPAN></SPAN></SPAN></SPAN></S=
PAN>&nbsp;</DIV>
          <DIV><SPAN class=3D533011317-20092004><SPAN=20
          class=3D533011317-20092004><SPAN =
class=3D533011317-20092004><SPAN=20
          class=3D533011317-20092004><SPAN =
class=3D533011317-20092004><FONT=20
          face=3DArial color=3D#0000ff><SPAN =
class=3D017001420-20092004>So in the=20
          present case, at the time we evaluate teh XPath, we want a =
positive=20
          outcome (true) if either (1) no messages received, (2) =
messages=20
          received but with no ErrorList. But in case (2), the above =
XPath would=20
          not produce any node set... which means=20
          =
"false".</SPAN></FONT></SPAN></SPAN></SPAN></SPAN></SPAN></DIV>
          <DIV><SPAN class=3D533011317-20092004><SPAN=20
          class=3D533011317-20092004><SPAN =
class=3D533011317-20092004><SPAN=20
          class=3D533011317-20092004><SPAN =
class=3D533011317-20092004><FONT=20
          face=3DArial color=3D#0000ff><SPAN =
class=3D017001420-20092004>One simple way=20
          to deal with this corner case&nbsp;(emptyness of filter =
result) is=20
          &nbsp;to write something like:=20
          </SPAN></FONT></SPAN></SPAN></SPAN></SPAN></SPAN></DIV>
          <DIV><SPAN class=3D533011317-20092004><SPAN=20
          class=3D533011317-20092004><SPAN =
class=3D533011317-20092004><SPAN=20
          class=3D533011317-20092004><SPAN =
class=3D533011317-20092004><FONT=20
          face=3DArial><SPAN class=3D017001420-20092004><SPAN=20
          class=3D533011317-20092004><FONT face=3DArial><SPAN=20
          class=3D533011317-20092004><SPAN =
class=3D533011317-20092004><FONT=20
          face=3DArial><SPAN class=3D533011317-20092004><SPAN=20
          class=3D533011317-20092004><FONT =
face=3DArial>&lt;VerifyContent <FONT=20
          =
color=3D#ff0000><STRONG>empty=3D"true</STRONG></FONT>"&gt;/<STRONG>Filte=
rResult/Message[//eb:ErrrorList][count()=3D0]&lt;/</STRONG>VerifyContent=
&gt;</FONT></SPAN></SPAN></FONT></SPAN></SPAN></FONT></SPAN></SPAN></FON=
T></SPAN></SPAN></SPAN></SPAN></SPAN></DIV>
          <DIV><SPAN class=3D533011317-20092004><SPAN=20
          class=3D533011317-20092004><SPAN =
class=3D533011317-20092004><SPAN=20
          class=3D533011317-20092004><SPAN =
class=3D533011317-20092004><FONT=20
          face=3DArial><SPAN class=3D017001420-20092004><SPAN=20
          class=3D533011317-20092004><FONT face=3DArial><SPAN=20
          class=3D533011317-20092004><SPAN =
class=3D533011317-20092004><FONT=20
          face=3DArial color=3D#0000ff><SPAN =
class=3D533011317-20092004><SPAN=20
          class=3D533011317-20092004>what do you=20
          =
think?</SPAN></SPAN></FONT></SPAN></SPAN></FONT></SPAN></SPAN></FONT></S=
PAN></SPAN></SPAN></SPAN></SPAN></DIV>
          <DIV><SPAN class=3D533011317-20092004><FONT face=3DArial=20
          color=3D#0000ff><SPAN=20
          class=3D533011317-20092004></SPAN></FONT></SPAN>&nbsp;</DIV>
          <DIV><SPAN class=3D533011317-20092004><FONT =
face=3DArial><SPAN=20
          class=3D533011317-20092004><EM>[MIKE2] - I think that we need =
to verify=20
          the semantics of our expression before we determine if we =
need to=20
          introduce more operators into an already complex=20
          syntax.</EM></SPAN></FONT></SPAN></DIV>
          <DIV><SPAN class=3D533011317-20092004><FONT face=3DArial=20
          color=3D#0000ff><SPAN=20
          class=3D533011317-20092004></SPAN></FONT></SPAN>&nbsp;</DIV>
          <DIV><SPAN class=3D533011317-20092004><FONT face=3DArial=20
          color=3D#0000ff><SPAN=20
          class=3D533011317-20092004></SPAN></FONT></SPAN>&nbsp;</DIV>
          <DIV><SPAN class=3D533011317-20092004><FONT face=3DArial=20
          color=3D#0000ff><SPAN=20
          class=3D533011317-20092004>Jacques</SPAN></FONT></SPAN></DIV>
          <DIV><SPAN class=3D533011317-20092004><FONT face=3DArial=20
          color=3D#0000ff></FONT></SPAN>&nbsp;</DIV>
          <BLOCKQUOTE dir=3Dltr style=3D"MARGIN-RIGHT: 0px">
            <DIV class=3DOutlookMessageHeader dir=3Dltr =
align=3Dleft><FONT face=3DTahoma=20
            size=3D2>-----Original Message-----<BR><B>From:</B> Michael =
Kass=20
            [mailto:michael.kass@nist.gov]<BR><B>Sent:</B> Monday, =
September 20,=20
            2004 9:32 AM<BR><B>To:</B> Jacques =
Durand<BR><B>Subject:</B> Re: One=20
            point to clarify<BR><BR></FONT></DIV>
            <DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
            <BLOCKQUOTE dir=3Dltr=20
            style=3D"PADDING-RIGHT: 0px; PADDING-LEFT: 5px; =
MARGIN-LEFT: 5px; BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
              <DIV style=3D"FONT: 10pt arial">----- Original Message =
----- </DIV>
              <DIV=20
              style=3D"BACKGROUND: #e4e4e4; FONT: 10pt arial; =
font-color: black"><B>From:</B>=20
              <A title=3DJDurand@us.fujitsu.com=20
              href=3D"mailto:JDurand@us.fujitsu.com";>Jacques Durand</A> =
</DIV>
              <DIV style=3D"FONT: 10pt arial"><B>To:</B> <A=20
              title=3Dmichael.kass@nist.gov=20
              =
href=3D"mailto:'michael.kass@nist.gov'">'michael.kass@nist.gov'</A>=20
              </DIV>
              <DIV style=3D"FONT: 10pt arial"><B>Sent:</B> Friday, =
September 17,=20
              2004 10:03 PM</DIV>
              <DIV style=3D"FONT: 10pt arial"><B>Subject:</B> One point =
to=20
              clarify</DIV>
              <DIV><BR></DIV>
              <DIV><SPAN class=3D147485901-18092004><FONT face=3DArial=20
              color=3D#0000ff>Mike:</FONT></SPAN></DIV>
              <DIV><SPAN class=3D147485901-18092004><FONT face=3DArial=20
              color=3D#0000ff></FONT></SPAN>&nbsp;</DIV>
              <DIV><SPAN class=3D147485901-18092004><FONT face=3DArial=20
              color=3D#0000ff>One more point to clarify =
:</FONT></SPAN></DIV>
              <DIV><SPAN class=3D147485901-18092004><FONT size=3D2>
              <P>3) Do we need to define a "stepDurationFail" Test =
Driver=20
              parameter ? Agree we don't BUT:</P>
              <P>Now, shouldn't we have a more explicit way to test the =

              emptiness of a filter result (e.g. an explicit =
built-in</P>
              <P>boolean function like "emptyResult") ? We should, =
because=20
              regular TestAssertion conditions on the result messages =
</P>
              <P>will not have an intuitive meaning. They usually =
assume that=20
              there is at least one message in the result buffer.</P>
              <P>If this result set is empty, teh testAssertion outcome =
is=20
              unclear: e.g. verifying that no message filtered has </P>
              <P>a particular header element: =
"NOT(//mymessage/myelement)" what=20
              if the filter result is empty? is that a "true" or a =
"false"? </P>
              <P>So it seems we need a primitive to test this. (Of =
course, we=20
              could use "count()" to test the number of messages...</P>
              <P><SPAN class=3D147485901-18092004>but for convenience =
shouldn't we=20
              have something much shorter like above boolean=20
              built-in?</SPAN>)</P>
              <P>&nbsp;</P>
              <P><FONT face=3DArial>[MIKE] - I think the easiest way to =
code this=20
              is:</FONT></P>
              <P><FONT face=3DArial></FONT>&nbsp;</P>
              <P><FONT face=3DArial>&lt;GetMessage&gt;</FONT></P>
              <P><FONT=20
              =
face=3DArial>&lt;Filter&gt;/MessageStore/Message//ErrorList&lt;/Filter&g=
t;</FONT></P>
              <P><FONT face=3DArial>&lt;/GetMessage&gt;</FONT></P>
              <P><FONT face=3DArial>&lt;TestAssertion =
description=3D"Verify that no=20
              ErrorList element is present"&gt;</FONT></P>
              <P><FONT=20
              =
face=3DArial>&lt;VerifyContent&gt;/<STRONG>FilterResult/Message//ErrorLi=
st[count()=3D0]&lt;/</STRONG>VerifyContent&gt;</FONT></P>
              <P><FONT face=3DArial>&lt;/TestAssertion&gt;</FONT></P>
              <P><FONT face=3DArial></FONT>&nbsp;</P>
              <P><FONT face=3DArial>Using your StepDurationFail=20
              parameter:</FONT></P>
              <P><FONT face=3DArial></FONT>&nbsp;</P>
              <P><FONT face=3DArial>&lt;GetMessage&gt;</FONT></P>
              <P><FONT=20
              =
face=3DArial>&lt;Filter&gt;/MessageStore/Message//ErrorList&lt;/Filter&g=
t;</FONT></P>
              <P><FONT face=3DArial>&lt;/GetMessage&gt;</FONT></P>
              <P><FONT face=3DArial>&lt;TestAssertion =
description=3D"Verify that no=20
              ErrorList element is present using the StepDurationFail=20
              parameter"&gt;</FONT></P>
              <P><FONT face=3DArial>&lt;VerifyParameter&gt;</FONT></P>
              <P><FONT=20
              =
face=3DArial>&lt;Name&gt;<STRONG>StepDurationFail</STRONG>&lt;/Name&gt;<=
/FONT></P>
              <P><FONT=20
              =
face=3DArial>&lt;Value&gt;<STRONG>true</STRONG>&lt;/Value&gt;</FONT></P>=

              <P><FONT face=3DArial>&lt;/VerifyParameter&gt;</FONT></P>
              <P><FONT face=3DArial>&lt;/TestAssertion&gt;</FONT></P>
              <P><FONT face=3DArial></FONT>&nbsp;</P>
              <P><FONT face=3DArial>I'll put it in the spec for with =
documentatio=20
              for the &lt;Filter&gt; element.</FONT></P>
              <P><FONT face=3DArial></FONT>&nbsp;</P>
              <P><FONT face=3DArial></FONT>&nbsp;</P>
              <P>
              <P><FONT face=3DArial></FONT></P><FONT =
face=3DArial></FONT>
              <P></P>
              <P><FONT face=3DArial color=3D#0000ff =
size=3D3></FONT>&nbsp;</P>
              <P><SPAN class=3D147485901-18092004><FONT face=3DArial =
color=3D#0000ff=20
              size=3D3>Also, could you post the OpenOffice draft on our =
site? (Or=20
              its PDF conversion?</FONT></SPAN></P>
              <P><SPAN class=3D147485901-18092004><FONT face=3DArial =
color=3D#0000ff=20
              size=3D3>it is very easy to export a PDF from OpenOffice=20
              )</FONT></SPAN></P>
              <P><SPAN class=3D147485901-18092004><FONT face=3DArial =
color=3D#0000ff=20
              size=3D3></FONT></SPAN>&nbsp;</P>
              <P><SPAN class=3D147485901-18092004><FONT =
face=3DArial>[MIKE] - I just=20
              posted it ( tracking is turned on).&nbsp; I added the 3 =
use cases,=20
              plus their normative representations in the=20
              Appendix.</FONT></SPAN></P>
              <P><SPAN class=3D147485901-18092004><FONT =
face=3DArial>Also, many=20
              small changes as we implemented here.&nbsp;&nbsp;&nbsp; =
I'll post=20
              my response to the ETSI comments =
shortly.</FONT></SPAN></P>
              <P><SPAN class=3D147485901-18092004><FONT face=3DArial =
color=3D#0000ff=20
              size=3D3></FONT></SPAN>&nbsp;</P>
              <P><SPAN class=3D147485901-18092004><FONT face=3DArial =
color=3D#0000ff=20
              size=3D3></FONT></SPAN>&nbsp;</P>
              <P><SPAN class=3D147485901-18092004><FONT face=3DArial =
color=3D#0000ff=20
              size=3D3>Thanks,</FONT></SPAN></P>
              <P><FONT face=3DArial color=3D#0000ff size=3D3><SPAN=20
              class=3D147485901-18092004>Jacques</SPAN></FONT></P>
              <P></FONT></SPAN><![if =
!supportEmptyParas]><![endif]><![if !supportEmptyParas]><![endif]><![if =
!supportEmptyParas]><![endif]><![if !supportEmptyParas]><![endif]><![if =
!supportEmptyParas]><![endif]><![if !supportEmptyParas]><![endif]><![if =
!supportEmptyParas]><![endif]><![if !supportEmptyParas]><![endif]><![if =
!supportEmptyParas]><![endif]><![if !supportEmptyParas]><![endif]><![if =
!supportEmptyParas]><![endif]><![if !supportEmptyParas]><![endif]><![if =
!supportEmptyParas]><![endif]><![if !supportEmptyParas]><![endif]><![if =
!supportEmptyParas]><![endif]><![if !supportEmptyParas]><![endif]><![if =
!supportEmptyParas]><![endif]><![if !supportEmptyParas]><![endif]><![if =
!supportEmptyParas]><![endif]><![if !supportEmptyParas]><![endif]><![if =
!supportEmptyParas]><![endif]><![if !supportEmptyParas]><![endif]><![if =
!supportEmptyParas]><![endif]><FONT=20
              face=3D"Courier New" color=3Dblack size=3D1><SPAN=20
              style=3D"FONT-SIZE: 8pt; COLOR: black; FONT-FAMILY: =
'Courier New'; mso-bidi-font-size: 10.0pt"></SPAN></FONT><SPAN=20
              class=3DEmailStyle15><FONT face=3DArial color=3Dblack =
size=3D2><SPAN=20
              style=3D"FONT-SIZE: 10pt; FONT-FAMILY: Arial; =
mso-bidi-font-size: =
12.0pt"><o:p></o:p></SPAN></FONT></SPAN>&nbsp;</P></DIV></BLOCKQUOTE></B=
LOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUO=
TE></BODY></HTML>

------_=_NextPart_001_01C4A29A.A0324990--


[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]