Re: issue with restrictions

I'm not fully sure what you're looking for, but one possibility might be the 
following approach:

    <xs:element name="SearchRequest" abstract="true">
        <xs:complexType/>
    </xs:element>

    <xs:element name="StartDate" type="xs:date"/>
    <xs:element name="EndDate" type="xs:date"/>

   <xs:element name="SearchRequestByDate" substitutionGroup="SearchRequest">
        <xs:complexType>
            <xs:complexContent>
                <xs:extension base="SearchRequest">
                    <xs:sequence>
                    <xs:element ref="StartDate"/>
                    <xs:element ref="EndDate" minOccurs="0"/>
                    </xs:sequence>
                </xs:extension>
            </xs:complexContent>
        </xs:complexType>
   </xs:element>

This does mean you would have to pre-define all the permitted search types.

If you want users to be able to put together what they like, using a number 
of predefined building blocks, then I don't think you need to actually use 
the SearchRequestByDate type (everything is a SearchRequest).

In that case it might be simpler to make SearchRequest a choice of permitted 
search criterion, e.g.:

    <xs:element name="SearchRequest">
        <xs:complexType>
            <xs:choice  maxOccurs="unbounded">
                    <xs:element ref="StartDate"/>
                    <xs:element ref="EndDate" />
                ...
            </xs:choice>
        </xs:complexType>
    </xs:element>

Or, if your occurrence constraints are favorable(!), then:

    <xs:element name="SearchRequest">
        <xs:complexType>
            <xs:all>
                    <xs:element ref="StartDate"/>
                    <xs:element ref="EndDate"/>
                ...
            </xs:all>
        </xs:complexType>
    </xs:element>

HTH,

Pete.
--
=============================================
Pete Cordell
Tech-Know-Ware Ltd
for XML to C++ data binding visit
http://www.tech-know-ware.com/lmx/
http://www.codalogic.com/lmx/
=============================================

----- Original Message ----- 
From: "Guillaume Lebleu" <gl@brixlogic.com>
To: <xmlschema-dev@w3.org>
Sent: Tuesday, March 06, 2007 7:38 PM
Subject: issue with restrictions


>
> Hello,
>
> I'm new to this list. I'm having a XSD development issue that relates to 
> restrictions and I hope this is the right place to ask.
>
> My context is one where developers can create new messages but they must 
> follow some pre-defined patterns. For instance, I want all my search 
> request messages to contain 0 or more search criterias that they can pick 
> from a list of concrete predefined criterias.
>
> What I am trying to do is use XSD to enforce these patterns. A sample XSD 
> is below. When I validate the XSD, I get the error that 
> SearchRequestByDate is not a valid restriction of SearchRequest.
>
> Thank you,
>
> Guillaume
>
> <?xml version="1.0" encoding="UTF-8"?>
> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
>
>    <xs:complexType name="SearchRequest" abstract="true">
>        <xs:sequence>
>            <xs:element ref="SelectionCriteria" minOccurs="0" 
> maxOccurs="unbounded"/>
>        </xs:sequence>
>    </xs:complexType>
>
>    <xs:element name="SelectionCriteria" abstract="true"/>
>   <xs:element name="StartDate" type="xs:string" 
> substitutionGroup="SelectionCriteria"/>
>    <xs:element name="EndDate" type="xs:string" 
> substitutionGroup="SelectionCriteria"/>
>   <xs:complexType name="SearchRequestByDate">
>        <xs:complexContent>
>            <xs:restriction base="SearchRequest">
>                <xs:sequence>
>                <xs:element ref="StartDate"/>
>                <xs:element ref="EndDate" minOccurs="0"/>
>                </xs:sequence>
>            </xs:restriction>
>        </xs:complexContent>
>    </xs:complexType>
>   </xs:schema>
>
>
>
> 

Received on Wednesday, 7 March 2007 13:50:36 UTC