[
Lists Home |
Date Index |
Thread Index
]
Hi David,
There are a number of problems here.
One problem is that the schema documents are not correct, you need to
specify the namespace on an xs:import element, the schemaLocation is
optional. There are also a number of other issues with your schemas like
correctly referring to schema components in a specific namespace. A
valid set of sample schemas is below.
A catalog then can resolve either the namespace or the schema location
hint to an actual document (generally to a local document). However the
catalog entries should be uri mappings or system mappings and not public
as in your example. Ideally the parser should use the uri mappings for
schemas but if it is used at SAX level for instance that will not be
possible and schemas will be resolved only based on the location hint
and using catalog system mappings.
basetypes.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:ipbt="http://www.example.com/david/nedrow/ns/basetypes"
targetNamespace="http://www.example.com/david/nedrow/ns/basetypes"
elementFormDefault="qualified">
<!--Declare a number of generic type equivalents-->
<!-- string type -->
<xs:complexType name="stringType" abstract="true">
<xs:annotation>
<xs:documentation>Character strings.</xs:documentation>
</xs:annotation>
<xs:simpleContent>
<xs:extension base="xs:string"/>
</xs:simpleContent>
</xs:complexType>
</xs:schema>
datatypes.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.com/david/nedrow/ns/datatypes"
xmlns:ipbt="http://www.example.com/david/nedrow/ns/basetypes"
xmlns:ipdt="http://www.example.com/david/nedrow/ns/datatypes"
elementFormDefault="qualified">
<!--Generic descriptive text type -->
<xs:import
namespace="http://www.example.com/david/nedrow/ns/basetypes"
schemaLocation="basetypes.xsd"/>
<xs:complexType name="descriptionType" abstract="false">
<xs:annotation>
<xs:documentation>This is a generic descriptive text
entry.</xs:documentation>
</xs:annotation>
<xs:simpleContent>
<xs:extension base="ipbt:stringType"/>
</xs:simpleContent>
</xs:complexType>
</xs:schema>
test.xsd
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.com/david/nedrow/ns/foo"
xmlns:ipdt="http://www.example.com/david/nedrow/ns/datatypes"
elementFormDefault="qualified">
<xs:import
namespace="http://www.example.com/david/nedrow/ns/datatypes"
schemaLocation="datatypes.xsd"/>
<xs:element name="ruleset">
<xs:complexType>
<xs:sequence>
<xs:element name="rule" minOccurs="1"
maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="name"
type="ipdt:descriptionType"
minOccurs="1" maxOccurs="1"/>
<xs:element name="desc"
type="ipdt:descriptionType"
minOccurs="1" maxOccurs="1"/>
<xs:element name="vdesc"
type="ipdt:descriptionType"
minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
In general you will not need a catalog file when you define your schemas
unless you distribute them separately. Now assuming you make these
schemas available at http://www.example.com/david/nedrow/test/ location
then you can use a catalog like below in the same folder as the local
copies of the schemas:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE catalog
PUBLIC "-//OASIS//DTD XML Catalogs V1.1//EN"
"http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd">
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
<!-- This will resolve for instance
http://www.example.com/david/nedrow/test/datatypes.xsd to ./datatypes.xsd-->
<rewriteSystem
systemIdStartString="http://www.example.com/david/nedrow/test"
rewritePrefix="."/>
</catalog>
and an XML instance document like
<?xml version="1.0" encoding="UTF-8"?>
<ruleset xmlns="http://www.example.com/david/nedrow/ns/foo"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.com/david/nedrow/ns/foo
http://www.example.com/david/nedrow/test/test.xsd">
<rule>
<name></name>
<desc></desc>
<vdesc></vdesc>
</rule>
</ruleset>
will be able to find the local schemas and will be valid.
Best Regards,
George
---------------------------------------------------------------------
George Cristian Bina
<oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger
http://www.oxygenxml.com
David Nedrow wrote:
> I'm working on a new schema and have managed to get much of what I need
> done, but I'm afraid that I'm doing some things incorrectly in an effort
> to get it working. Sort of like adding closing parens to LISP code until
> it works. ;)
>
> Here's what I'm trying to accomplish....
>
> A schema that references several other schemas in which are defined an
> number of types. Everything to be pulled together by a catalog file.
>
> I've included a heavily truncated and simplified version of what I'm
> working with. My questions are as follows...
>
> 1). Have I created an operable catalog file
> 2). Have I correctly built the <schema/> headers for the subsequent files?
> 3). If 1 & 2 are correct, why must I import the schemas in order to use
> their defined elements? Shouldn't that be handled via my catalog file
> and the <schema/> declarations?
>
> I'd appreciate any input (good or bad) as to what I've provided below. I
> have other questions, but their are predicated on the answers to my
> questions above. ;)
>
> -David
>
> catalog.xml
> =========
>
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE catalog
> PUBLIC "-//OASIS//DTD XML Catalogs V1.1//EN"
>
> "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd">
> <catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog"
> prefer="public">
> <public publicId="-//NEDRON//FOO Base Types V1.0//EN"
> uri="basetypes.xsd"/>
> <public publicId="-//NEDRON//FOO Data Types V1.0//EN"
> uri="datatypes.xsd"/>
> <public publicId="-//NEDRON//FOO Test V1.0//EN" uri="test.xsd"/>
> </catalog>
>
> basetypes.xsd
> ===========
>
> <?xml version="1.0" encoding="UTF-8"?>
> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
> xmlns:ipbt="-//NEDRON//FOO Base Types V1.0//EN"
> elementFormDefault="qualified">
> <!--Declare a number of generic type equivalents-->
> <!-- string type -->
> <xs:complexType name="stringType" abstract="true">
> <xs:annotation>
> <xs:documentation>Character strings.</xs:documentation>
> </xs:annotation>
> <xs:simpleContent>
> <xs:extension base="xs:string"/>
> </xs:simpleContent>
> </xs:complexType>
> </xs:schema>
>
> datatypes.xsd
> ===========
>
> <?xml version="1.0" encoding="UTF-8"?>
> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
> targetNamespace="-//NEDRON//FOO Data Types V1.0//EN"
> xmlns:ipbt="-//NEDRON//FOO Base Types V1.0//EN"
> xmlns:ipdt="-//NEDRON//FOO Data Types V1.0//EN"
> elementFormDefault="qualified">
> <!--Generic descriptive text type -->
> <xs:import schemaLocation="ipbt.xsd"/>
> <xs:complexType name="descriptionType" abstract="true">
> <xs:annotation>
> <xs:documentation>This is a generic descriptive text
> entry.</xs:documentation>
> </xs:annotation>
> <xs:simpleContent>
> <xs:extension base="stringType"/>
> </xs:simpleContent>
> </xs:complexType>
> </xs:schema>
>
> test.xsd
> ======
> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
> targetNamespace="-//NEDRON//FOO Test V1.0//EN"
> xmlns:ipft="-//NEDRON//FOO Filter Types V1.0//EN"
> xmlns:ipdt="-//NEDRON//FOO Data Types V1.0//EN"
> elementFormDefault="qualified">
> <xs:import schemaLocation="basetypes.xsd"/>
> <xs:import schemaLocation="datatypes.xsd"/>
> <xs:element name="ruleset">
> <xs:complexType>
> <xs:sequence>
> <xs:element name="rule" minOccurs="1"
> maxOccurs="unbounded">
> <xs:complexType>
> <xs:sequence>
> <xs:element name="name" type="descriptionType"
> minOccurs="1" maxOccurs="1"/>
> <xs:element name="desc" type="descriptionType"
> minOccurs="1" maxOccurs="1"/>
> <xs:element name="vdesc" type="descriptionType"
> minOccurs="1" maxOccurs="1"/>
> </xs:sequence>
> </xs:complexType>
> </xs:element>
> </xs:sequence>
> </xs:complexType>
> </xs:element>
> </xs:schema>
>
>
> -----------------------------------------------------------------
> The xml-dev list is sponsored by XML.org <http://www.xml.org>, an
> initiative of OASIS <http://www.oasis-open.org>
>
> The list archives are at http://lists.xml.org/archives/xml-dev/
>
> To subscribe or unsubscribe from this list use the subscription
> manager: <http://www.oasis-open.org/mlmanage/index.php>
>
|