implemented, but it requires CAS (code access security) feature. We need to
fixup this class after ongoing CAS effort works.
- You might also be interested in an improved <a href="http://codeblogs.ximian.com/blogs/benm/archives/000039.html">XmlCachingResolver</a> by Ben Maurer.
- If even one time download is not acceptable, you can use <a href="http://primates.ximian.com/~atsushi/XmlStoredResolver.cs">this one</a>.
+ You might also be interested in some improved implementations which resides
+ in Mono.Xml.Ext.dll.
- [2.0] XmlDataSourceResolver is not implemented as yet.
+ [2.0] XmlDataSourceResolver <del>is not implemented as yet</del><ins>vanished</ins>.
**** XmlNameTable
NameTable is implemented, but also needs performance improvement.
- It affects on the whole XML processing performance so much.
Optimization hackings are welcome. There is also a <a
href="http://bugzilla.ximian.com/show_bug.cgi?id=59537">bugzilla entry</a>
for this matter.
<ul>
* All OASIS conformance test passes as Microsoft does. Some
- W3C tests fail, but it looks better.
+ W3C tests fail, but it looks better than Microsoft.
* Entity expansion and its well-formedness check is incomplete.
It incorrectly allows divided content models. It incorrectly
treats its Base URI, so some dtd parse fails.
*** System.Xml.Serialization
- Lluis rules ;-)
+ Lluis Sanchez is the maintainer of this namespace (as well as
+ System.Web.Services).
- Well, in fact XmlSerializer is almost finished and is on bugfix phase.
+ XmlSerializer is almost finished and is on bugfix phase.
However, we appliciate more tests. Please try
mcs/class/System.Web.Services/Test/standalone.
You might also interested in "genxs", which enables you to create custom
- XML serializer. This is not included in Microsoft.NET.
- See <a
- href="http://primates.ximian.com/~lluis/blog/archives/000120.html">here</a>
- and manpages for details. Code files are in mcs/tools/genxs.
+ XML serializer. See "tools" section discussed later. There is also "sgen"
+ that is introduced in .NET 2.0.
- Lluis also created "sgen", that based on XmlSerializer.GenerateSerializer().
- Code files are in mcs/tools/sgen.
*** System.Xml.XPath and System.Xml.Xsl
It contains several new classes.
There are two assemblies related to System.Xml v2.0; System.Xml.dll and
- System.Data.SqlXml.dll. Most of the important part are in System.Xml.dll
- (you will find that the core part of XQuery is in System.Xml.dll; For
- example, see some classes in MS.Internal.Xml namespace), so I'll still
- spot only on System.Xml.dll.
+ System.Data.SqlXml.dll. Now that System.Data.SqlXml.dll is little important.
+ It just contains only XQueryCommand class inside System.Xml.* namespace.
+ Most of the important part are in System.Xml.dll.
Note that .NET Framework is pre-release version, so they are subject
to change. Actually many of the pre-released classes vanished.
System.Xml 2.0 contains several features such as:
<ul>
- * new XPathNavigator and XPathDocument
- * Factory method based and strongly-typed XmlReader
+ * new XPathNavigator members that supports editing XmlDocument
+ * XmlReaderSettings, XmlWriterSettings and factory methods
+ * Strongly typed XmlReader, XmlWriter and XPathNavigator.
* XML Schema design changes
* XSD Inference
- * XQuery implementation
* Well-documented and improved XmlSerializer.
- * XSLT IL generator (similar to Apache XSLTC) - it is
- internal use
+ * XSLT per-stylesheet assembly generator
</ul>
*** System.Xml 2.0
+**** Summary
+
+ <a href="http://mono.ximian.com/class-status/mono-HEAD-vs-fx-2/class-status-System.Xml.html">
+ Here</a> is the latest status of mono's System.Xml 2.0.
+
+ Major remaining tasks are:
+
+ <ul>
+ * binary content support on XmlReader
+ * XmlValueConverter
+ * XslCompiledTransform (not available in .NET FX 2.0 as yet)
+ </ul>
+
+ In general, System.Xml 2.0 bits are largely implemented.
+
+ I have some notes on things marked as "missing" in the above class status
+ page:
+
+ <ul>
+ * XmlReader, XmlTextReader and XmlValidatingReader has
+ many "missing bits", but ReadValueAsXxx() are obsoleted.
+ They were now taken its place by ReadContentAsXxx() and
+ ReadElementContentAsXxx() methods (those differences come
+ from the basis of the methods: ReadElementString() or
+ ReadString()).
+ * In System.Xml.XPath - first, new features in XPathDocument
+ are said as reverted. So I just commented out those new
+ features that had been already implemented in mono.
+ Other missing classes such as XPathEditableNavigator are
+ obsolete and will vanish at the time of 2.0 RTM.
+ * There are some security attributes. They are either way
+ not applicable as yet, and actually currently corcompare
+ ignores them. (So I already added some, but are ignored.)
+ </ul>
+
**** XmlReader/XmlWrier Factory methods
In .NET 2.0, XmlTextReader, XmlNodeReader, XmlValidatingReader are
alternative way to create XmlNodeReader). Similarly, there are
XmlWriter.Create() overloads.
- Currently, Microsoft's XmlWriter.Create() is unreliable and maybe there
- will be changes. So basically XmlWriter.Create() is supposed to be done
- after the next beta version of .NET 2.0.
+ Currently, Microsoft's XmlWriter.Create() is unstable and there will
+ be changes. So basically remaining XmlWriter.Create() is supposed to be
+ done after the next beta version of .NET 2.0.
Some of XmlReader.Create() overloads are implemented, with limited
XmlReaderSettings support.
-**** Typed XmlReader/XmlWriter
+**** Strongly typed XmlReader/XmlWriter
In .NET 2.0, XmlReader is supposed to support strongly-typed data reading.
They are based on W3C "XML Schema Datatypes" Recommendation and "XQuery 1.0
and XPath 2.0 Data Model" Working Draft.
+ Note that this W3C specification is just a Working Draft and there might
+ be incompatible changes for those strongly-typed API. For example, in the
+ latest version of the spec (as of November 2004), xs:QName is specified as
+ to have prefix, local name and namespace URI, while .NET XML classes just
+ treat it as XmlQualifiedName which does not contain prefix. So this part of
+ API might become obsolete or useless.
+
Some of XmlReader.ReadValueAsXxx() and XmlWriter.WriteValue() overloads are
implemented, though incompletely. They are based on internal XQueryConvert.
**** Sub-tree handling in XmlReader/XmlWriter/XPathNavigator
Currently XmlReader.ReadSubtree(), XmlWriter.WriteSubtree() and
- XPathNavigator.ReadSubtree() are implemented, though not so stable.
+ XPathNavigator.ReadSubtree() are implemented, though not well-tested.
They are based on Mono.Xml.SubtreeXmlReader and
Mono.Xml.XPath.XPathNavigatorReader classes.
Microsoft had to redesign System.Xml.Schema classes. We also have to
change many things.
- 1) It does not expose XmlSchemaDatatype (except for obsolete members).
- Primitive types are represented as XmlSchemaSimpleType instances (thus
- there are ElementSchemaType, AttributeSchemaType, BaseXmlSchemaType that
- replace some existing properties).
-
- 2) "XQuery 1.0 and XPath 2.0 Data Model" datatypes (such as
- xdt:dayTimeDuration) are newly supported. They are partially implemented
- yet.
+ <ul>
+ * It does not expose XmlSchemaDatatype as a type of an
+ element or an attribute (except for obsolete members).
+ Primitive types are represented as XmlSchemaSimpleType
+ instances (thus there are ElementSchemaType,
+ AttributeSchemaType, BaseXmlSchemaType that replace some
+ existing properties). Note that XmlSchemaDatatype itself is
+ not deprecated as yet.
+
+ * "XQuery 1.0 and XPath 2.0 Data Model" datatypes (such as
+ xdt:dayTimeDuration) are newly supported. They are partially
+ implemented yet.
+
+ * schema structures are now bound in parent-child
+ relationship. It is not yet implemented. With related to
+ it, there seems bunch of schema compilation bugfixes.
+
+ * XmlSchemaCollection is not used anymore to represent
+ effective set of schemas. Instead, new XmlSchemaSet class
+ is used. It should affect on schema compilation design.
+ </ul>
- 3) schema structures are now bound in parent-child relationship. It is
- not yet implemented. With related to it, there seems bunch of schema
- compilation bugfixes.
- 4) XmlSchemaCollection is not used anymore to represent effective set of
- schemas. Instead, new XmlSchemaSet class is used. It should affect on
- schema compilation design. In fact, I've implemented XmlSchemaCollection
- as more conformant to W3C specification, but there are still many changes
- required.
+**** XSD Inference
+ In .NET 2.0, there is an XML Schema inference implementation. The API (or
+ implementation design) is not cool and Microsoft will make changes in
+ later version of beta or .NET Framework.
-**** XSD Inference
+**** XmlSchemaValidator
- In .NET 2.0, there is an XML Schema inference implementation. Now that
- XmlSchemaSet is basically implemented, it can be separately done by anyone.
- Volunteer efforts are welcome here.
+ It is (somewhat) exposed XML Schema validation functionality. It enables
+ developers to get expected particles and attributes. Actually it is
+ internally used to implement XmlReader.Create() with XmlSchemaSet.
*** System.Xml.XPath 2.0
-**** Editable XPathDocument
+**** Editable XPathNavigator
- in .NET 2.0 XPathDocument is supposed to be editable. Currently we provide
- fast document table model based implementation (DTMXPathNavigator), but
- by that design change, we (and they) cannot provide fast read only
- XPathNavigator from XPathDocument anymore.
+ In System.Xml 2.0, XPathNavigator has many editing API (that used to be
+ "XPathEditableNavigator"). It enables developers to edit XmlDocument
+ (not for XPathDocument; it is read-only).
- Currently, new XPathDocument implementation is provided. The actual
- implementation is Mono.Xml.XPath.XPathDocument2, that is simple dom-like
- tree model. XPathDocument2 implements the same interfaces as XPathDocument
- does. And XPathDocument delegates most of the methods to that class (for
- example, XPathDocument.CreateEditor() calls XPathDocument2.CreateEditor()).
+ (In the early stage of .NET 2.0, XPathDocument is supposed to be editable.
+ Also, the new version of editable XPathNavigator had been already
+ implemented in Mono, as Mono.Xml.XPath.XPathEditableDocument.)
- Currently Mono.Xml.XPath.XPathDocument2 is unstable (it does not pass
- the standalone XSLT tests as well as existing DTMXPathDocument does). So
- it did not replace existing XPathDocument implementation, but you can use
- new implementation by explicitly setting environment value
- USE_XPATH_DOCUMENT_2 = yes. Currently it supports (well, is supposed
- to support) basic editor feature such as AppendChild(). Other members
- are untested (such as RejectChanges()).
-**** extra stuff - XPathEditableDocument
+*** System.Xml.Xsl 2.0
- Currently we provide another IXPathEditable; XPathEditableDocument. That is
- based on the idea that handles XmlDocument as editor target. It is
- implemented as Mono.Xml.XPath.XPathEditableDocument. We might provide this
- class as extra set (might be different mono-specific XML assembly).
+ There used to be System.Xml.Query.XsltCommand class, and it now disappeared
+ and it is said (by Microsoft developers) that there will be a class named
+ XslCompiledTransform - so it will be included in the next beta version.
+ It is regarded as the identical thing to XsltCommand.
+ XslCompiledtransform seems almost the same as System.Xml.Xsl.XslTransform,
+ but this class transforms documents twice to four times as fast as
+ XslTransform. Instead, stylesheet compilation is much slower, because
+ it generates compiled stylesheet assembly.
-**** System.Xml.XQuery and System.Xml.Xsl 2.0
- XQuery is a new face XML data manipulation language (well, at least new
- face in .NET world). It is similar to SQL, but intended to manipulate and to
- support XML. It is similar to XPath, but extended to support new features
- such as XML Schema based datatypes.
- XQuery implementation can be found mainly in System.Xml.Query and
- MS.Internal.Xml.Query namespaces. The implementation is mostly
- in System.Xml.dll. System.Data.SqlXml.dll just invokes the actual XQuery
- processor which resides in System.Xml.dll using reflection.
+** External assemblies for Mono 2.0
- XQuery implementation will be done in these steps:
+*** Mono.Xml.Ext
+
+ (<strong>IMPORTANT</strong>: There used to be System.Xml.Query.XQueryCommand
+ class that implemented XQuery, but now Microsoft dropped it for .NET 2.0.
+ So we moved them out to external assembly named Mono.Xml.Ext.dll, but I
+ haven't changed thing so much when I just extracted them. Thus, this
+ section is kept as is, and basically old stuff.)
+
+ Mono.Xml.Ext.dll contains mainly XQuery implementation, and some utility
+ classes.
+
+ XQueryCommand implements XQuery. XQuery is a new face XML document
+ manipulation language (at least new face in .NET world). It is similar
+ to XSLT, but extended to support XML Schema based datatypes (and it is
+ not XML based langauge). It is similar to XPath, but it can construct
+ XML nodes. It has no complicated template resolution, but works like
+ functional languages.
+
+ Under MS.NET, XQuery implementation is mainly in System.Xml.Query and
+ MS.Internal.Xml.* namespaces. The implementation is mostly
+ in System.Xml.dll. It is also true to our System.Xml.dll. Our XQueryCommand
+ in System.Data.SqlXml.dll just invokes the actual XQuery processor
+ (Mono.Xml.XPath2.XQueryCommandImpl) which resides in System.Xml.dll via
+ reflection.
+
+ Currently we are not implementing MS.Internal.Xml.* classes. MS
+ implementation is based on an old version of the W3C specification, and
+ our implementation is currently based on
+ <a href="http://www.w3.org/TR/2004/WD-xquery-20040723/">23 July 2004
+ version</a> (latest as of now) of the working draft.
+
+ XQuery implementation tasks are:
<ul>
* XQuery syntax parser that parses xquery string to AST
- (abstract syntax tree). -> done.
+ (abstract syntax tree). -> partly not done.
- * XQuery AST compiler into runnable query command
- (static context)
+ * XQuery AST compiler into static context -> partly not done.
* XQuery (dynamic context) runtime = XQuery expression evaluator
- + sequence iterator.
+ + sequence iterator. -> partly not done.
+
+ * XPathItem data model and (mainly) conversion support.
+ -> partly done.
* Applied expression classes for XQuery/XPath 2.0 functions and
- operators.
+ operators. -> partly done.
- * XQuery data model and (mainly) conversion support.
+ * Optimization, and design per-query assembly code generator (later)
</ul>
+ It already handles some queries, while major part implementation is missing
+ or buggy (like FLWOR, expressions for sequence type handling, built-in
+ function support etc.).
+
*** Relax NG and DSDL in Mono 1.2
http://sourceforge.net/projects/dotnetopensrc/</a>). With a few changes,
it can be used with mono.
- We also don't have multi-language based validation, namely Namespace-based
- Validation Dispatch Language (NVDL). To support unwrapping, one special
- XmlReader implementation is required (other schema validation support will
- be done by ReadSubtree()). Note that we had seen RELAX Namespace, Modular
- Namespace (MNS) and Namespace Routing Language (NRL) - that is,
- standardization effort is still ongoing (though NVDL looks mostly the same
- as NRL).
+ We don't have multi-language based validation support, namely
+ Namespace-based Validation Dispatch Language (NVDL). To support unwrapping,
+ one special XmlReader implementation is required (other schema validation
+ support can be done by ReadSubtree()). Note that we had seen RELAX
+ Namespace, Modular Namespace (MNS) and Namespace Routing Language (NRL)
+ - that is, standardization effort is still ongoing (though NVDL looks
+ mostly the same as NRL).
- In Mono 1.2, there might be improvements on Commons.Xml.Relaxng.
+ In Mono 2.0, there are some improvements:
<ul>
- * Currently RelaxngPattern.Compile() provides cheap compilation
- error information. At least it can provide error location.
- Also, the type of error should be kind of
- RelaxngGrammarException.
+ * RelaxngPattern.Compile() now provides error location.
+
+ * RelaxngValidatingReader now supports "expected label
+ collector" API; You can get name list of expected element
+ names and attribute names by simulating validation.
+
+ In Mono 2.0, there might be improvements on Commons.Xml.Relaxng.
+
+ <ul>
+ * The type of error should be kind of RelaxngGrammarException.
* Right now there is no ambiguity detection implementation that
would be useful for RelaxngPattern based xml serialization (if
there is need).
- * Because of lack of ambiguity detection, currently
- XmlMapping could not be provided. But If anyone is
- interested in such effort, integration with XmlSerializer
- would be interesting task.
+ * Because of lack of ambiguity detection, there is no way to
+ provide XmlMapping (XmlTypeMapping/XmlMemberMapping). But
+ If anyone is interested in such effort, integration with
+ XmlSerializer would be interesting task.
</ul>
See <a href="ado-net.html">ADO.NET page</a>.
- Microsoft has another inference class from XmlReader to XmlSchemaCollection
- (Microsoft.XsdInference). It may be useful, but it won't be so easy.
+ Note that xsd.exe does not support XmlSchemaInference in System.Xml 2.0.
+
+*** genxs.exe
+
+ genxs.exe is a custom XmlSerializer code generator. This is Mono exclusive
+ advantage. See <a
+ href="http://primates.ximian.com/~lluis/blog/archives/000120.html">Lluis's
+ description</a> and manpages for details. Code files are in mcs/tools/genxs.
+
+*** sgen.exe
+
+ sgen.exe is an alternative XmlSerializer code generator which is based on
+ XmlSerializer.GenerateSerializer() written by Lluis. Code files are in
+ mcs/tools/sgen.
+
+*** dtd2xsd.exe
+ It is a tiny tool that enables conversion from DTD structure to XML Schema.
+ You need an XML instance, not DTD file itself (since basic XmlTextReader has
+ no feature to read external DTD resource itself). It runs only under mono.
** Miscellaneous
Note that you still need System.dll to run mcs.
- Atsushi Eno <asushi@ximian.com>
- last updated 08/03/2004
+ Atsushi Eno <atsushi@ximian.com>
+ last updated 12/16/2004