Hi,
> -----Ursprüngliche Nachricht-----
> Von: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Im
>
> I'm trying libxml on a very simple same file and got some rather
> conflicting result. I'm still learning schema and libxml so any tip is
> much appreciated.
>
> Thanks.
>
> result:
> correct/test.xml:2: element sample: Schemas validity error : Element
> '{http://www.test.com}sample', attribute 'abc': The attribute 'abc' is
> not allowed.
> correct/test.xml:2: element sample: Schemas validity error : Element
> '{http://www.test.com}sample': The attribute
> '{http://www.test.com}abc' is required but missing.
> correct/test.xml fails to validate
This looks like a conflict at first glance, but it isn't.
The first error reports: "The attribute 'abc' is not allowed."
Thus, an attribute "abc" in *no* namespace in not allowed.
The second error reports: "The attribute '{http://www.test.com}abc'
is required but missing."
Thus, an attribute "abc" in the namespace "http://www.test.com" is
defined to be required, but is missing.
> xsd:
> <?xml version="1.0" encoding="UTF-8" ?>
> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
> targetNamespace="http://www.test.com" elementFormDefault="qualified"
> xmlns ="http://www.test.com">
>
> <xs:attribute name="abc" type="xs:integer"/>
This is a global attribute declaration. Global element/attribute
declarations declare the element/attribute to be in the
*targetNamespace". So you declare the attribute "abc" to be
in the namespace "http://www.text.com".
> <xs:element name="sample">
> <xs:complexType>
> <xs:sequence>
> <xs:element name="test"/>
> </xs:sequence>
> <xs:attribute ref="abc" use="required"/>
> </xs:complexType>
> </xs:element>
> </xs:schema>
>
>
> xml:
> <?xml version="1.0" encoding="ISO-8859-1"?>
> <sample xmlns="http://www.test.com"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" abc="23">
> <test/>
> </sample>
The attribute "abc" in this instance document is in *no* namespace;
thus not the one you actually declared in the schema.
I hope this clarifies the error reports.
To fix your scenario, either you declare a *local* attribute in
the schema (you also may want to read about the implications of
"attributeFormDefault"):
<xs:complexType>
...
<xs:attribute name="abc" use="required"/>
</xs:complexType>
... - this way the attribute "abc" will be in no namespace -,
or you fix your instance document by putting the attribute
"abc" into the declared namespace:
<test:sample xmlns:test="http://www.test.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" test:abc="23">
Regards,
Kasimier
_______________________________________________
xml mailing list, project page http://xmlsoft.org/
[email protected]
http://mail.gnome.org/mailman/listinfo/xml