W3C XML Schema language permits different content models for elements with the same name, as long as the validator can unambiguously determine which content model applies. Your examples are legal.

Not really. See comment below.

If I define an XML schema as follows:

<?xml version="1.0" encoding="UTF-8"?>
<!-- strange.xsd -->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema";

                        targetNamespace="http://localhost/strange";
                        xmlns="http://localhost/strange";
elementFormDefault="qualified">

<xsd:complexType name="C1">
<xsd:sequence>

      <xsd:element name="A" type="xsd:string"/>
</xsd:sequence>

</xsd:complexType>
<xsd:complexType name="C2">

      <xsd:sequence>
      <xsd:element name="A" type="C1"/>
<xsd:element name="A" type="xsd:string"/>

This is not legal in W3C XML Schema. In order to have two elements with the same name in the same content model they also _must_ have the same type. This constraint is violated in the above type.
The spec reads [1]:


*"Schema Component Constraint: Element Declarations Consistent*
If the {particles} <http://www.w3.org/TR/xmlschema-1/#particles> contains, either directly, indirectly (that is, within the {particles} <http://www.w3.org/TR/xmlschema-1/#particles> of a contained model group, recursively) or �implicitly� <http://www.w3.org/TR/xmlschema-1/#key-impl-cont> two or more element declaration particles with the same {name} <http://www.w3.org/TR/xmlschema-1/#e-name> and {target namespace} <http://www.w3.org/TR/xmlschema-1/#e-target_namespace>, then all their type definitions must be the same top-level definition, that is, *all* of the following must be true:
1 all their {type definition} <http://www.w3.org/TR/xmlschema-1/#type_definition>s must have a non-�absent� <http://www.w3.org/TR/xmlschema-1/#key-null> name.
2 all their {type definition} <http://www.w3.org/TR/xmlschema-1/#type_definition>s must have the same name.
3 all their {type definition} <http://www.w3.org/TR/xmlschema-1/#type_definition>s must have the same target namespace."


Cheers,
/Eddie

[1] http://www.w3.org/TR/xmlschema-1/#coss-modelGroup

</xsd:sequence>
</xsd:complexType>
<xsd:element name="A" type="C2"/>
</xsd:schema>


then an instance document looks like

<?xml version="1.0" encoding="UTF-8"?>
<!-- strange.xml -->
<A xmlns="http://localhost/strange";
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
xsi:schemaLocation="http://localhost/strange strange.xsd">
<A>
<A>foo</A>
</A>
<A>bar</A>
</A>


Is there anything inherently wrong with having an "A" element used in many different ways? Xerces will certainly validate the document OK, and I couldn't find anything in the xml-schema spec that invalidates this. It looks strange to me, as I don't think you could have defined this structure using a DTD. Does anyone have a view on this?

cheers

Loz


--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]





--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to