Re: [xml-dev] Use xsd to specify multiple instances of existing element

From
Pete Cordell <>
To
Date
2008-09-22T13:10:07Z
ID
<79591C2F2F3F496185CB49CE6EF0BBBC@Codalogic>
Thread
Re: [xml-dev] Use xsd to specify multiple instances of existing element
I think what Andrew is suggesting is something like:

<xs:element name='category' type='categoryType' />

<xs:complexType name='categoryType' abstract='true'>
    ...

<xs:complexType name='privacy'>
    <xs:complexContent>
        <xs:extension base='categoryType'>
            ...

<xs:complexType name='fishingType'>
    <xs:complexContent>
        <xs:extension base='categoryType'>
            ...

This obviously has the problem of requiring the use of xsi:type.  It does
point to XSD1.1's xs:alternative construct being a useful way to go though.
Based on the example in the latest draft just before section 3.3.3, you'd
have something like:

<xs:element name="category" type="categoryType">
  <xs:alternative test="@scheme='http://dig.com/privacy'"
type="categoryPrivacyType"/>
  <xs:alternative test="@scheme='http://dig.com/fishingType'"
type="categoryFishingType"/>
</xs:element>

Hopefully someone will correct me if I'm wrong.

XSD 1.1 is not even new stuff yet(!), so I guess that is of little help!

HTH,

Pete Cordell
Codalogic Ltd
Interface XML to C++ the easy way using XML C++
data binding to convert XSD schemas to C++ classes.
Visit http://www.codalogic.com/lmx/ for more info

----- Original Message ----- 
From: "Rick Jelliffe" <>
To: <>
Sent: Monday, September 22, 2008 11:40 AM
Subject: Re: [xml-dev] Use xsd to specify multiple instances of existing 
element


>
> Andrew Welch wrote:
>>> So in order to get your constraint you have three choices:
>>>
>>> 1) Adopt  RELAX NG instead of XSD.
>>> 2) Adopt Schematron as well as (or instead of XSD)
>>> 3) Adopt XSD 1.1 (if you can find an implementation) and use their
>>> assertions.
>>>
>>
>> there's a 4th I think:
>>
>> 4) annotate the category elements with an xsi:type:
>>
>> <category xsi:type="privacy" scheme='http://dig.com/privacy' 
>> term='private'/>
>> <category xsi:type="fishingType" scheme='http://dig.com/fishingType'
>> term='coarse'/>
>>
>> ...then just define the types "privacy" and "fishingType" in your
>> schema.
> I suspect that will not work, but it certainly may be worth a try.
>
> To make this work, don't you have to define the <entry> element to use 
> wildcards? For example (loosely)
>
> <element name="entry" >
>      <sequence>
>          <element name="category"> <!-- open category -->
>
>     <xs:any namespace="##targetNamespace"/>
>
> And if you wanted to make the first optional, alarm bells go off that many 
> XSD processors are likely to disallow it (due to quasi UPA implementation, 
> regardless of the standard).
> So you lose the ability to say "the second element must be a category" 
> while gaining the ability to override the schema in the instance.  The 
> trouble with this use of xsi:type is that it really doesn't give you 
> anything in terms of stricter validation or information
> modeling: it lets you get a validation result in spite of the modeling!
> Cheers
> Rick Jelliffe
>
>
>
>
>
> _______________________________________________________________________
>
> XML-DEV is a publicly archived, unmoderated list hosted by OASIS
> to support XML implementation and development. To minimize
> spam in the archives, you must subscribe before posting.
>
> [Un]Subscribe/change address: http://www.oasis-open.org/mlmanage/
> Or unsubscribe: 
> subscribe: 
> List archive: http://lists.xml.org/archives/xml-dev/
> List Guidelines: http://www.oasis-open.org/maillists/guidelines.php
>
>