- From: Jeni Tennison <jeni@jenitennison.com>
- Date: Fri, 4 Jan 2002 11:59:46 +0000
- To: Niko Suave <niko@alum.mit.edu>
- CC: xmlschema-dev@w3.org
Hi Niko, > On an element, however, it's less clear to me. The valid values of > block are "substitution", "restriction", and "extension." Obviously, > "substitution" prevents substitution groups from operating on this > element. I assume you can use this either on the actual def'n of the > global element, or on a particular instance where it is referenced. > > If the element's block specifies "restriction" or "extension," then > I would guess that this is equivalent to the type specifying the > same block value except that it only applies to this instance of the > type. Yes: - 'substitution' prevents users from substituting members of the substitution group of the element for the element itself in the instance document. - 'restriction' and 'extension' prevents users from using xsi:type on instances of the element to change the type of the element in the instance document. > Okay, now we come to an element specifying "final". The only valid > values for this are "substitution" and "restriction" --- but I have > no idea what this means. You can't derive from an element as far as > I know, only from a type, so I'm confused what final might be > restricting. The valid values are "extension" and "restriction" (where did you get "substitution" from? the Rec should be corrected if you found it there). This is about what elements you can declare to be members of the substitution group of which the element is the head. Without any 'final', if you have: <xs:element name="foo" type="xs:decimal" /> then you can happily have: <xs:element name="bar" type="xs:integer" substitutionGroup="foo" /> This means that whenever the foo element occurs in a model group, you can substitute in the bar element instead (the bar element is a member of the foo element's substitution group; the foo element is the head element of the substitution group). In a substitution group, the types of the member elements must be derived from the type of the head element. If you did: <xs:element name="foo" type="xs:decimal" final="restriction" /> then the above declaration for the bar element would be invalid because the final of 'restriction' prevents you from having members of the substitution group whose type is derived by restriction from the type of the head element. Similarly, if you had a final of 'extension' then you couldn't declare elements to be part of the substitution group if their types were extensions of the type of the head element. I hope that clarifies things for you. Cheers, Jeni --- Jeni Tennison http://www.jenitennison.com/
Received on Friday, 4 January 2002 06:59:49 UTC