[
Lists Home |
Date Index |
Thread Index
]
- To: "Xml-Dev@Lists. Xml. Org (E-mail)" <xml-dev@lists.xml.org>
- Subject: RE: [xml-dev] Internal entities removed from XML?
- From: "Doug Ransom" <Doug.Ransom@pwrm.com>
- Date: Wed, 18 Dec 2002 13:15:35 -0800
- Thread-index: AcKmRydAKQBNNgApSCi3SgsnQww4/wAcSVPg
- Thread-topic: [xml-dev] Internal entities removed from XML?
I want to be clear. I am not saying the .net platform doesn't provide mechanisms to load XML 1.0 files that have internal entity references; I believe the easiest mechanisms to load xml documents, and therefore the one most developers will employ in their code unless they have a reason not to, will not expand entity references. Therefore, although the .net platform supports entity references, the bulk of code written for .net intended to parse any valid XML file for the application will likley not support this case, because the default case is to support only XML files with no DOCTYPE entities. The default mechansims of loading XML in .net only load a subset of XML 1.0 files. To load any valid XML 1.0 document, you have to go out of your way. Its not super-hard, but many developers are not going to realize this and not test with documents with entity references. Their products will tend not to fail until they hit the field. As a result, people will be loathe to include entity references in their documents knowing most .net programs are not designed for XML 1.0, but a subset of XML 1.0 that exludes entity references.
Below is text I have pasted from an XML file which will not load with System.Xml.XmlDocument(filename) nor
with System.Xml.Xsl.XslTransform(filename), although COM and java based code (like saxon and msxsl) will load and process it document fine.
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE x:stylesheet [
<!ENTITY xsl "http://www.w3.org/1999/XSL/Transform">
<!ENTITY bi "http://rddl.xmlinside.net/PowerMeasurement/data/StampLog/Archive/1/">
<!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<!ENTITY rss "http://purl.org/rss/1.0/">
<!ENTITY dc "http://purl.org/dc/elements/1.1/">
<!ENTITY syn "http://purl.org/rss/1.0/modules/syndication/">
<!ENTITY sla "/bi:StampLogArchive">
]>
<!--pass in the name of the person and the uri to their file-->
<x:stylesheet version="1.0" xmlns:x="&xsl;" xmlns:bi="&bi;" xmlns:rdf="&rdf;"
xmlns:dc="&dc;" xmlns:syn="&syn;" >
<x:output indent="yes" encoding="UTF-8"/>
<x:variable name="owner" select="&sla;/@user"/>
<x:variable name="owner-uri" select="&sla;/@archiveHome"/>
<x:template match="/">
<rdf:RDF xmlns="&rss;">
<channel >
<x:attribute name="about" namespace="&rdf;">
<x:value-of select="$owner-uri"/>
</x:attribute>
<title>Log for <x:value-of select = "$owner" /> </title>
<link><x:value-of select="$owner-uri"/> </link>
<description><![CDATA[Power Measurement R&D Log]]></description>
<dc:rights>© 2002 Power Measurement. Propietary and Confidential.</dc:rights>
<syn:UpdatePeriod>hourly</syn:UpdatePeriod>
<syn:UpdateFrequency>1</syn:UpdateFrequency>
<syn:UpdateBase>0000-00-00T12:00+00:00</syn:UpdateBase>
<items>
<rdf:Seq>
<x:apply-templates select="/bi:StampLogArchive/bi:LogEntry/@ID" />
</rdf:Seq>
</items></channel>
<x:apply-templates select="bi:StampLogArchive/bi:LogEntry"/>
</rdf:RDF>
</x:template>
<x:template name="createEntryURI">
<x:param name="fragment"></x:param>
<x:value-of select='concat($owner-uri,"#",string($fragment))' />
</x:template>
<x:template match="@ID" >
<x:variable name="uri">
<x:call-template name="createEntryURI">
<x:with-param name="fragment" select="."/>
</x:call-template>
</x:variable>
<li xmlns="&rdf;" rdf:resource="{$uri}"/>
</x:template>
<x:template match="bi:LogEntry" >
<x:variable name="uri">
<x:call-template name="createEntryURI">
<x:with-param name="fragment" select="@ID"/>
</x:call-template>
</x:variable>
<item xmlns="&rss;" rdf:about="{$uri}">
<title><x:value-of select="bi:Subject"/></title>
<link><x:value-of select="$uri"/></link>
<dc:date><x:value-of select="@updateUT"/></dc:date>
<dc:description>
<x:value-of select="bi:Content"/>
</dc:description>
<dc:subject><x:value-of select="bi:Subject"/></dc:subject>
</item>
</x:template>
</x:stylesheet>
> -----Original Message-----
> From: Cavnar-Johnson, John [mailto:JCavnar-Johnson@sark.com]
> Sent: Tuesday, December 17, 2002 7:38 PM
> To: 'Xml-Dev@Lists. Xml. Org (E-mail)'
> Cc: Doug Ransom
> Subject: RE: [xml-dev] Internal entities removed from XML?
>
>
> What are you talking about? Do you have some examples? There are
> several examples in the help files that come with the framework that
> show how to work with XML entities (both internal and external DTD).
> These examples show using entities with XmlDocument,
> XmlNodeReader, and
> XmlValidatingReader. If you search the .NET help files for the word
> "entity", you will find tons of information on how to work
> with entities
> in your XML files. How does this add up to "Microsoft has essentially
> removed entity references from XML"? You make some awfully sweeping
> statements that seem to be belied by the rather extensive .NET help
> documentation on using XML entities.
>
> I would really like you to send me a copy of a well-formed
> XML file that
> will make my .NET xml processor "barf".
>
> -----Original Message-----
> From: Doug Ransom [mailto:Doug.Ransom@pwrm.com]
> Sent: Tuesday, December 17, 2002 8:46 PM
> To: Xml-Dev@Lists. Xml. Org (E-mail)
> Subject: [xml-dev] Internal entities removed from XML?
>
> With the Microsoft .net (dotnet) platform, it seems one
> really has to go
> out of ones way to develop code which can read an XML file with entity
> references, even internal entity references. I ran into this when I
> tried some XSLT programs that worked successfully with saxon
> (java based
> xslt processor) and msxsl (COM based xslt processor) with a .net based
> XSLT processor.
>
> The default mechanismsms (XMLReader and XMLDocument) to load and read
> XML documents or XSLT programs simply fail when presented with a valid
> XSLT program which is serialized in valid XML.
>
> I wonder if a whole bunch of existing XML files that work fine with
> existing applications are going to break new applications designed to
> work with the same XML documents (i.e. a .net XSLT processor
> to replace
> msxsl). I suspect there are a fair number of valid XML documents out
> there that simply won't parse under .net.
>
> I think Microsoft has essentially removed entity references from XML,
> because now document authors won't dare produce XML documents that the
> majority of programs built on the .net platform will barf on. Users
> will be pretty upset at an author if they receive an XML document from
> them which won't load with their .net program.
>
> The WS-Interoperability profile also suggests entities not be used in
> SOAP messages. It seems like there are two versions of XML now; one
> that works with .net and WS-I, and an XML 1.0 document with a DOCTYPE
> section that cannot be parsed by what will replace the most commonly
> used XML Platform (as .net replaces COM on windows).
>
> Any comments? Maybe removing entity references is a good thing (I know
> implementators of embedded system platforms think so), and mabe
> Microsoft is doing the right thing by making entity expansion a thing
> developers have to go out of their way to make their software
> perform.
>
>
> Doug Ransom
>
>
>
> -----------------------------------------------------------------
> The xml-dev list is sponsored by XML.org <http://www.xml.org>, an
> initiative of OASIS <http://www.oasis-open.org>
>
> The list archives are at http://lists.xml.org/archives/xml-dev/
>
> To subscribe or unsubscribe from this list use the subscription
> manager: <http://lists.xml.org/ob/adm.pl>
>
|