return impl.schemas;
}
- public const string NamespaceXml = "http://www.w3.org/XML/1998/namespace";
+ public const string NamespaceXml =
+ "http://www.w3.org/XML/1998/namespace";
- public const string NamespaceXmlns = "http://www.w3.org/2000/xmlns/";
+ public const string NamespaceXmlns =
+ "http://www.w3.org/2000/xmlns/";
- public const string XdtNamespace = "http://www.w3.org/2003/11/xpath-datatypes";
+ public const string XdtNamespace =
+ "http://www.w3.org/2003/11/xpath-datatypes";
- static readonly QName QNameString = new QName ("string",
- XmlSchema.Namespace);
+ static readonly QName QNameString = new QName (
+ "string", XmlSchema.Namespace);
- static readonly QName QNameBoolean = new QName ("boolean",
- XmlSchema.Namespace);
+ static readonly QName QNameBoolean = new QName (
+ "boolean", XmlSchema.Namespace);
- static readonly QName QNameAnyType = new QName ("anyType",
- XmlSchema.Namespace);
+ static readonly QName QNameAnyType = new QName (
+ "anyType", XmlSchema.Namespace);
+
+ static readonly QName QNameByte = new QName (
+ "byte", XmlSchema.Namespace);
+
+ static readonly QName QNameUByte = new QName (
+ "unsignedByte", XmlSchema.Namespace);
+
+ static readonly QName QNameShort = new QName (
+ "short", XmlSchema.Namespace);
+
+ static readonly QName QNameUShort = new QName (
+ "unsignedShort", XmlSchema.Namespace);
+
+ static readonly QName QNameInt = new QName (
+ "int", XmlSchema.Namespace);
+
+ static readonly QName QNameUInt = new QName (
+ "unsignedInt", XmlSchema.Namespace);
+
+ static readonly QName QNameLong = new QName (
+ "long", XmlSchema.Namespace);
+
+ static readonly QName QNameULong = new QName (
+ "unsignedLong", XmlSchema.Namespace);
+
+ static readonly QName QNameDecimal = new QName (
+ "decimal", XmlSchema.Namespace);
+
+ static readonly QName QNameUDecimal = new QName (
+ "unsignedDecimal", XmlSchema.Namespace);
+
+ static readonly QName QNameDouble = new QName (
+ "double", XmlSchema.Namespace);
+
+ static readonly QName QNameFloat = new QName (
+ "float", XmlSchema.Namespace);
+
+ static readonly QName QNameDateTime = new QName (
+ "dateTime", XmlSchema.Namespace);
+
+ static readonly QName QNameDuration = new QName (
+ "duration", XmlSchema.Namespace);
XmlReader source;
XmlSchemaSet schemas;
}
else
InferElement (el, qname.Namespace, false);
+
+ // finally compile again.
+ schemas.Compile ();
}
private void IncludeXmlAttributes ()
typeName);
if (st == null) // non-primitive type => see above.
return QNameString;
- try {
- st.Datatype.ParseValue (value,
- source.NameTable,
- source as IXmlNamespaceResolver);
- // the string value was value
- return typeName;
- } catch {
- // The types were incompatible.
- // FIXME: find the base common type
- return QNameString;
- }
+ do {
+ try {
+ st.Datatype.ParseValue (value,
+ source.NameTable,
+ source as IXmlNamespaceResolver);
+ return typeName;
+ } catch {
+ st = st.BaseXmlSchemaType as XmlSchemaSimpleType;
+ typeName = st != null ? st.QualifiedName : QName.Empty;
+ }
+ } while (typeName != QName.Empty);
+ return QNameString;
}
private SOMList GetAttributes (ComplexType ct)
try {
long dec = XmlConvert.ToInt64 (value);
if (byte.MinValue <= dec && dec <= byte.MaxValue)
- return XmlSchemaType.GetBuiltInSimpleType (XmlTypeCode.UnsignedByte).QualifiedName;
+ return QNameUByte;
if (sbyte.MinValue <= dec && dec <= sbyte.MaxValue)
- return XmlSchemaType.GetBuiltInSimpleType (XmlTypeCode.Byte).QualifiedName;
+ return QNameByte;
if (ushort.MinValue <= dec && dec <= ushort.MaxValue)
- return XmlSchemaType.GetBuiltInSimpleType (XmlTypeCode.UnsignedShort).QualifiedName;
+ return QNameUShort;
if (short.MinValue <= dec && dec <= short.MaxValue)
- return XmlSchemaType.GetBuiltInSimpleType (XmlTypeCode.Short).QualifiedName;
+ return QNameShort;
if (uint.MinValue <= dec && dec <= uint.MaxValue)
- return XmlSchemaType.GetBuiltInSimpleType (XmlTypeCode.UnsignedInt).QualifiedName;
+ return QNameUInt;
if (int.MinValue <= dec && dec <= int.MaxValue)
- return XmlSchemaType.GetBuiltInSimpleType (XmlTypeCode.Int).QualifiedName;
- return XmlSchemaType.GetBuiltInSimpleType (XmlTypeCode.Long).QualifiedName;
+ return QNameInt;
+ return QNameLong;
} catch (Exception) {
}
try {
XmlConvert.ToUInt64 (value);
- return XmlSchemaType.GetBuiltInSimpleType (XmlTypeCode.UnsignedLong).QualifiedName;
+ return QNameULong;
} catch (Exception) {
}
try {
XmlConvert.ToDecimal (value);
- return XmlSchemaType.GetBuiltInSimpleType (XmlTypeCode.Decimal).QualifiedName;
+ return QNameDecimal;
} catch (Exception) {
}
try {
double dbl = XmlConvert.ToDouble (value);
if (float.MinValue <= dbl &&
dbl <= float.MaxValue)
- return XmlSchemaType.GetBuiltInSimpleType (XmlTypeCode.Float).QualifiedName;
+ return QNameFloat;
else
- return XmlSchemaType.GetBuiltInSimpleType (XmlTypeCode.Double).QualifiedName;
+ return QNameDouble;
} catch (Exception) {
}
try {
// FIXME: also try DateTimeSerializationMode
// and gYearMonth
XmlConvert.ToDateTime (value);
- return XmlSchemaType.GetBuiltInSimpleType (XmlTypeCode.DateTime).QualifiedName;
+ return QNameDateTime;
} catch (Exception) {
}
try {
XmlConvert.ToTimeSpan (value);
- return XmlSchemaType.GetBuiltInSimpleType (XmlTypeCode.Duration).QualifiedName;
+ return QNameDuration;
} catch (Exception) {
}