- From: Michael Kay <mike@saxonica.com>
- Date: Fri, 14 Mar 2008 21:05:12 -0000
- To: "'Gavin Kistner'" <phrogz@mac.com>
- Cc: <xmlschema-dev@w3.org>
For some strange reason which I've never understood, local element declarations (i.e. <element name="x"/> within a complex type) default to being in no namespace, rather than defaulting to the target namespace of the schema. Most people change this default by adding elementFormDefault="qualified" to the xs:schema element. Michael Kay http://www.saxonica.com/ > -----Original Message----- > From: xmlschema-dev-request@w3.org > [mailto:xmlschema-dev-request@w3.org] On Behalf Of Gavin Kistner > Sent: 14 March 2008 20:35 > To: Michael Kay > Cc: xmlschema-dev@w3.org > Subject: RE: Composition by extension in namespaced schema > > > On Friday, March 14, 2008, at 12:24PM, "Michael Kay" > <mike@saxonica.com> wrote: > >> I need to use a targetNamespace (or is it an xmlns?) in my > schema so > >> that I can validate other files without having to add > >> noNamespaceSchemaLocation to those files. Can someone help me > >> understand the core issue here, and (especially) how to modify the > >> file to accomplish the goal? > > >The type is in a namespace, so the reference to it needs to > be prefixed: > > > >> <?xml version="1.0" encoding="UTF-8"?> <xs:schema > >> xmlns:xs="http://www.w3.org/2001/XMLSchema" > >> targetNamespace="http://www.foo.com/" > > xmlns:tgt="http://www.foo.com/"> > >> <xs:complexType name="mammal" /> > >> <xs:element name="dog"> > >> <xs:complexType><xs:complexContent> > >> <xs:extension base="tgt:mammal" /> > >> </xs:complexContent></xs:complexType> > >> </xs:element> > >> </xs:schema> > > Thank you again; that (oh so simple, and now understandable, > change) fixed the validation of the XSD itself. However, when > I try to validate an XML document against this schema, I get > a new (confusingly-reported) error: > > <!-- foo.xsd --> > <?xml version="1.0" encoding="UTF-8"?> > <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" > targetNamespace="http://www.foo.com" xmlns:foo="http://www.foo.com"> > <xs:element name="root"> > <xs:complexType> > <xs:sequence> > <xs:element ref="foo:native"/> > <xs:element > name="bjork"><xs:simpleType><xs:restriction base="xs:string" > /></xs:simpleType></xs:element> > </xs:sequence> > </xs:complexType> > </xs:element> > <xs:element name="native"/> > </xs:schema> > > <!-- test.xml --> > <?xml version="1.0" encoding="UTF-8"?> > <root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xsi:schemaLocation="http://www.foo.com foo.xsd" > xmlns="http://www.foo.com"> > <native /> > <bjork>Hello There</bjork> > </root> > > <!-- > SystemID: E:\test.xml > Location: 6:4 > Description: cvc-complex-type.2.4.a: Invalid content was > found starting with element 'bjork'. One of '{bjork}' is expected. > URL: http://www.w3.org/TR/xmlschema-1/#cvc-complex-type > --> > > > As shown above, the 'native' element in the sequence works > with the namespace, but the inline element does not. Is this > a true validation error, or is this a bug in the validator > that I need to work around by just moving all elements to be > defined at the top level? > >
Received on Friday, 14 March 2008 21:05:53 UTC