Error in the schema for schemas?

Hi all,

I tried to validate the schema for schemas and encountered a problem
regarding particle restrictions. It amounts to that the definition of the
simpleRestrictionType seems incorrect with respect to the "Particle Valid
(Restriction)" constraint.

In essence the problem is caused by the fact that the two content models (of
the base type and the restricted type) are structurally different. In order
to validate the restriction it must be valid to replace a choice group by one
of its particles in the restricted content model.

In order to explain the problem in more detail I include the corresponding
content models:

1. The content model of the restrictionType that is the base type of
simpleRestrictionType:

<sequence minOccurs="1" maxOccurs="1">
    <sequence minOccurs="1" maxOccurs="1">
        <element name="annotation"/>
    </sequence>
    <sequence minOccurs="1" maxOccurs="1">
        <choice minOccurs="1" maxOccurs="1">
            <choice minOccurs="0" maxOccurs="1">
                <element name="group"/>
                <element name="all"/>
                <element name="choice"/>
                <element name="sequence"/>
            </choice>
            <sequence minOccurs="0" maxOccurs="1">
                <element name="simpleType"/>
                <choice minOccurs="0" maxOccurs="unbounded">
                    <element name="minExclusive"/>
                    <element name="minInclusive"/>
                    <element name="maxExclusive"/>
                    <element name="maxInclusive"/>
                    <element name="totalDigits"/>
                    <element name="fractionDigits"/>
                    <element name="length"/>
                    <element name="minLength"/>
                    <element name="maxLength"/>
                    <element name="enumeration"/>
                    <element name="whiteSpace"/>
                    <element name="pattern"/>
                </choice>
            </sequence>
        </choice>
        <sequence minOccurs="1" maxOccurs="1">
            <choice minOccurs="0" maxOccurs="unbounded">
                <element name="attribute"/>
                <element name="attributeGroup"/>
            </choice>
            <element name="anyAttribute"/>
        </sequence>
    </sequence>
</sequence>

After removing pointless groups the result is the content model B:

<sequence minOccurs="1" maxOccurs="1">
    <element name="annotation"/>
    <choice minOccurs="1" maxOccurs="1">
        <choice minOccurs="0" maxOccurs="1">
            <element name="group"/>
            <element name="all"/>
            <element name="choice"/>
            <element name="sequence"/>
        </choice>
        <sequence minOccurs="0" maxOccurs="1">
            <element name="simpleType"/>
            <choice minOccurs="0" maxOccurs="unbounded">
                <element name="minExclusive"/>
                <element name="minInclusive"/>
                <element name="maxExclusive"/>
                <element name="maxInclusive"/>
                <element name="totalDigits"/>
                <element name="fractionDigits"/>
                <element name="length"/>
                <element name="minLength"/>
                <element name="maxLength"/>
                <element name="enumeration"/>
                <element name="whiteSpace"/>
                <element name="pattern"/>
            </choice>
        </sequence>
    </choice>
    <choice minOccurs="0" maxOccurs="unbounded">
        <element name="attribute"/>
        <element name="attributeGroup"/>
    </choice>
    <element name="anyAttribute"/>
</sequence>

Next there is the content model of the simpleRestrictionType as it is
defined in the schema for schemas:

<sequence minOccurs="1" maxOccurs="1">
    <element name="annotation"/>
    <sequence minOccurs="0" maxOccurs="1">
        <element name="simpleType"/>
        <choice minOccurs="0" maxOccurs="unbounded">
            <element name="minExclusive"/>
            <element name="minInclusive"/>
            <element name="maxExclusive"/>
            <element name="maxInclusive"/>
            <element name="totalDigits"/>
            <element name="fractionDigits"/>
            <element name="length"/>
            <element name="minLength"/>
            <element name="maxLength"/>
            <element name="enumeration"/>
            <element name="whiteSpace"/>
            <element name="pattern"/>
        </choice>
    </sequence>
    <sequence minOccurs="1" maxOccurs="1">
        <choice minOccurs="0" maxOccurs="unbounded">
            <element name="attribute"/>
            <element name="attributeGroup"/>
        </choice>
        <element name="anyAttribute"/>
    </sequence>
</sequence>

Removing pointless groups in this model yields the content model R:

<sequence minOccurs="1" maxOccurs="1">
    <element name="annotation"/>
    <sequence minOccurs="0" maxOccurs="1">
        <element name="simpleType"/>
        <choice minOccurs="0" maxOccurs="unbounded">
            <element name="minExclusive"/>
            <element name="minInclusive"/>
            <element name="maxExclusive"/>
            <element name="maxInclusive"/>
            <element name="totalDigits"/>
            <element name="fractionDigits"/>
            <element name="length"/>
            <element name="minLength"/>
            <element name="maxLength"/>
            <element name="enumeration"/>
            <element name="whiteSpace"/>
            <element name="pattern"/>
        </choice>
    </sequence>
    <choice minOccurs="0" maxOccurs="unbounded">
        <element name="attribute"/>
        <element name="attributeGroup"/>
    </choice>
    <element name="anyAttribute"/>
</sequence>

Compare the content model B and R clearly shows the problem: R is a
restriction of B because B contain a choise group that contains among another choice
group a sequence group. Now, in R is this choice replaced by this sequence.

Yet the algorithm for validating particles can not cope with this situation.
When validating a sequence as a restriction of a choice the case that the
choice is simply replaced by one of its particles is not considered.

What can we do? Is only the schema for schemas incorrect or should the
constraint for particle validations extended to cope with such cases?

--Stefan

Received on Tuesday, 13 August 2002 12:00:52 UTC