From 8b01c4e8bbd7da013ce70e91a621ef03ad4a7531 Mon Sep 17 00:00:00 2001 From: Atsushi Eno Date: Thu, 16 Sep 2004 15:00:02 +0000 Subject: 2004-09-16 Atsushi Enomoto * BuiltInDatatype.cs, SchemaDataValueType.cs : ParseValue() for xs:AnyURI should return System.Uri. MS.NET returns XmlSchemaUri, but it is derived from System.Uri, while ours was not. svn path=/branches/mono-1-0/mcs/; revision=33964 --- .../System.Xml.Schema/BuiltInDatatype.cs | 52 ++++++++++++++++++++-- mcs/class/System.XML/System.Xml.Schema/ChangeLog | 6 +++ .../System.Xml.Schema/SchemaDataValueType.cs | 10 +++-- 3 files changed, 61 insertions(+), 7 deletions(-) diff --git a/mcs/class/System.XML/System.Xml.Schema/BuiltInDatatype.cs b/mcs/class/System.XML/System.Xml.Schema/BuiltInDatatype.cs index 8402f2d8004..4587f204179 100644 --- a/mcs/class/System.XML/System.Xml.Schema/BuiltInDatatype.cs +++ b/mcs/class/System.XML/System.Xml.Schema/BuiltInDatatype.cs @@ -1370,15 +1370,61 @@ namespace Mono.Xml.Schema public override object ParseValue (string s, XmlNameTable nameTable, XmlNamespaceManager nsmgr) { - return ParseValueType (s, nameTable, nsmgr); + return new XmlSchemaUri (Normalize (s)); } internal override ValueType ParseValueType (string s, XmlNameTable nameTable, XmlNamespaceManager nsmgr) { - return new UriValueType (Normalize (s)); + return new UriValueType ((XmlSchemaUri) ParseValue (s, nameTable, nsmgr)); } } - + + internal class XmlSchemaUri : Uri + { + public string value; + + // LAMESPEC: In this way, some strings that contain ':' might + // result in exception (MS.NET looks implemented as such). + public XmlSchemaUri (string src) + : this (src, src.IndexOf (':') > 0) + { + } + + private XmlSchemaUri (string src, bool formal) + : base (formal ? src : "anyuri:" + src, !formal) + { + value = src; + } + + public static bool operator == (XmlSchemaUri v1, XmlSchemaUri v2) + { + return v1.value == v2.value; + } + + public static bool operator != (XmlSchemaUri v1, XmlSchemaUri v2) + { + return v1.value != v2.value; + } + + public override bool Equals (object obj) + { + if (obj is XmlSchemaUri) + return (XmlSchemaUri) obj == this; + else + return false; + } + + public override int GetHashCode () + { + return value.GetHashCode (); + } + + public override string ToString () + { + return value; + } + } + // xs:duration internal class XsdDuration : XsdAnySimpleType { diff --git a/mcs/class/System.XML/System.Xml.Schema/ChangeLog b/mcs/class/System.XML/System.Xml.Schema/ChangeLog index c16cf1a9f1f..e3dc9a5679f 100755 --- a/mcs/class/System.XML/System.Xml.Schema/ChangeLog +++ b/mcs/class/System.XML/System.Xml.Schema/ChangeLog @@ -1,3 +1,9 @@ +2004-09-16 Atsushi Enomoto + + * BuiltInDatatype.cs, SchemaDataValueType.cs : + ParseValue() for xs:AnyURI should return System.Uri. MS.NET returns + XmlSchemaUri, but it is derived from System.Uri, while ours was not. + 2004-09-03 Atsushi Enomoto * XmlSchema.cs : When schema inclusion results in a recursion, just diff --git a/mcs/class/System.XML/System.Xml.Schema/SchemaDataValueType.cs b/mcs/class/System.XML/System.Xml.Schema/SchemaDataValueType.cs index c2b9305fcad..ff4031f2806 100755 --- a/mcs/class/System.XML/System.Xml.Schema/SchemaDataValueType.cs +++ b/mcs/class/System.XML/System.Xml.Schema/SchemaDataValueType.cs @@ -19,6 +19,8 @@ // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // +using Mono.Xml.Schema; + namespace System.Xml.Schema { internal struct QNameValueType @@ -97,14 +99,14 @@ namespace System.Xml.Schema internal struct UriValueType { - string value; + XmlSchemaUri value; - public UriValueType (string value) + public UriValueType (XmlSchemaUri value) { this.value = value; } - public string Value { + public XmlSchemaUri Value { get { return value; } } @@ -133,7 +135,7 @@ namespace System.Xml.Schema public override string ToString () { - return value; + return value.ToString (); } } -- cgit v1.2.3