W3C home > Mailing lists > Public > xmlschema-dev@w3.org > December 2010

Re: trouble with content models

From: Pete Cordell <petexmldev@codalogic.com>
Date: Wed, 15 Dec 2010 09:19:03 -0000
Message-ID: <8ED4725336E246FCBFF5EB71D2DCE3D8@Codalogic>
To: "Andy Davidson" <andy_davidson@apple.com>, <xmlschema-dev@w3.org>
Hi Andy,

Would something like the following work?

<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>

<complexType name="POSTransactionLineItemDiscount">
  <sequence>
       <choice>
        <sequence>
       <group ref="pos:POSTransactionLineItemDiscountByAmount" />
       <group ref="pos:POSTransactionLineItemDiscountByPercent" 
minOccurs="0" />
        </sequence>
       <group ref="pos:POSTransactionLineItemDiscountByPercent" />
       </choice>
 </sequence>
</complexType>

i.e. ((a & b?) | b)

Also, do you mean your group members such as discountAmount to have 
minOccurs="0"?  I think this defeats your wanting to have your & condition 
as POSTransactionLineItemDiscountByAmount & 
POSTransactionLineItemDiscountByPercent may be present but 
POSTransactionLineItemDiscountByPercent could be empty.

HTH,

Pete Cordell
Codalogic Ltd
Interface XML to C++ the easy way using C++ XML
data binding to convert XSD schemas to C++ classes.
Visit http://codalogic.com/lmx/ or http://www.xml2cpp.com
for more info
----- Original Message ----- 
From: "Andy Davidson" <andy_davidson@apple.com>
To: <xmlschema-dev@w3.org>
Sent: Wednesday, December 15, 2010 3:43 AM
Subject: trouble with content models


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
Received on Wednesday, 15 December 2010 09:19:41 UTC

This archive was generated by hypermail 2.3.1 : Wednesday, 7 January 2015 14:56:18 UTC