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

 


Help: OASIS Mailing Lists Help | MarkMail Help

tag message

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


Subject: RE: [tag] Re: Example of a potentially executable (XPath 2) Test Assertion for OASIS UBL XML Invoice



Stephen:

It is probably better to separate the doc(...) function call from the rest of the Xpath.
When all this is compiled into an XSLT script, we can put it back together using variables.
So if not the Xpath processor, at least the XSLT processor will be able to handle this.
See the following sample that I used time ago:

<xsl:template match="/equiprogram/reportpair" priority="1">
...

<xsl:variable name="repfileB" select="( here, an Xpath that returns the URL of a document. The URL comes from an element inside the matched "/equiprogram/reportpair" element (from input to this XSLT).)"/>
...
<xsl:variable name="reportBdoc" select="document($repfileB)"/> 
<!-- access dynamically the report file B document -->
...
<xsl:for-each select="$reportBdoc/wsi-report:report/wsi-report:artifact/wsi-report:entry[@referenceID=$entryAid]/wsi-report:assertionResult[@id=$arAid]">
...
<!-- iterate on some elements inside the report file B document -->
... 
</xsl:for-each>


Jacques

-----Original Message-----
From: stephengreenubl@gmail.com [mailto:stephengreenubl@gmail.com] On Behalf Of Stephen Green
Sent: Thursday, June 25, 2009 3:16 PM
To: TAG TC
Subject: [tag] Re: Example of a potentially executable (XPath 2) Test Assertion for OASIS UBL XML Invoice

One more thing I'd especially note though is that I'm aware I'm being a bit too ambitious using the XPath 'doc()' function - trying to use it with a URL for an online document. Even when I remember to enclose the URL in quotes, it seems a typical XPath processor isn't obliged to actually go off and get the document from the Internet. I realise this is a bit out of scope though in that it is really related to an XPath binding rather than TAs per se. It will probably be a matter of facilitating the collating of metadata and other data the test suite will rely on if the TA is going to be executable as a TA. A proof of concept, if you will, for the executability use case - not part of TA modelling or markup design perhaps.

Stephen D Green



2009/6/25 Stephen Green <stephen.green@documentengineeringservices.com>:
> A bit more progress, comments welcome. I've been learning quite a bit 
> from this work which I could provide as feedback.
>
> These TAs express some rules about invoice amounts for OASIS UBL 2.0 
> which I'll send to the UBL-Dev list (then, when more complete, to UBL 
> TC as part of work for the Human Interface SC).
>
> I note the mix of both potentially executable TAs and prose TAs since 
> not all TAs seem feasible for execution. The issue will be how to 
> cater for both in an execution engine. Clearly the latter will need a 
> facility to pass in values as parameters.
>
> Also there is the need to distinguish a prerequisite which is just 
> refering to another TA (or, indeed, perhaps a TA Set) from a pure 
> XPath prerequisite expression or a variable in the prerequisite.
>
> <?xml version="1.0" encoding="UTF-8"?> <testAssertionSet 
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>    xsi:noNamespaceSchemaLocation="testAssertion-0-4.xsd"
> id="des:sdg:ubl:2:ta:prototype:0-0-1" lg="xpath20">
>    <header>
>        <var 
> name="ubl-invoice-2-0-schema">fn:doc(http://docs.oasis-open.org/ubl/os
> -UBL-2.0/xsd/common/UBL-CommonAggregateComponents-2.0.xsd)</var>
>        <var name="ubl-invoice-2-0-instance">fn:doc(.)</var>
>        <var 
> name="count-tax-currency">count(distinct-values($ubl-invoice-2-0-insta
> nce/Invoice/cac:InvoiceLine/cac:TaxTotal/cac:TaxSubtotal/cbc:TaxAmount
> /@currencyID))</var>
>        <tag name="invoice"/>
>    </header>
>    <testAssertion id="INVTOT001">
>        <normativeSource>
>            
> <refSourceItem>$ubl-invoice-2-0-schema/xsd:schema/xsd:complexType[@nam
> e='MonetaryTotalType']/xsd:sequence[1]/xsd:element[1]/xsd:annotation[1
> ]/xsd:documentation[1]/ccts:Component[1]/ccts:Definition[1]</refSource
> Item>
>        </normativeSource>
>        
> <target>$ubl-invoice-2-0-instance/Invoice/cac:LegalMonetaryTotal[1]/cb
> c:LineExtensionAmount[1]</target>
>        
> <prerequisite>$ubl-invoice-2-0-instance/Invoice/cac:InvoiceLine[1]/cbc
> :LineExtensionAmount[1]</prerequisite>
>        
> <predicate>sum($ubl-invoice-2-0-instance/Invoice/cac:InvoiceLine/cbc:L
> ineExtensionAmount)</predicate>
>        <prescriptionLevel>preferred</prescriptionLevel>
>        <tag name="invoice:total"/>
>    </testAssertion>
>    <testAssertion id="TAXINV001">
>        <normativeSource></normativeSource>
>        <target>$ubl-invoice-2-0-instance</target>
>        <prerequisite>is-tax-invoice-001 = 'pass'</prerequisite>
>        <predicate></predicate>
>        <prescriptionLevel>mandatory</prescriptionLevel>
>        <tag name="invoice:tax"/>
>    </testAssertion>
>    <testAssertion id="TAXINV002">
>        <normativeSource><comment>general practice but no known 
> normative source</comment></normativeSource>
>        <target>$count-tax-currency</target>
>        <prerequisite>$count-tax-currency gt 0</prerequisite>
>        <predicate>lt 2</predicate>
>        <prescriptionLevel>mandatory</prescriptionLevel>
>        <tag name="invoice:tax"/>
>    </testAssertion>
>    <testAssertion id="INVTAX003">
>        <normativeSource>
>            <refSourceItem></refSourceItem>
>        </normativeSource>
>        
> <target>sum($ubl-invoice-2-0-instance/Invoice/cac:TaxTotal/cbc:TaxAmou
> nt[1])</target>
>        <prerequisite>is-tax-invoice-001 = 'pass' and TAXINV001 = 
> 'pass' and TAXINV002 = 'pass'</prerequisite>
>        
> <predicate>sum($ubl-invoice-2-0-instance/Invoice/cac:TaxTotal/cac:TaxS
> ubtotal/cbc:TaxAmount[1])</predicate>
>        <prescriptionLevel>preferred</prescriptionLevel>
>        <tag name="invoice:tax"/>
>    </testAssertion>
>    <testAssertionSet id="is-tax-invoice-001" 
> definesNormativeProperty="true">
>        <header>
>            <normativePropertyTag>TaxInvoice</normativePropertyTag>
>        </header>
>        <testAssertion id="TAXINV001">
>            <normativeSource><comment>general practice but no known 
> normative source</comment></normativeSource>
>            
> <predicate>exists(ubl-invoice-2-0-instance//cbc:TaxAmount)</predicate>
>            <prescriptionLevel>mandatory</prescriptionLevel>
>            <tag name="invoice:tax"/>
>        </testAssertion>
>    </testAssertionSet>
>    <testAssertionSet id="is-tax-invoice-002"
> definesNormativeProperty="true" lg="en-us">
>        <header>
>            <normativePropertyTag>TaxInvoice</normativePropertyTag>
>        </header>
>        <testAssertion id="TAXINV002">
>            <normativeSource><comment>is a tax invoice according to 
> most relevant tax rules</comment></normativeSource>
>            <predicate>is a tax invoice</predicate>
>            <prescriptionLevel>mandatory</prescriptionLevel>
>            <tag name="invoice:tax"/>
>        </testAssertion>
>    </testAssertionSet>
> </testAssertionSet>
>
>
>
> Stephen D Green
>
>
>
> 2009/6/24 Stephen Green <stephen.green@documentengineeringservices.com>:
>> Greetings
>>
>> Having fun with the markup. Here's an example I just sent to the 
>> UBL-Dev mail list for a potentially executable xpath2-bound test 
>> assertion for one of the calculation rules for a UBL 2.0 Invoice. 
>> Looks very usable. Could see good take-up. Now starting to fully 
>> appreciate the TA progress. Thanks All. (Kind of feels like a eureka 
>> moment.)
>>
>> <?xml version="1.0" encoding="UTF-8"?> <testAssertionSet 
>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>>  
>> xsi:noNamespaceSchemaLocation="TestAssertionMarkup-0-4/testAssertion-
>> 0-4.xsd">
>>   <testAssertion id="ta-example-001">
>>       <var 
>> name="ubl-invoice-2-0-schema">http://docs.oasis-open.org/ubl/os-UBL-2
>> .0/xsd/common/UBL-CommonAggregateComponents-2.0.xsd</var>
>>       
>> <normativeSource><refSourceItem>fn:doc($ubl-invoice-2-0-schema)/xsd:s
>> chema/xsd:complexType[64]/xsd:sequence[1]/xsd:element[1]/xsd:annotati
>> on[1]/xsd:documentation[1]/ccts:Component[1]/ccts:Definition[1]</refS
>> ourceItem></normativeSource>
>>       
>> <target>/default:Invoice/cac:LegalMonetaryTotal[1]/cbc:LineExtensionA
>> mount[1]</target>
>>       
>> <prerequisite>/default:Invoice/cac:InvoiceLine[1]/cbc:LineExtensionAm
>> ount[1]</prerequisite>
>>       
>> <predicate>sum(/default:Invoice/cac:InvoiceLine/cbc:LineExtensionAmou
>> nt)</predicate>
>>       <prescriptionLevel>mandatory</prescriptionLevel>
>>   </testAssertion>
>>  <!--   <testAssertion id="ta-example-001">
>>     <var 
>> name="ubl-invoice-2-0-schema">http://docs.oasis-open.org/ubl/os-UBL-2
>> .0/xsd/common/UBL-CommonAggregateComponents-2.0.xsd</var>
>>     <var name="ubl-invoice-2-0-instance">.</var>
>>     <normativeSource>
>>       
>> <refSourceItem>fn:doc($ubl-invoice-2-0-schema)/xsd:schema/xsd:complex
>> Type[64]/xsd:sequence[1]/xsd:element[1]/xsd:annotation[1]/xsd:documen
>> tation[1]/ccts:Component[1]/ccts:Definition[1]</refSourceItem>
>>     </normativeSource>
>>     
>> <target>fn:doc($ubl-invoice-2-0-instance)/default:Invoice/cac:LegalMo
>> netaryTotal[1]/cbc:LineExtensionAmount[1]</target>
>>     
>> <prerequisite>fn:doc($ubl-invoice-2-0-instance)/default:Invoice/cac:I
>> nvoiceLine[1]/cbc:LineExtensionAmount[1]</prerequisite>
>>     
>> <predicate>sum(fn:doc($ubl-invoice-2-0-instance)/default:Invoice/cac:
>> InvoiceLine/cbc:LineExtensionAmount)</predicate>
>>     <prescriptionLevel>preferred</prescriptionLevel>
>>   </testAssertion> -->
>> </testAssertionSet>
>>
>>
>> Best regards, Steve
>>
>> Stephen D Green
>> Document Engineering Services Ltd
>>
>

---------------------------------------------------------------------
To unsubscribe from this mail list, you must leave the OASIS TC that generates this mail.  Follow this link to all your TCs in OASIS at:
https://www.oasis-open.org/apps/org/workgroup/portal/my_workgroups.php 



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