Flush
[mono.git] / web / xml-classes
index c5fc8a3a66490cf0bb6d8251204edd4212e2e492..537aca2aa98e4fd8d4d178176bec691b71043b83 100755 (executable)
@@ -2,15 +2,15 @@
 
 ** Abstract
 
 
 ** Abstract
 
-  XML library is used by several field of Mono such as ADO.NET and XML 
-  Digital Signature (xmldsig). Here I write about System.Xml.dll and 
-  related tools. This page won't include any classes which are in other 
+  XML library is used by several areas of Mono such as ADO.NET and XML 
+  Digital Signature (xmldsig). Here I write about System.Xml.dll and
+  related tools. This page won't include any classes which are in other
   assemblies such as XmlDataDocument.
 
   assemblies such as XmlDataDocument.
 
-  Note that current corlib has its own XML parser class named Mono.Xml.MiniParser.
+  Note that current corlib has its own XML parser class (Mono.Xml.MiniParser).
 
 
-  Basically System.XML.dll feature has finished, or almost finished, so
-  I write this page mainly for bugs and improvement hints.
+  Basically System.XML.dll feature is almost finished, so I write this
+  document mainly for bugs and improvement hints.
 
 
 ** System.Xml namespace
 
 
 ** System.Xml namespace
 
 *** Document Object Model (Core)
 
 
 *** Document Object Model (Core)
 
-  DOM feature has already implemented. There is still missing feature.
-
-       <ul>
-       * ID constraint support is problematic because W3C DOM does not specify
-         handling of ID attributes into non-adapted element. (MS.NET also 
-         looks incomplete in this area).
-
-       * I think, event feature is not fully tested. There are no concrete
-         desctiption on which events are risen, so we have to do some
-         experiment on MS.NET.
-       </ul>
+  DOM implementation has finished and our DOM implementation scores better
+  than MS.NET as to the NIST DOM test results (it is ported by Mainsoft
+  hackers and in our unit tests).
 
 *** Xml Writer
 
   Here XmlWriter almost equals to XmlTextWriter. If you want to see
 
 *** Xml Writer
 
   Here XmlWriter almost equals to XmlTextWriter. If you want to see
-  another implementation, check XmlNodeWriter.cs used in monodoc.
+  another implementation, check XmlNodeWriter.cs and DTMXPathDocumentWriter.cs
+  in System.XML sources.
 
 
-  XmlTextWriter is completed. However, it looks nearly twice as slow as 
-  MS.NET (I tried 1.1)
+  XmlTextWriter is completed, though it looks a bit slower than MS.NET (I
+  tried 1.1).
 
 *** XmlResolver
 
 
 *** XmlResolver
 
   then it uses XmlUrlResolver. XmlResolver is used to parse external DTD,
   importing XSL stylesheets and schemas etc.
 
   then it uses XmlUrlResolver. XmlResolver is used to parse external DTD,
   importing XSL stylesheets and schemas etc.
 
-  However, XmlUrlResolver is still buggy (mainly because System.Uri is also
-  incomplete yet) and this results in several loading error.
-
   XmlSecureResolver, which is introduced in MS .NET Framework 1.1 is basically
   implemented, but it requires CAS (code access security) feature. We need to
   fixup this class after ongoing CAS effort works.
 
   XmlSecureResolver, which is introduced in MS .NET Framework 1.1 is basically
   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>.
 
 *** XmlNameTable
 
 
 *** XmlNameTable
 
-  XmlNameTable itself is implemented. However, it should be actually used in
-  several classes. Currently it makes sense if compared names are both in
-  the table, but if it is obvious that compared names are both in this table,
-  it should be simply compared using ReferenceEquals() (if these names are
-  different, the comparison is still inefficient yet).
+  NameTable itself is implemented. It should be actually used in several
+  classes. Currently it makes sense if compared names are both in the table,
+  they should be simply compared using ReferenceEquals(). We have done where
+  it seems possible e.g. in XmlNamespaceManager (in .NET 2.0 methods; if the
+  build is not NET_2_0, it will be used internally).
 
 
+  NameTable also needs performance improvement. Optimization hackings are
+  welcome.
 
 *** Xml Stream Reader
 
 
 *** Xml Stream Reader
 
   XmlInputStream class. This may disappear since XmlStreamReader is enough to
   handle this problem).
 
   XmlInputStream class. This may disappear since XmlStreamReader is enough to
   handle this problem).
 
-  However, there are some problems lies in these classes on reading network
-  stream (especially on Linux). This should be fixed soon.
-
+  However, there used to be some problems in these classes on reading network
+  stream (especially on Linux). However, this might be already fixed with
+  some network stream bugfixes.
 
 *** XML Reader
 
   XmlTextReader, XmlNodeReader and XmlValidatingReader are almost finished.
 
 
 *** XML Reader
 
   XmlTextReader, XmlNodeReader and XmlValidatingReader are almost finished.
 
-       - Most of the OASIS conformance test passes as Microsoft does, but
-         about W3C tests, it is not perfect.
-
-       - I won't add any XDR support on XmlValidatingReader. (I haven't
-         ever seen XDR used other than Microsoft's BizTalk Server 2000,
-         and Now they have 2003 with XML Schema support)
+       <ul>
+               * All OASIS conformance test passes as Microsoft does. Some 
+                 W3C tests fail, but it looks better.
+               * Entity expansion and its well-formedness check is incomplete.
+                 It incorrectly allows divided content models. It incorrectly
+                 treats its Base URI, so some dtd fails.
+               * I won't add any XDR support on XmlValidatingReader. (I haven't
+                 ever seen XDR used other than Microsoft's BizTalk Server 2000,
+                 and Now they have 2002 with XML Schema support)
+       </ul>
 
   XmlTextReader and XmlValidatingReader should be faster than now. Currently
   XmlTextReader looks nearly twice as slow as MS.NET, and XmlValidatingReader
 
   XmlTextReader and XmlValidatingReader should be faster than now. Currently
   XmlTextReader looks nearly twice as slow as MS.NET, and XmlValidatingReader
   as normal XML parser does. For example, Mono allows non-deterministic DTD.
 
   Another advantage of this XmlValidatingReader is support for *any* XmlReader.
   as normal XML parser does. For example, Mono allows non-deterministic DTD.
 
   Another advantage of this XmlValidatingReader is support for *any* XmlReader.
-  Microsoft supports only XmlTextReader.
-
-  I added extra support interface named "IHasXmlParserContext", which is
-  considered in XmlValidatingReader.ResolveEntity(). Microsoft failed to 
-  design XmlReader to support pluggable use of XmlReader (i.e. wrapping use
-  of other XmlReader) since XmlParserContext is required to support both
-  entity resolution and namespace manager. (In .NET 1.2, Microsoft also 
-  supported similar to IHasXmlParserContext, named IXmlNamespaceResolver,
-  but it still does not provide any DTD information.)
+  Microsoft supports only XmlTextReader (this bug will be fixed in VS 2005,
+  taking shape of XmlFactory).
+
+  <del>I added extra support interface named "IHasXmlParserContext", which is
+  considered in XmlValidatingReader.ResolveEntity(). </del><ins>This is now
+  made as internal interface.</ins> Microsoft failed to design XmlReader
+  so that XmlReader cannot be subtree-pluggable (i.e. wrapping use of other
+  XmlReader) since XmlParserContext shoud be supplied for DTD information
+  support (e.g. entity references cannot be expanded) and namespace manager.
+  (In .NET 2.0, Microsoft also supported similar to IHasXmlParserContext,
+  named IXmlNamespaceResolver, but it still does not provide DTD information.)
 
   We also have RELAX NG validating reader. See mcs/class/Commons.Xml.Relaxng.
 
 
 ** System.Xml.Schema
 
 
   We also have RELAX NG validating reader. See mcs/class/Commons.Xml.Relaxng.
 
 
 ** System.Xml.Schema
 
-*** Schema Object Model
+*** Summary
 
 
-  Basically it is implemented. Some features still needs to fix:
+  Basically it is completed. We can compile complex and simple types, refer to
+  external schemas, extend or restrict other types, or use substitution groups.
+  You can test how current schema validation engine is complete (incomplete)
+  by using standalone test module
+  (see mcs/class/System.XML/Test/System.Xml.Schema/standalone_tests).
+  At least in my box, msxsdtest fails only 30 cases with bugfixed catalog -
+  this score is better than that of Microsoft implementation.
 
 
-       - Complete facet support. Currently some of them is missing. Recently
-         David Sheldon is doing several fixes on them.
+*** Schema Object Model
 
 
-       - Complete derivation by restriction (DBR) support. Especially
-         substitution group won't work with it (However, I won't recommend
-         both substitution group and DBR, regardless of this incompleteness.)
+  Completed, except for some things to be fixed:
 
 
-  Some bugs are remaining, but as far as I tried W3C XML Schema test suite 
-  with bugfixes (of test suite), only 69 out of 7581 has failed. With my test
-  suite fix, MS.NET failed 48 cases.
+       <ul>
+               * Complete facet support. Currently some of them is missing.
+                 Recently David Sheldon is doing several fixes on them.
+               * ContentTypeParticle for pointless xs:choice is incomplete
+                 (It is because fixing this arose another bugs in 
+                 compilation. Interestingly, MS.NET also fails around here,
+                 so it might be nature of ContentTypeParticle design)
+               * Some derivation by restriction (DBR) handling is incorrect.
+       </ul>
 
 *** Validating Reader
 
   XML Schema validation feature is (currently) implemented on
   Mono.Xml.Schema.XsdValidatingReader, which is internally used in
 
 *** Validating Reader
 
   XML Schema validation feature is (currently) implemented on
   Mono.Xml.Schema.XsdValidatingReader, which is internally used in
-  XmlValidatingReader. 
-  
+  XmlValidatingReader.
+
   Basically this is implemented and actually its feature is almost complete,
   but I have only did validation feature testing. So we have to write more 
   tests on properties, methods, and events (validation errors).
   Basically this is implemented and actually its feature is almost complete,
   but I have only did validation feature testing. So we have to write more 
   tests on properties, methods, and events (validation errors).
   Lluis rules ;-)
 
   Well, in fact XmlSerializer is almost finished and is on bugfix phase.
   Lluis rules ;-)
 
   Well, in fact XmlSerializer is almost finished and is on bugfix phase.
-  However, more tests are required especially schema import and export
-  feature. Please try xsd.exe to create classes from schema, or schema
-  from class. And if any problems were found, please file it to bugzilla.
 
 
+  However, we appliciate more tests. Please try 
+  
+       <ul>
+               * System.Web.Services to invoke SOAP services.
+               * xsd.exe and wsdl.exe to create classes.
+       </ul>
 
 
-** System.Xml.XPath and System.Xml.Xsl
+  And if any problems were found, please file it to bugzilla.
+
+  Lluis also built interesting standalone test system placed under
+  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.
 
 
-  There are two implementations for XSLT. One (and historical) implementation
-  is based on libxslt. Now we uses fully implemented managed XSLT.
 
 
-  Putting aside bug fixes, we have to support:
+** System.Xml.XPath and System.Xml.Xsl
+
+  There are two XSLT implementations. One and historical implementation is
+  based on libxslt (aka Unmanaged XSLT). Now we uses fully implemented and
+  managed XSLT by default. To use Unmanaged XSLT, set MONO_UNMANAGED_XSLT
+  environment value (any value is acceptable).
 
 
-       - embedded script (such as VB, C#, JScript). So some packages like 
-         latest NAnt (for MS.NET) won't be compiled.
+  As for Managed XSLT, we support msxsl:script.
 
   It would be nice if we can support <a href="http://www.exslt.org/">EXSLT</a>.
 
   It would be nice if we can support <a href="http://www.exslt.org/">EXSLT</a>.
-  <a href="http://msdn.microsoft.com/WebServices/default.aspx?pull=/library/en-us/dnexxml/html/xml05192003.asp">Microsoft has already done it</a>, but it
-  is not good code since it depends on internal concrete derivatives of
-  XPathNodeIterator classes. In general, .NET's "extension objects" is not
-  usable to return node-sets, so if we support EXSLT, it has to be done
-  internally inside our System.XML.dll. Volunteers are welcome.
+  <a href="http://msdn.microsoft.com/WebServices/default.aspx?pull=/library/en-us/dnexxml/html/xml05192003.asp">Microsoft has tried to do some of them</a>, 
+  but it is not good code since it depends on internal concrete derivatives of
+  XPathNodeIterator classes.
 
 
-  Our managed XSLT implementation is still inefficient. XslTransform.Load()
-  and .Transform() looks three times slower (However it depends on 
-  XmlTextReader which is also slow, so we are starting optimization from 
-  that class, not XSLT itself). These number are only for specific cases,
-  and there might be more critical point on XSLT engine (mainly
-  XPathNodeIterator).
+  In general, .NET's "extension objects" (including msxsl:script) is not
+  useful to return node-sets (MS XSLT implementation rejects just overriden
+  XPathNodeIterator, but accepts only their hidden classes. And are the same
+  in Mono though classes are different), so if we support EXSLT, it has to 
+  be done inside our System.XML.dll. Volunteers are welcome.
+
+  Our managed XSLT implementation is slower than MS XSLT for some kind of
+  stylesheets, and faster for some.
+
+
+** System.Xml and ADO.NET v2.0
+
+  Microsoft released the second beta version of .NET Framework 2.0 with
+  Visual Studio 2005 alpha version. They are only available on MSDN
+  _subscriber_ download (i.e. it is not publicly downloadable yet). It
+  contains several new classes.
+
+  There are two assemblies related to System.Xml v2.0; System.Xml.dll and
+  System.Data.SqlXml.dll (here I treat sqlxml.dll as part of System.Xml v2.0,
+  but note that it is also one of the ADO.NET 2.0 feature). There are several
+  namespaces such as MS.Internal.Xml and System.Xml. Note that .NET Framework
+  is pre-release version so that they are subject to change.
+
+  System.Xml 2.0 contains several features such as:
+
+  <ul>
+               * new XPathNavigator and XPathDocument
+               * XML Query
+               * XmlAdapter
+               * XSLT IL generator (similar to Apache XSLTC) - it is 
+                 internal use
+  </ul>
+
+  Tim Coleman started ADO.NET 2.0 related works. Currently I have no plan to
+  implement System.Xml v2.0 classes and won't touch with them immediately, 
+  but will start in some months. If any of you wants to try this frontier,
+  we welcome your effort.
+
+*** New XPathNavigator
+
+  System.Xml v2.0 implementation will be started from new XPathDocument and
+  XPathNavigator implementations (they are called as XPathDocument2 and 
+  XPathNavigator2, and they were very different from existing one). First,
+  its document structure and basic navigation feature will be implemented.
+  And next, XPath2 engine should be implemented (XPathNavigator2 looks very
+  different from XPathNavigator).
+
+  There are some trivial tasks such as schema validation (we have
+  <a href="http://www24.brinkster.com/ginga/XPathDocumentReader.cs.txt">
+  XPathDocumentReader</a> that just wraps XPathNavigator, and our
+  XmlValidatingReader can accept any XmlReader).
+
+*** XML Query
+
+  XML Query 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 XSLT, but extended to support new features
+  such as XML Schema based datatypes.
+
+  XML Query implementation can be found mainly in System.Xml.Query and 
+  MS.Internal.Xml.Query namespaces. Note that they are in 
+  System.Data.SqlXml.dll.
+
+  MSDN documentation says that there are two kind of API for XML Query: High
+  Level API and Low Level API. At the time of this beta version, the Low Level
+  API is described not released yet (though it may be MS.Internal.Xml.*
+  classes). However, to implement the High Level API, the Low Level API will 
+  be used. They looks to have interesting class structures in MS.Internal.Xml 
+  related stuff, so it would be nice (and I will) start to learn about them.
+
+  They looks to have IL generator classes, but it might be difficult to
+  start from them.
+
+*** System.Data.Mapping
+
+  System.Data.Mapping and System.Data.Mapping.RelationalSchema are the
+  namespaces for mapping support between database and xml. This is at
+  stubbing phase (incomplete as yet).
+
+*** XmlAdapter
+
+  XmlAdapter is used to support XML based query and update using (new)
+  XPathDocument and XPathNavigator. This class is designed to synthesize
+  ADO.NET and System.Xml. It connects to databases, and querys data in XML
+  shape into XPathDocument, using Mapping schema above. This must be
+  done after several classes such as XPathDocument and MappingSchema.
 
 
 ** Miscellaneous Class Libraries
 
 *** RELAX NG
 
 
 
 ** Miscellaneous Class Libraries
 
 *** RELAX NG
 
-  I implemented an experimental RelaxngValidatingReader. It is far from
-  complete, especially simplification stuff (see RELAX NG spec chapter 4),
-  some constraints (in chapter 7), and datatype handling.
+  I implemented an experimental RelaxngValidatingReader. It is still not
+  complete, for example some simplification stuff (see RELAX NG spec 
+  chapter 4; especially 4.17-19) and some constraints (especially 7.3).
+  See mcs/class/Commons.Xml.Relaxng/README for details.
+
+  It supports custom datatype handling. Right now, you can use XML schema
+  datatypes ( http://www.w3.org/2001/XMLSchema-datatypes ) as well
+  as RELAX NG default datatypes (as used in relaxng.rng).
 
 
-  I am planning improvements (starts with renaming classes, giving more
-  kind error messages, supporting compact syntax and even object mapping),
-  but it is still my wishlist.
+  In Commons.Xml.Relaxng.dll, there is also RELAX NG Compact Syntax support.
+  See Commons.Xml.Relaxng.Rnc.RncParser class.
+
+  I am planning improvements (giving more kind error messages, and even
+  object mapping), but it won't be come true until Mono 1.0 release.
 
 
 ** Tools
 
 *** xsd.exe
 
 
 
 ** Tools
 
 *** xsd.exe
 
-  xsd.exe is used to:
+  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.
 
 
-       1) generate classes source code from schema
-       2) generate DataSet classes source code from schema
-       3) generate schema documents from assembly (classes)
-       4) infer schema documents from XML instance
-       5) convert XDR into XSD
 
 
-  As descrived above, I won't work on 5) XDR stuff.
+** Miscellaneous
 
 
-  Current xsd.exe supports 1) and 3) 
+*** Mutual assembly dependency
 
 
-  As for 2) and 4), Currently there is no works on them. (This inference
-  feature is rather DataSet specific than general purpose use.)
+  Sometimes I hear complain about System.dll and System.Xml.dll mutual
+  dependency: System.dll references to System.Xml.dll (e.g. 
+  System.Configuration.ConfigXmlDocument extended from XmlDocument), while 
+  System.Xml.dll vice versa (e.g. XmlUrlResolver.ResolveUri takes System.Uri).
+  Since they are in public method signatures, so at least we cannot get rid
+  of these mutual references.
 
 
-  Microsoft has another inference class from XmlReader to XmlSchemaCollection.
-  It may be useful, but it won't be so easy.
+  Nowadays System.Xml.dll is built using incomplete System.dll (lacking
+  System.Xml dependent classes such as ConfigXmlDocument). Full System.dll
+  is built after System.Xml.dll is done.
 
 
-  any volunteers?
+  Note that you still need System.dll to run mcs.