- From: Roger L. Costello <costello@mitre.org>
- Date: Sun, 06 May 2001 17:12:11 -0500
- To: xmlschema-dev@w3.org, costello@mitre.org
Subject: Is it legal for a schema to reference a component in another namespace, when there is no <import> element at the top of the schema? I have observed that XSV allows you to create a schema which contains references to components in other namespaces, even though there is no <import> element. Consider the following schema. weather-station.xsd ---------------------------------------------------- <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.weather-station.org" xmlns="http://www.weather-station.org" xmlns:s="http://www.sensor.org" elementFormDefault="qualified"> <xsd:element name="weather-station"> <xsd:complexType> <xsd:sequence> <xsd:element name="sensor" type="s:sensor_type" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> ---------------------------------------------------- Note that the "sensor" element references a sensor_type which is in another namespace, and note that there is no <import> element. All the other schema validators that I tested (xerces, oracle, XML Spy) do not accept this schema. I believe that XSV is correct, and the others are incorrect. To see why, let's look at an instance document: boston-weather-station.xml ---------------------------------------------------- <?xml version="1.0"?> <weather-station xmlns="http://www.weather-station.org" xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance" xsi:schemaLocation= "http://www.weather-station.org weather-station.xsd http://www.sensor.org boston-sensors.xsd"> <sensor>thermometer</sensor> <sensor>barometer</sensor> <sensor>anenometer</sensor> </weather-station> ---------------------------------------------------- The schemaLocation in this instance document lists a schema, boston-sensors.xsd, which provides the definition of sensor_type: boston-sensors.xsd ---------------------------------------------------- <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.sensor.org" xmlns="http://www.sensor.org" elementFormDefault="qualified"> <xsd:simpleType name="sensor_type"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="barometer"/> <xsd:enumeration value="thermometer"/> <xsd:enumeration value="anenometer"/> </xsd:restriction> </xsd:simpleType> </xsd:schema> ---------------------------------------------------- Thus, the "collection of schemas" listed by the instance document provides a schema validator with all the component definitions. So I think that it should be legal to create a schema that references components in other namespaces, without using an <import> element. That is my thinking on why XSV is correct and the others are incorrect. Am I thinking correctly? Is XSV correct? Assuming that I am thinking correctly, then I believe that XSV does have a bug when the collection of schemas all have the same namespace. For example, let's suppose that weather-station.xsd references sensor_type in the same namespace: weather-station_v2.xsd ---------------------------------------------------- <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.weather-station.org" xmlns="http://www.weather-station.org" elementFormDefault="qualified"> <xsd:element name="weather-station"> <xsd:complexType> <xsd:sequence> <xsd:element name="sensor" type="sensor_type" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> ---------------------------------------------------- Note that there is no definition for sensor_type in this schema. But this time we are referencing a sensor_type in the same namespace. Here is a schema which provides the definition for sensor_type: boston-sensors_v2.xsd ---------------------------------------------------- <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.weather-station.org" xmlns="http://www.weather-station.org" elementFormDefault="qualified"> <xsd:simpleType name="sensor_type"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="barometer"/> <xsd:enumeration value="thermometer"/> <xsd:enumeration value="anenometer"/> </xsd:restriction> </xsd:simpleType> </xsd:schema> ---------------------------------------------------- Using the same strategy as above, in my instance document I list with schemaLocation all the schemas that are needed to define all the components: boston-weather-station_v2.xml ---------------------------------------------------- <?xml version="1.0"?> <weather-station xmlns="http://www.weather-station.org" xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance" xsi:schemaLocation= "http://www.weather-station.org weather-station.xsd http://www.weather-station.org boston-sensors.xsd"> <sensor>thermometer</sensor> <sensor>barometer</sensor> <sensor>anenometer</sensor> </weather-station> ---------------------------------------------------- With this instance document XSV complains. It does not seem to like giving two different schemas to define the same namespace. Is this a bug with XSV, or is it just a requirement that you cannot list two schemas to define the same namespace? Thanks! /Roger
Received on Sunday, 6 May 2001 17:11:31 UTC