Indeed, Eddie is correct, and my earlier post was incorrect.
Even the tool my colleague and I wrote [1] flags this as a problem.
Thank you Eddie for pointing out which constraint is violated.

Bob

[1] IBM XML Schema Quality Checker - http://www.alphaworks.ibm.com/tech/xmlsqc


Please respond to [EMAIL PROTECTED]

To: [EMAIL PROTECTED]
cc:
Subject: Re: Allowable schema representations



>
>
> 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