[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]
Subject: 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-instance/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[@name='MonetaryTotalType']/xsd:sequence[1]/xsd:element[1]/xsd:annotation[1]/xsd:documentation[1]/ccts:Component[1]/ccts:Definition[1]</refSourceItem> > </normativeSource> > <target>$ubl-invoice-2-0-instance/Invoice/cac:LegalMonetaryTotal[1]/cbc: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:LineExtensionAmount)</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:TaxAmount[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:TaxSubtotal/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:schema/xsd:complexType[64]/xsd:sequence[1]/xsd:element[1]/xsd:annotation[1]/xsd:documentation[1]/ccts:Component[1]/ccts:Definition[1]</refSourceItem></normativeSource> >> <target>/default:Invoice/cac:LegalMonetaryTotal[1]/cbc:LineExtensionAmount[1]</target> >> <prerequisite>/default:Invoice/cac:InvoiceLine[1]/cbc:LineExtensionAmount[1]</prerequisite> >> <predicate>sum(/default:Invoice/cac:InvoiceLine/cbc:LineExtensionAmount)</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:complexType[64]/xsd:sequence[1]/xsd:element[1]/xsd:annotation[1]/xsd:documentation[1]/ccts:Component[1]/ccts:Definition[1]</refSourceItem> >> </normativeSource> >> <target>fn:doc($ubl-invoice-2-0-instance)/default:Invoice/cac:LegalMonetaryTotal[1]/cbc:LineExtensionAmount[1]</target> >> <prerequisite>fn:doc($ubl-invoice-2-0-instance)/default:Invoice/cac:InvoiceLine[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 >> >
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]