[Mono-bugs] [Bug 595947] New: XML Schema inheritance and validation bugs

bugzilla_noreply at novell.com bugzilla_noreply at novell.com
Mon Apr 12 19:11:10 EDT 2010


http://bugzilla.novell.com/show_bug.cgi?id=595947

http://bugzilla.novell.com/show_bug.cgi?id=595947#c0


           Summary: XML Schema inheritance and validation bugs
    Classification: Mono
           Product: Mono: Class Libraries
           Version: 2.6.x
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: Critical
          Priority: P5 - None
         Component: Sys.XML
        AssignedTo: atsushi at ximian.com
        ReportedBy: Han.Wang at morningstar.com
         QAContact: mono-bugs at lists.ximian.com
          Found By: Component Test
           Blocker: ---


Created an attachment (id=353905)
 --> (http://bugzilla.novell.com/attachment.cgi?id=353905)
Schema.xsd

Description of Problem:

The following sample code reproduces two bugs of schema validation
1. Attribute is not inherited  (TEST 1.* and 2.*)
2. Facet of elements is not validated (TEST 3.*)

I actually used some other similar methods to validate, but got the same
result.  I guess they use the same private method for validation.

Explanation of the test results are in the end of this report.

Please fix, thanks!!!



Steps to reproduce the problem:

Schema.xsd:
----------------------------------------------------

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
    <xs:simpleType name="MyString">
        <xs:restriction base="xs:string">
            <xs:maxLength value="10" />
        </xs:restriction>
    </xs:simpleType>
    <xs:complexType name="MyType">
        <xs:simpleContent>
            <xs:extension base="MyString">
                <xs:attribute name="Id" type="MyString" use="required" />
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <xs:element name="MyTest1">
        <xs:complexType>
            <xs:simpleContent>
                <xs:restriction base="MyType">
                    <xs:maxLength value="10" />
                </xs:restriction>
            </xs:simpleContent>
        </xs:complexType>
    </xs:element>
    <xs:element name="MyTest2">
        <xs:complexType>
            <xs:simpleContent>
                <xs:restriction base="MyType">
                    <xs:attribute name="Id" type="MyString" use="required" />
                </xs:restriction>
            </xs:simpleContent>
        </xs:complexType>
    </xs:element>
    <xs:element name="MyTest3">
        <xs:complexType>
            <xs:simpleContent>
                <xs:restriction base="MyType">
                    <xs:maxLength value="10" />
                    <xs:attribute name="Id" type="MyString" use="required" />
                </xs:restriction>
            </xs:simpleContent>
        </xs:complexType>
    </xs:element>
</xs:schema>


----------------------------------------------------

CS code:

----------------------------------------------------


using System;
using System.IO;
using System.Xml;
using System.Xml.Schema;

namespace SchemaValidationBugs
{
    class Program
    {
        public static void Main(string[] args)
        {
            try
                      {
                XmlReaderSettings settings = new XmlReaderSettings();
                settings.Schemas.Add(null,"Schema.xsd");
                settings.ValidationType = ValidationType.Schema;
                settings.Schemas.Compile();

                Validate("TEST 1.1",1,"0123456789","0123456789",settings);
                Validate("TEST 1.2",1,"0123456789***","0123456789",settings);
                Validate("TEST 1.3",1,"0123456789","0123456789***",settings);

                Validate("TEST 2.1",2,"0123456789","0123456789",settings);
                Validate("TEST 2.2",2,"0123456789***","0123456789",settings);
                Validate("TEST 2.3",2,"0123456789","0123456789***",settings);

                Validate("TEST 3.1",3,"0123456789","0123456789",settings);
                Validate("TEST 3.2",3,"0123456789***","0123456789",settings);
                Validate("TEST 3.3",3,"0123456789","0123456789***",settings);
                       }
            catch(Exception e)
            {
                Console.WriteLine(e.ToString());
            }
        }

        private static void Validate(string testName, int testNumber, string
idValue, string elementValue, XmlReaderSettings settings)
        {
            string content=string.Format("<MyTest{0}
Id=\"{1}\">{2}</MyTest{0}>",testNumber,idValue,elementValue);
            Console.WriteLine("----------   "+testName+"   ----------");
            Console.WriteLine("Validating: "+content);
            try
            {
                XmlReader reader = XmlReader.Create(new StringReader(content),
settings);
                XmlDocument document = new XmlDocument();
                document.Load(reader);
                document.Validate(null);
                Console.WriteLine("No error found");
            }
            catch(Exception e)
            {
                Console.WriteLine("Validation failed: "+e.Message);
            }
            Console.WriteLine("");
        }


    }
}



----------------------------------------------------



Actual Results:


----------   TEST 1.1   ----------
Validating: <MyTest1 Id="0123456789">0123456789</MyTest1>
Validation failed: XmlSchema error: Attribute declaration was not found for Id
XML  Line 1, Position 10.

----------   TEST 1.2   ----------
Validating: <MyTest1 Id="0123456789***">0123456789</MyTest1>
Validation failed: XmlSchema error: Attribute declaration was not found for Id
XML  Line 1, Position 10.

----------   TEST 1.3   ----------
Validating: <MyTest1 Id="0123456789">0123456789***</MyTest1>
Validation failed: XmlSchema error: Attribute declaration was not found for Id
XML  Line 1, Position 10.

----------   TEST 2.1   ----------
Validating: <MyTest2 Id="0123456789">0123456789</MyTest2>
No error found

----------   TEST 2.2   ----------
Validating: <MyTest2 Id="0123456789***">0123456789</MyTest2>
Validation failed: XmlSchema error: Specified value was invalid against the
facets. XML  Line 1, Position 10.

----------   TEST 2.3   ----------
Validating: <MyTest2 Id="0123456789">0123456789***</MyTest2>
No error found

----------   TEST 3.1   ----------
Validating: <MyTest3 Id="0123456789">0123456789</MyTest3>
No error found

----------   TEST 3.2   ----------
Validating: <MyTest3 Id="0123456789***">0123456789</MyTest3>
Validation failed: XmlSchema error: Specified value was invalid against the
facets. XML  Line 1, Position 10.

----------   TEST 3.3   ----------
Validating: <MyTest3 Id="0123456789">0123456789***</MyTest3>
No error found





Expected Results:


----------   TEST 1.1   ----------
Validating: <MyTest1 Id="0123456789">0123456789</MyTest1>
No error found

----------   TEST 1.2   ----------
Validating: <MyTest1 Id="0123456789***">0123456789</MyTest1>
Validation failed: The 'Id' attribute is invalid - The value '0123456789***' is
invalid according to its datatype 'MyString' - The actual length is greater
than the MaxLength value.

----------   TEST 1.3   ----------
Validating: <MyTest1 Id="0123456789">0123456789***</MyTest1>
Validation failed: The 'MyTest1' element is invalid - The value '0123456789***'
is invalid according to its datatype 'String' - The actual length is greater
than the MaxLength value.

----------   TEST 2.1   ----------
Validating: <MyTest2 Id="0123456789">0123456789</MyTest2>
No error found

----------   TEST 2.2   ----------
Validating: <MyTest2 Id="0123456789***">0123456789</MyTest2>
Validation failed: The 'Id' attribute is invalid - The value '0123456789***' is
invalid according to its datatype 'MyString' - The actual length is greater
than the MaxLength value.

----------   TEST 2.3   ----------
Validating: <MyTest2 Id="0123456789">0123456789***</MyTest2>
Validation failed: The 'MyTest2' element is invalid - The value '0123456789***'
is invalid according to its datatype 'String' - The actual length is greater
than the MaxLength value.

----------   TEST 3.1   ----------
Validating: <MyTest3 Id="0123456789">0123456789</MyTest3>
No error found

----------   TEST 3.2   ----------
Validating: <MyTest3 Id="0123456789***">0123456789</MyTest3>
Validation failed: The 'Id' attribute is invalid - The value '0123456789***' is
invalid according to its datatype 'MyString' - The actual length is greater
than the MaxLength value.

----------   TEST 3.3   ----------
Validating: <MyTest3 Id="0123456789">0123456789***</MyTest3>
Validation failed: The 'MyTest3' element is invalid - The value '0123456789***'
is invalid according to its datatype 'String' - The actual length is greater
than the MaxLength value.





How often does this happen? 


ALWAYS!!!!!!!!!!




Additional Information:

Test 1.*: Id is defined by its parent, but mono didn't find the definition.
Test 3.2: Mono didn't validate the facet maxLength for the element, but it
actually validate maxLength for the attribute (Test 2.2/3.2)

-- 
Configure bugmail: http://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.


More information about the mono-bugs mailing list