RE: schema extension question

To clarify, below is some skeleton schema that sort of does what we
want, but it doesn't enforce the rule that StudyType1 uses only
StudyType1 parts. How do we ensure that we don't end up with this:

<StudyType1>

        <part1 xsi:type="studyType1_part1">This is good<part1>

        <part2 xsi:type="studyType2_part2">Uh Oh!<part2>

</StudyType1>

 

Thanks for you attention,

Dan Marcus

 

<?xml version="1.0" encoding="UTF-8"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" attributeFormDefault="unqualified">

            <xs:complexType name="abstract_part1" abstract="true"/>

            <xs:complexType name="studyType1_part1">

                        <xs:complexContent>

                                    <xs:extension
base="abstract_part1"/>

                        </xs:complexContent>

            </xs:complexType>

            <xs:complexType name="studyType2_part1">

                        <xs:complexContent>

                                    <xs:extension
base="abstract_part1"/>

                        </xs:complexContent>

            </xs:complexType>

            <xs:complexType name="abstract_part2" abstract="true"/>

            <xs:complexType name="studyType1_part2">

                        <xs:complexContent>

                                    <xs:extension
base="abstract_part2"/>

                        </xs:complexContent>

            </xs:complexType>

            <xs:complexType name="studyType2_part2">

                        <xs:complexContent>

                                    <xs:extension
base="abstract_part2"/>

                        </xs:complexContent>

            </xs:complexType>

            <xs:complexType name="abstract_study" abstract="true">

                        <xs:sequence>

                                    <xs:element name="part1"
type="abstract_part1"/>

                                    <xs:element name="part2"
type="abstract_part2"/>

                        </xs:sequence>

            </xs:complexType>

            <xs:complexType name="studyType1">

                        <xs:annotation>

                                    <xs:documentation>This should
require parts 1 and 2 to use studyType1 parts</xs:documentation>

                        </xs:annotation>

                        <xs:complexContent>

                                    <xs:extension
base="abstract_study"/>

                        </xs:complexContent>

            </xs:complexType>

            <xs:complexType name="studyType2">

                        <xs:annotation>

                                    <xs:documentation>This should
require parts 1 and 2 to use studyType1 parts</xs:documentation>

                        </xs:annotation>

                        <xs:complexContent>

                                    <xs:extension
base="abstract_study"/>

                        </xs:complexContent>

            </xs:complexType>

            <xs:element name="StudyType1" type="studyType1"/>

            <xs:element name="StudyType2" type="studyType2"/>

</xs:schema>

 

________________________________

From: xmlschema-dev-request@w3.org [mailto:xmlschema-dev-request@w3.org]
On Behalf Of Daniel Marcus
Sent: Thursday, April 19, 2007 5:18 PM
To: xmlschema-dev@w3.org
Subject: schema extension question

 

Hi-

 

Hi-

 

My group is designing a schema for neuroimaging.  We're having trouble
tackling what seems like a basic problem.  We'd like to create
containers that have similar content, along these lines:

 

<StudyType1>

            <StudyType1_part1>Some complex content<StudyType1_part1>

            <StudyType1_part2>Different complex
content<StudyType1_part2>

</StudyType1>

<StudyType2>

            <StudyType2_part1> Some complex content <StudyType2_part1>

            <StudyType2_part2> Different complex content
<StudyType2_part2>

</StudyType1>

 

*_part1 derive from the same base type (abstract_part1) and *_part2
derive from a different base type (abstract_part2).  Additionally, we
want to enforce that for each study type, part1 and part2 are matched by
study type (i.e. StudyType1 includes only StudyType1_part* elements).

 

Is there an appropriate XML Schema representation for this?  We've tried
substitution, extension, restriction... Nothing seems to capture this
sort of content.  Any advice would be appreciated.

 

Regards, 

Dan Marcus

Received on Friday, 20 April 2007 14:53:55 UTC