RE: XML Schema validation doesnt throw some basic errors?
Thanks for your response Kay .
1. I am using xerces 2.9 and I
can see that this version infact doesnt tell me the list of all missing
elements instead as I mentioned before, it gives me only the first occurance.
Agreed that the schema would be validated eventually if I trigger validation
again and again, but I would like to see all errors at once so that fixing
the instance document is less time consuming. What I see is that implementation
doesnt do that by default. So is there a way I can specify additional
contraints in my schema(this could be something like specifying the minimum
valid elements to be present for a instance document to be valid) to force
the schema validations to fire for every element?
For example. With the below schema
and xml, I would like to see an error saying "Element1 is missing".
Currently when I run the test class
I get only 1 error which is " Message=cvc-complex-type.2.4.a: Invalid
content was found starting with element
'Element3'. One of '{Element1}'
is expected."
Schema:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:test="http://www.my.com/test"
targetNamespace="http://www.my.com/test"
elementFormDefault="unqualified">
<xs:complexType name="DataType">
<xs:sequence>
<xs:element name="Element1" type="xs:string"/>
<xs:element name="Element2" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="RootType">
<xs:sequence>
<xs:element name="Data" type="test:DataType"
maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:element name="Root"
type="test:RootType"/>
</xs:schema>
xml:
<?xml version="1.0"?>
<test:Root xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
xmlns:test="http://www.my.com/test"
xs:schemaLocation="http://www.my.com/test
test.xsd">
<Data>
<Element3>value2</Element3>
</Data>
</test:Root>
2. Regarding the second point I mentioned,
it was a mistake at my end. I could see that an error saying <junk>
is not valid element.
Thanks
Manoj
| "Michael
Kay" <mike@...>
01/10/2007 03:38 PM
|
|
> 1) If a complex type has 10 elements which are
defined as
> mandatory in my schema. In my xml instance if I put only the
> 10th element, on validating this against the schema, I get
> only 1 error saying that 'found {10th element} while
> expecting 9th element.
> It doent say that the other 8 elements were missing. I've
> enabled full-schema-checking. I want to collect all errors at
> one go and dont want to get one error at a time. Is there a
> way to achieve this?
I would think it unlikely that any implementation will give you more that
one error message for a sequence of sibling elements that doesn't match
the
content model of the parent element. But error reporting depends entirely
on
the implementation so you would be better off asking on a product-specific
list.
> 2) If i put a junk element which is not at all defined in the
> schema just before closing my <root> tag, the schem
> validation doesnt catch this. For
> eg: in the below xml
> <root>
> <element_defined_in_schema_1>..</element_defined_in_schema_1>
> ....
> ....
> <element_not_defined_in_schema>junk</element_not_defined_in_schema>
> </root>
>
> schema validation doesnt throw an error saying that
> "element_not_defined_in_schema" is not a valid one.
>
My instinct is to say: prove it. Given that you haven't shown us the
evidence (full schema and instance document), my guess is that it's more
likely you have made a mistake than that Xerces has got this wrong.
Michael Kay
http://www.saxonica.com/
Thanks
Manoj
703-388-7496 | 2N / U12A
| "Michael
Kay" <mike@...>
01/10/2007 03:38 PM
|
|
> 1) If a complex type has 10 elements which are
defined as
> mandatory in my schema. In my xml instance if I put only the
> 10th element, on validating this against the schema, I get
> only 1 error saying that 'found {10th element} while
> expecting 9th element.
> It doent say that the other 8 elements were missing. I've
> enabled full-schema-checking. I want to collect all errors at
> one go and dont want to get one error at a time. Is there a
> way to achieve this?
I would think it unlikely that any implementation will give you more that
one error message for a sequence of sibling elements that doesn't match
the
content model of the parent element. But error reporting depends entirely
on
the implementation so you would be better off asking on a product-specific
list.
> 2) If i put a junk element which is not at all defined in the
> schema just before closing my <root> tag, the schem
> validation doesnt catch this. For
> eg: in the below xml
> <root>
> <element_defined_in_schema_1>..</element_defined_in_schema_1>
> ....
> ....
> <element_not_defined_in_schema>junk</element_not_defined_in_schema>
> </root>
>
> schema validation doesnt throw an error saying that
> "element_not_defined_in_schema" is not a valid one.
>
My instinct is to say: prove it. Given that you haven't shown us the
evidence (full schema and instance document), my guess is that it's more
likely you have made a mistake than that Xerces has got this wrong.
Michael Kay
http://www.saxonica.com/