XML.orgXML.org
FOCUS AREAS |XML-DEV |XML.org DAILY NEWSLINK |REGISTRY |RESOURCES |ABOUT
OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index]
XML Schema pattern facet quiz

Hi Folks,

Here simpleType "A" is the base of simpleType "B":

    <xs:simpleType name="A">
        <xs:restriction base="xs:string">
            <xs:pattern value="[a-z]{10}" />
        </xs:restriction>
    </xs:simpleType>
    
    <xs:simpleType name="B">
        <xs:restriction base="A">
            <xs:pattern value="[a-z]{20}" />
        </xs:restriction>
    </xs:simpleType>

Is that legal?

After all, clearly the pattern facet in "B" is not a restriction (subset) of the pattern facet in "A".

Further, how does it differ from this, where the two pattern facets are embedded in the same simpleType:

    <xs:simpleType name="C">
        <xs:restriction base="xs:string">
            <xs:pattern value="[a-z]{10}" />
            <xs:pattern value="[a-z]{20}" />
        </xs:restriction>
    </xs:simpleType>

Is "C" equivalent to "A" plus "B"?

Scroll down to see the answers ...










































This is perfectly legal:

    <xs:simpleType name="A">
        <xs:restriction base="xs:string">
            <xs:pattern value="[a-z]{10}" />
        </xs:restriction>
    </xs:simpleType>
    
    <xs:simpleType name="B">
        <xs:restriction base="A">
            <xs:pattern value="[a-z]{20}" />
        </xs:restriction>
    </xs:simpleType>

The pattern facet in "B" does not have to restrict/subclass the pattern facet in "A". In fact, the pattern facets are completely independent.

The pattern facets are "and-ed" together.  Consider this element, Test, declared to be of type "B":

  <xs:element name="Test" type="B" />

The value of "B" must consist of the letters a-z and the length must be exactly 10 characters AND exactly 20 characters. Obviously that is impossible, so Test has no valid value.

Compare the above two simpleTypes against this simpleType:

    <xs:simpleType name="C">
        <xs:restriction base="xs:string">
            <xs:pattern value="[a-z]{10}" />
            <xs:pattern value="[a-z]{20}" />
        </xs:restriction>
    </xs:simpleType>

Pattern facets within a simpleType are "or-ed" together. Suppose the element, Test, is declared to be of type "C":

  <xs:element name="Test" type="C" />

The value of Test must consist of the letters a-z and the length must be exactly 10 characters OR exactly 20 characters. So either of these is valid:

    <Test>abcdefghijabcdefghij</Test>

    <Test>abcdefghij</Test>

Recap:

1. The pattern facets within a simpleType are "or-ed" together.

2. The pattern facets in a base simpleType and the sub-simpleType are "and-ed" together.

3. The pattern facets in a sub-simpleType do not have to restrict/subclass the patterns in the base simpleType.

/Roger


[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index]


News | XML in Industry | Calendar | XML Registry
Marketplace | Resources | MyXML.org | Sponsors | Privacy Statement

Copyright 1993-2007 XML.org. This site is hosted by OASIS