- From: Jeni Tennison <jeni@jenitennison.com>
- Date: Wed, 28 Aug 2002 11:51:48 +0100
- To: gino.marckx@belgacom.be
- CC: xmlschema-dev@w3c.org
Hi Gino,
> I want to reuse the simpleType element definition we all use for
> defining our own schema's, in a schema. In other words, I want to be
> able in the XML document, using my schema, to define simpleType
> elements as data.
>
> Example:
> <types xmlns:xsd="http://www.w3.org/2000/10/XMLSchema">
> <type name="myStringType" type="xsd:string"/>
> <type name="myEnumerationBasedOnStringType">
> <xsd:simpleType>
> <!-- If the following is impossible, it could restrict xsd:string too -->
> <xsd:restriction base="myStringType">
> <xsd:enumeration>Possible value</xsd:enumeration>
> </xsd:restriction>
> </xsd:simpleType>
> </type>
> </types>
OK, so you want to say that the type element can contain a
xsd:simpleType element, as defined in the W3C XML Schema namespace.
> I tried to specify the type element like the following, but on
> validation I always get the same error stating that the type cannot
> be found, even when I import the schema:
>
> <xsd:element name="type">
> <xsd:complexType>
> <xsd:sequence>
> <xsd:element name="simpleType" type="xsd:anySimpleType" minOccurs="0"/>
> </xsd:sequence>
> <xsd:attribute name="name" value="xsd:string"/>
> <xsd:attribute name="type" value="xsd:QName" use="optional"/>
> </xsd:complexType>
> </xsd:element>
Here, you're saying that the type element can hold a simpleType
element (in your namespace or in no namespace, depending on the value
of elementFormDefault on your xsd:schema element). I think, from the
example that you've given, that you want it to hold a *xsd:simpleType*
element. To do that, you need to refer to the xsd:simpleType element
from the content model, as follows:
<xsd:element name="type">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="xsd:simpleType" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" value="xsd:string"/>
<xsd:attribute name="type" value="xsd:QName" use="optional"/>
</xsd:complexType>
</xsd:element>
To refer explicitly to an element in another namespace, you *must*
have an xsd:import element that references that namespace (although it
doesn't necessarily have to point to a schema). So you need:
<xsd:import namespace="http://www.w3.org/2001/XMLSchema" />
or something similar at the top of your schema.
Cheers,
Jeni
---
Jeni Tennison
http://www.jenitennison.com/
Received on Wednesday, 28 August 2002 06:51:55 UTC