- From: Mukul Gandhi <gandhi.mukul@gmail.com>
- Date: Wed, 15 Dec 2010 16:48:56 +0530
- To: Andy Davidson <andy_davidson@apple.com>
- Cc: xmlschema-dev@w3.org
It seems XML Schema 1.1 assertions can make few of the schema design
tasks simpler for such a scenario.
Following is a sample schema written using this idiom:
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://po-trans" xmlns:po="http://po-trans"
elementFormDefault="qualified">
<element name="PO_TRANS" type="po:POSTransactionLineItemDiscount" />
<complexType name="POSTransactionLineItemDiscount">
<sequence>
<element name="discountAmount" type="decimal" minOccurs="0"/>
<element name="discountAmountReasonCode" type="string"
minOccurs="0"/>
<element name="discountPercentage" type="decimal" minOccurs="0"/>
<element name="discountPercentageReasonCode" type="string"
minOccurs="0"/>
</sequence>
<assert test="(discountAmount, discountAmountReasonCode) or
(discountPercentage, discountPercentageReasonCode)
or (discountAmount,
discountAmountReasonCode, discountPercentage,
discountPercentageReasonCode)"
xpathDefaultNamespace="##targetNamespace" />
</complexType>
</schema>
This would require an XML instance document like following:
<PO_TRANS xmlns="http://po-trans">
<discountAmount>11</discountAmount>
<discountAmountReasonCode>xx</discountAmountReasonCode>
</PO_TRANS>
On Wed, Dec 15, 2010 at 9:13 AM, Andy Davidson <andy_davidson@apple.com> wrote:
> Hi
> its been a while since I worked with XML Schema. I am not sure I am posting
> to the correct group. I want to define a content model (a | b | (a &b))
> Any idea how I can do this?
> I have tried various version of the following I keep getting the following
> validation error from Eclipse on my POSTransactionLineItemDiscount type
> cos-nonambig: discountAmount and discountAmount (or elements from their
> substitution group) violate "Unique Particle Attribution". During validation
> against this schema, ambiguity would be created for those two particles.
> <group name="POSTransactionLineItemDiscountByAmount"
> id="POSTransactionLineItemDiscountByAmount">
> <sequence>
> <element name="discountAmount" type="decimal" minOccurs="0"/>
> <element name="discountAmountReasonCode" type="string" minOccurs="0"/>
> </sequence>
> </group>
> <group name="POSTransactionLineItemDiscountByPercent">
> <sequence>
> <element name="discountPercentage" type="decimal" minOccurs="0"/>
> <element name="discountPercentageReasonCode" type="string"
> minOccurs="0"/>
> </sequence>
> </group>
> <group name="POSTransactionLineItemDiscountByAmountAndPercent">
> <sequence>
> <element name="discountAmount" type="decimal" minOccurs="0"/>
> <element name="discountAmountReasonCode" type="string"
> minOccurs="0"/>
> <element name="discountPercentage" type="decimal" minOccurs="0"/>
> <element name="discountPercentageReasonCode" type="string"
> minOccurs="0"/>
> </sequence>
> </group>
> <complexType name="POSTransactionLineItemDiscount">
> <sequence>
> <choice>
> <group ref="pos:POSTransactionLineItemDiscountByAmountAndPercent" />
> <group ref="pos:POSTransactionLineItemDiscountByAmount" />
> <group ref="pos:POSTransactionLineItemDiscountByPercent" />
> </choice>
> </sequence>
> </complexType>
> I guess I could define a complex base type, and have three extensions to
> cover the 3 possible content valid content models. How ever this would
> require me to rework some legacy java applications
> thanks
> Andy
--
Regards,
Mukul Gandhi
Received on Wednesday, 15 December 2010 11:19:44 UTC