- From: Henry S. Thompson <ht@cogsci.ed.ac.uk>
- Date: 03 Dec 2001 20:33:27 +0000
- To: Jeni Tennison <jeni@jenitennison.com>
- Cc: "Naomi Dushay" <Naomi@cs.cornell.edu>, xmlschema-dev@w3.org
Jeni Tennison <jeni@jenitennison.com> writes: > Hi Naomi, > > > I'm running into a problem with prefix scoping. > > > > My instance document (simplified): > > > > <bar:A xmlns:bar="ignored" xmlns:foo="http://foo.namespace" > > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > > xsi:schemaLocation="ignored bar.xsd"> > > <foo:B xsi:schemaLocation="http://foo.namespace fooB.xsd"> > > <foo:Q /> > > <foo:R /> > > </foo:B> > > <foo:C xsi:schemaLocation="http://foo.namespace fooC.xsd"> > > <foo:Y /> > > <foo:Z /> > > </foo:C> > > </bar:A> > > > > I have XML schemas bar.xsd, fooB.xsd and fooC.xsd, all of which are > > valid. I can't find anything in the XML Schema spec that implies the > > above instance doc shouldn't work. But there seems to be a namespace > > prefix collision for prefix "foo." This is true for XSV and for the > > topologi Schematron Validator. I'm not sure I understand what you mean by prefix collision -- how does XSV fail with that above schema? > The problem is that you can't change the association between a > namespace and a schema half way through a document. On any single > assessment, a schema validator will only consider one schema for a > particular namespace. > > The xsi:schemaLocation (or xsi:noNamespaceSchemaLocation) attribute > that defines the association between a namespace and a schema has to > be on or before the first element in the document with that namespace, > but then has a scope beyond (after) that element as well. This is > described in http://www.w3.org/TR/xmlschema-1/#schema-loc. > > Effectively this means that you may as well define all your > associations between namespaces and schemas on the document element. > If you have different schemas for different sections of the document, > I'd recommend that you use different namespaces for those different > sections. It's I suppose possible that fooB.xsd and fooC.xsd are compatible with one another -- i.e. either identical, or not contradictory. In that case in principle you could put _both_ pairings in a single xsi:schemaLoc, e.g. <foo:B xsi:schemaLocation="http://foo.namespace fooB.xsd http://foo.namespace fooC.xsd"> <foo:Q /> <foo:R /> </foo:B> <foo:C> <foo:Y /> <foo:Z /> </foo:C> I don't _think_ that there's anything in the REC which precludes the above. ht -- Henry S. Thompson, HCRC Language Technology Group, University of Edinburgh W3C Fellow 1999--2001, part-time member of W3C Team 2 Buccleuch Place, Edinburgh EH8 9LW, SCOTLAND -- (44) 131 650-4440 Fax: (44) 131 650-4587, e-mail: ht@cogsci.ed.ac.uk URL: http://www.ltg.ed.ac.uk/~ht/
Received on Monday, 3 December 2001 15:33:36 UTC