[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> </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> </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 if the content is what is expected.</FONT></SPAN></DIV> <DIV><SPAN class=3D097144600-25092004><FONT face=3DArial=20 color=3D#0000ff></FONT></SPAN> </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> </DIV> <DIV><SPAN class=3D097144600-25092004><FONT face=3DArial=20 color=3D#0000ff></FONT></SPAN> </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> </DIV> <DIV><FONT face=3DArial size=3D2> I'm posting this to the list = as you=20 suggested. My comments are [MIKE2]</FONT></DIV> <DIV><FONT face=3DArial size=3D2></FONT> </DIV> <DIV><FONT face=3DArial size=3D2>Mike</FONT></DIV> <DIV><FONT face=3DArial size=3D2></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=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> </DIV> <DIV><FONT face=3DArial size=3D2> 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> </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><VerifyContent>/<STRONG>FilterResult/Message//ErrorLi= st[count()=3D0]</</STRONG>VerifyContent></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><VerifyContent>/<STRONG>FilterResult/Message[count()!= =3D0]//ErrorList[count()=3D0]</</STRONG>VerifyContent></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> </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]. 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><BR><SPAN = class=3D017001420-20092004><FONT=20 color=3D#ff0000>[Jacques Durand] actually my query path = didn't make=20 sense...(the count()!=3D0 is superfluous) 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> </DIV> <DIV><SPAN class=3D533011317-20092004><FONT face=3DArial=20 color=3D#0000ff><SPAN=20 class=3D533011317-20092004></SPAN></FONT></SPAN> </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><VerifyContent>/<STRONG>FilterResult/Message[//eb:Err= rorList][count()=3D0]</</STRONG>VerifyContent></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> </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 = a boolean=20 "true/false" result . 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). =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] 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> </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 result Not = all XPath=20 queries produce a node-set. Some XPath expressions = produce a=20 number, or a string, or a boolean objectas their = result. I=20 believe a non-empty string results in a "true" result. = A boolean=20 object result of "true" creates a final XPath query result of = "true". A number returns true if "it is neither a = positive=20 nor negative ZERO or a NAN" . (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.) 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> </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 an empty node-set, the = assertion=20 evaluates to=20 = "false" .</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> </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. But I=20 believe we are producing a boolean result object here = (because of the=20 predicate<STRONG> </STRONG></EM><STRONG>count()=3D0</STRONG> = ) If=20 the predicate were simply count(), the result would be a = number. =20 If the predicate were simply [//eb:ErrorList], = the result=20 would be a node-set. 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). 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> </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 (emptyness of filter = result) is=20 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><VerifyContent <FONT=20 = color=3D#ff0000><STRONG>empty=3D"true</STRONG></FONT>">/<STRONG>Filte= rResult/Message[//eb:ErrrorList][count()=3D0]</</STRONG>VerifyContent= ></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> </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> </DIV> <DIV><SPAN class=3D533011317-20092004><FONT face=3DArial=20 color=3D#0000ff><SPAN=20 class=3D533011317-20092004></SPAN></FONT></SPAN> </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> </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> </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> </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> </P> <P><FONT face=3DArial>[MIKE] - I think the easiest way to = code this=20 is:</FONT></P> <P><FONT face=3DArial></FONT> </P> <P><FONT face=3DArial><GetMessage></FONT></P> <P><FONT=20 = face=3DArial><Filter>/MessageStore/Message//ErrorList</Filter&g= t;</FONT></P> <P><FONT face=3DArial></GetMessage></FONT></P> <P><FONT face=3DArial><TestAssertion = description=3D"Verify that no=20 ErrorList element is present"></FONT></P> <P><FONT=20 = face=3DArial><VerifyContent>/<STRONG>FilterResult/Message//ErrorLi= st[count()=3D0]</</STRONG>VerifyContent></FONT></P> <P><FONT face=3DArial></TestAssertion></FONT></P> <P><FONT face=3DArial></FONT> </P> <P><FONT face=3DArial>Using your StepDurationFail=20 parameter:</FONT></P> <P><FONT face=3DArial></FONT> </P> <P><FONT face=3DArial><GetMessage></FONT></P> <P><FONT=20 = face=3DArial><Filter>/MessageStore/Message//ErrorList</Filter&g= t;</FONT></P> <P><FONT face=3DArial></GetMessage></FONT></P> <P><FONT face=3DArial><TestAssertion = description=3D"Verify that no=20 ErrorList element is present using the StepDurationFail=20 parameter"></FONT></P> <P><FONT face=3DArial><VerifyParameter></FONT></P> <P><FONT=20 = face=3DArial><Name><STRONG>StepDurationFail</STRONG></Name><= /FONT></P> <P><FONT=20 = face=3DArial><Value><STRONG>true</STRONG></Value></FONT></P>= <P><FONT face=3DArial></VerifyParameter></FONT></P> <P><FONT face=3DArial></TestAssertion></FONT></P> <P><FONT face=3DArial></FONT> </P> <P><FONT face=3DArial>I'll put it in the spec for with = documentatio=20 for the <Filter> element.</FONT></P> <P><FONT face=3DArial></FONT> </P> <P><FONT face=3DArial></FONT> </P> <P> <P><FONT face=3DArial></FONT></P><FONT = face=3DArial></FONT> <P></P> <P><FONT face=3DArial color=3D#0000ff = size=3D3></FONT> </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> </P> <P><SPAN class=3D147485901-18092004><FONT = face=3DArial>[MIKE] - I just=20 posted it ( tracking is turned on). 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. = 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> </P> <P><SPAN class=3D147485901-18092004><FONT face=3DArial = color=3D#0000ff=20 size=3D3></FONT></SPAN> </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> </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]