- From: Jeni Tennison <jeni@jenitennison.com>
- Date: Thu, 4 Jul 2002 11:03:27 +0100
- To: xmlschema-dev@w3.org, Tom Moog <tmoog@sarvega.com>
Hi Tom, > Suppose a type t is based on a restriction of anyType (see below). > Although anyType has mixedContent true, this is not inherited, so > type t does not allow mixed content. > > Now consider the following instance document with element e of type > t. There is a newline and several spaces between <e> and </e>. Is > this legal because it is ignorable white space or illegal because it > is not ignorable white space ? Interesting question :) First, we have to work out the content type of the type t. The content type of a complex type with complex content (like this one) is decided by the following: 1 If the <restriction> alternative is chosen, then the appropriate case among the following: 1.1 If one of the following is true 1.1.1 There is no <group>, <all>, <choice> or <sequence> among the [children]; ... , then empty; ... So the content type of the type t is 'empty'. Then, looking lower down at the validation of elements against complex types, we find the following: For an element information item to be locally ·valid· with respect to a complex type definition all of the following must be true: ... 2.1 If the {content type} is empty, then the element information item has no character or element information item [children]. ... http://www.w3.org/TR/xmlschema-1/#cvc-complex-type So the element e is only valid if it doesn't have *any* character or element information item children. Whitespace characters in the element content count as character information item children, so the element e is invalid -- the whitespace is not ignorable because the element e has been declared as being empty. If type t had been declared as: <xs:complexType name="t"> <xs:complexContent> <xs:restriction base="xs:anyType"> <xs:sequence> <xs:element name="f" minOccurs="0" maxOccurs="0" /> </xs:sequence> </xs:restriction> </xs:complexContent> </xs:complexType> on the other hand, then the content type of type t would not be empty (it would be a sequence of 0 f elements instead). In this context, whitespace character information items *are* ignored, and the element e with whitespace-only content would be valid. Cheers, Jeni --- Jeni Tennison http://www.jenitennison.com/
Received on Thursday, 4 July 2002 06:03:28 UTC