- From: <Noah_Mendelsohn@lotus.com>
- Date: Fri, 9 Nov 2001 16:00:24 -0500
- To: andrew.hickman@philips.com
- Cc: xmlschema-dev@w3.org
For a general motivation on import see the thread at [1] and especially my response at [2]. The <import>s in your schema gives the processor a list of the namespaces that will be used in references to other schema components, such as element declarations. The schemaLocation on <import> is a hint, which will be honored by those processors that trust one schema document to indicate where others are located (sometimes you want to be sure you know what you're using as the definition of a namespace.) [1] http://lists.w3.org/Archives/Public/www-xml-schema-comments/2001JulSep/0006.html [2] http://lists.w3.org/Archives/Public/www-xml-schema-comments/2001JulSep/0011.html ------------------------------------------------------------------------ Noah Mendelsohn Voice: 1-617-693-4036 Lotus Development Corp. Fax: 1-617-693-8676 One Rogers Street Cambridge, MA 02142 ------------------------------------------------------------------------ andrew.hickman@philips.com Sent by: xmlschema-dev-request@w3.org 11/07/01 10:25 AM To: xmlschema-dev@w3.org cc: (bcc: Noah Mendelsohn/CAM/Lotus) Subject: How is the <import> element handled Hi, I have some questions about use of the import statement. I am unclear as to exactly what it achieves. The example below shows some types I am defining some types for use in SOAP transactions - these will eventually be used by a WSDL file. <schema targetNamespace="http://www.tv-anytime.org/2001/11/transport/types" xmlns:tns="http://www.tv-anytime.org/2001/11/transport/types" xmlns:tva_metadata="http://www.tv-anytime.org/2001/08/metadata" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns="http://www.w3.org/2001/XMLSchema"> <import namespace="http://www.tv-anytime.org/2001/08/metadata" schemaLocation="tva_v11.xsd"/> <import namespace="http://schemas.xmlsoap.org/soap/ecoding/" schemaLocation="soap-enc.xsd"/> <element name="ArrayOfCrids"> <complexType> <complexContent> <restriction base="soapenc:Array"> <attribute ref="soapenc:arrayType" default="tva_metadata:CRIDType[]"/> </restriction> </complexContent> </complexType> </element> </schema> If I remove the first import statement the schema becomes invalid (according to XML Spy). However, if I remove the second import statment the schema is valid. Is this because it's a schema aware processor so it knows to try and resolve QNames on some attribute types (in this case base and ref) but it doesn't do so for the default tag? The specification seems to give contradictory messages on what exactly the import statement points to if it has a schemaLocation attribute. In "Schema Representation Constraint: Import Constraints and Semantics" it says: "2 If the application schema reference strategy using the actual values of the schemaLocation and namespace [attributes], provides a referent, as defined by Schema Document Location Strategy (§4.3.2), one of the following must be true: 2.1 The referent is (a fragment of) a resource which is an XML document (see clause 1.1), which in turn corresponds to a <schema> element information item in a well-formed information set, which in turn corresponds to a valid schema. 2.2 The referent is a <schema> element information item in a well-formed information set, which in turn corresponds to a valid schema." Whereas, in "3.15.2.1 References to Schema Components" it says "Reference to schema components from a schema document is managed in a uniform way, whether the component corresponds to an element information item from the same schema document or is imported (References to schema components across namespaces (§4.2.3)) from an external schema (which may, but need not, correspond to an actual schema document). The form of all such references is a QName." Does the import have to point to a schema element information item or not? If I now define another schema, which needs to reference the namespaces in the above schema (i.e. those corresponding to the prefix tns, tva_metadata and soapenc) do I need to have an import statement for all 3 of these namespaces of does importing the above targetNamespace automatically chain the other 2? WSDL allows me to put an import statement inside a WSDL file which is an XML instance document. I would like to do this to separate the service type interface and the service implementation. This pseudo mix of schema and instance document constructs has left me confused. Am I right in thinking that the use of an import statement in a WSDL file has no effect on a schema processor, but could do a WSDL aware processor? Thanks for your help, Andy Andrew Hickman Interactive Systems Group Philips Research Laboratories, UK Tel: +44 (0) 1293 815167 Fax: +44 (0) 1293 815500
Received on Friday, 9 November 2001 16:11:50 UTC