Re: Reusing the XMLSchema simpleType element in an own schema

Hi Gino,

> I tried your suggestion this morning already and it did not do what
> I wanted. In the "http://www.w3.org/2000/10/XMLSchema", simpleType
> seems to be defined multiple times and I do not seem to be able to
> get the version I want. If I follow your suggestion, the schema
> forces me use the following structure in the data document:
>
>         <xsd:simpleType name="xxx">
>                 <xsd:simpleDerivation></xsd:simpleDerivation>
>         </xsd:simpleType>
>
> That is why I tried to solve it by mimicing how elements are defined
> in XMLSchema.

OK, two things.

First, why are you using the old "http://www.w3.org/2000/10/XMLSchema"
rather than "http://www.w3.org/2001/XMLSchema", which is the
Recommendation version? Whichever you use, you should make sure that
you're consistent with your use of namespaces -- if you try importing
a schema whose target namespace is
"http://www.w3.org/2000/10/XMLSchema" and importing it to provide
elements in the namespace "http://www.w3.org/2001/XMLSchema" then your
validator will complain about that.

Second, the schema for schema at http://www.w3.org/2001/XMLSchema.xsd
does declare the simpleType element globally, so you should be able to
refer to it directly. It's worth noting, however, that the global
declaration is meant for global simple type definitions (i.e. those
found at the top level of the schema) rather than local simple type
definitions, which are the kind that you want to use in your document.

If you want to have xsd:simpleType elements of the local type then you
should create an "adapter schema", with the W3C XML Schema target
namespace, which includes the schema for schema and defines a group
containing a xsd:simpleType element:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            targetNamespace="http://www.w3.org/2001/XMLSchema"
            elementFormDefault="qualified">

<xsd:include schemaLocation="http://www.w3.org/2001/XMLSchema.xsd" />

<xsd:group name="localSimpleType">
  <xsd:sequence>
    <xsd:element name="simpleType" type="xsd:localSimpleType" />
  </xsd:sequence>
</xsd:group>

</xsd:schema>

You can then import this adapter schema into your own, and declare
your type element as follows:

<xsd:import namespace="http://www.w3.org/2001/XMLSchema"
            schemaLocation="myAdapterSchema.xsd" />

<xsd:element name="type">
  <xsd:complexType>
    <xsd:group ref="xsd:localSimpleType" minOccurs="0" />
    <xsd:attribute name="name" type="xsd:string" use="required" />
    <xsd:attribute name="type" type="xsd:QName" />
  </xsd:complexType>
</xsd:element>

[Note that the name attribute has to be explicitly labelled as
required, while the type attribute declaration doesn't need a 'use'
attribute to indicate that it's optional, since attributes are
optional by default.]

Cheers,

Jeni

---
Jeni Tennison
http://www.jenitennison.com/

Received on Wednesday, 28 August 2002 07:24:53 UTC