- From: Michael Shapiro <michael@creativescience.com>
- Date: Sat, 16 Jun 2001 15:40:40 -0700
- To: <xmlschema-dev@w3.org>
I'm trying to interpret the rules in 3.9.6 and have some problems with Occurrence Range OK (http://www.w3.org/TR/xmlschema-1/#range-ok ) rules. Here is the example. ... <complexType name="B"> <sequence> <!-- S1B --> <element name="annotation" minOccurs="0" type="string"/> <sequence minOccurs="2" maxOccurs="3"> <!-- S2B --> <element name="e0" minOccurs="0" type="string"/> <element name="e1" minOccurs="2" maxOccurs="3" type="string"/> </sequence> </sequence> </complexType> Couple examples of valid XML fragments for type B: <annotation>First fragment</annotation> <e0>e0(B) First occurrence of the Sequence</e0> <e1>e1(B) #1-1</e1><e1>e1(B) #1-2</e1> <e0>e0(B) Second occurrence of the Sequence</e0> <e1>e1(B) #2-1</e1><e1>e1(B) #2-2</e1> ... <!-- Second fragment --> <e1>e1(B) #1-1</e1><e1>e1(B) #1-2</e1><e1>e1(B) #1-3</e1> <e1>e1(B) #2-1</e1><e1>e1(B) #2-2</e1><e1>e1(B) #2-3</e1> <e1>e1(B) #3-1</e1><e1>e1(B) #3-2</e1><e1>e1(B) #3-3</e1> Both XML fragments are obviously valid against <complexType name="B">. Looking at the second fragment one can utilize the restricted complexType: <complexType name="R"> <complexContent> <restriction base="B"> <sequence><!-- S1R --> <element name="e1" minOccurs="4" maxOccurs="9"/> </sequence> </restriction> </complexContent> </complexType> ... So far it's all pretty trivial. Now let's try to apply the rules from 3.9.6 literally: 1. Checking S1R against S1B using "All:All,Sequence:Sequence -- Recurs" rule (see http://www.w3.org/TR/xmlschema-1/#rcase-Recurse): 1. Checking if S1R occurrence range is a valid restriction of S1B occurrence range using http://www.w3.org/TR/xmlschema-1/#range-ok: 1. minOccurs(S1R) >= minOccurs(S1B)? (1 >= 1) == true: OK 2. maxOccurs(S1R) <= maxOccurs(S1B)? (1 <= 1) == true: OK 2. Functional mapping. There are two particles in S1B: annotation and S2B 1. Checking if e1(R) is a valid restriction of annotation(B) using "Elt:Elt -- NameAndTypeOK" rule (see http://www.w3.org/TR/xmlschema-1/#rcase-NameAndTypeOK ): 1. The declaration's {name}s are the same: NO 2. Checking if e1(R) is a valid restriction of S2B using "Elt:All/Choice/Sequence -- RecurseAsIfGroup" (see http://www.w3.org/TR/xmlschema-1/#rcase-RecurseAsIfGroup): 1. Creating a new S2R from <element name="e1" minOccurs="4" maxOccurs="9"/>: <sequence><element name="e1" minOccurs="4" maxOccurs="9"/></sequence> 2. Checking newly created S2R against S2B using "All:All,Sequence:Sequence -- Recurs". 1. Checking if S2R occurrence range is a valid restriction of S2B occurrence range 1. minOccurs(S2R) >= minOccurs(S2B)? (1 >= 2) == false: BAD RESTRICTION OOPS... I could continue on but every time I'll get BAD RESTRICTION trying to apply "Occurrence Range OK" rules literally. Should I check not the "Occurrence Range OK" but "Effective Total Range OK" (http://www.w3.org/TR/xmlschema-1/#cos-seq-range )? (minETR(S2R) >= minETR(S2B)? (1*4 >= 2*2) == true: OK.) Or my interpretation of "Occurrence Range OK" is wrong. Even if I'll use Effective Total Range OK it's not defined for elements. Therefore, the check for [Elt:Elt -- NameAndTypeOK-3: R's occurrence range is a valid restriction of B's occurrence range as defined by Occurrence Range OK] will fail after few more steps (see http://www.w3.org/TR/xmlschema-1/#rcase-NameAndTypeOK ). Thanks in advance for any suggestion, Michael
Received on Saturday, 16 June 2001 18:51:04 UTC