laxly assessed elements, xsi:type and xsi:nil

Hi,

while toying with laxly assessed elements in combination with "xsi:type"
and "xsi:nil" I stumbled over a scenario where the schema
processors XSV 2.8, Xerces-J 2.6.2, MSXML 4.0 and MS.NET all behave
differently.

Example:

(any_1.xsd)
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
	targetNamespace="urn:test:foo"
	elementFormDefault="qualified">	

	<xsd:element name="foo">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element name="bar"/>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>
</xsd:schema>

(any_1.xml)
<foo 
	xmlns="urn:test:foo"
	xmlns:xsd="http://www.w3.org/2001/XMLSchema"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="urn:test:foo any_1.xsd">
	<bar>
		<boo xsi:type="xsd:string" xsi:nil="true">abc</boo>
	</bar>
</foo> 

Xerces-J 2.6.2 eats it.

XSV 2.8 reports:
"element boo is nilled but is not empty".

MSXML 4.0 reports:
"xsi:nil attribute on element 'boo' is invalid.".

MS.NET reports:
"Das urn:test:foo:boo-Element wurde nicht deklariert. Fehler in
'file:///p:/libxml2-lab/tests/2005-04-26/reader_any_1.xml', '(8 und
4)'."
(which means that MS.NET barks about the element "boo" not being
declared)

The behaviour of MS.NET is only understandable when assuming that
it does not allow "lax" assessment.

MSXML reports the attribute "xsi:nil" as invalid, which seems not
correct, since  cvc-type (3.1.1) allows those attributes.

XSV reports the content to be invalid since "nilled", but I cannot
find any rule which takes "xsi:nil" into account, when an element
declaration is not present. This leads directly to the result
of Xerces-J which seems to be the only correct one.

Can someone clarify this?
Should we follow Xerces-J here?

Regards,

Kasimier

Received on Tuesday, 3 May 2005 14:23:35 UTC