![]() |
|
|
|
#1 |
|
I'm experimenting with MathML, and have run into difficulty.
Given the simple XML: <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE component SYSTEM "mathml2.dtd"> <mathDisplay> <math> <msub> <mi>z</mi> <mn>2</mn> </msub> </math> </mathDisplay> and the simple XSLT stylesheet given below, I expect the output <?xml version="1.0" encoding="utf-8"?> <mathML><xmathDisplay><xmath><xmsub><xmi>z</xmi> <xmn>2</xmn></xmsub></xmath></xmathDisplay></mathML> Instead, I get <?xml version="1.0" encoding="utf-8"?> <mathML><xmathDisplay>z2</xmathDisplay></mathML> I get the results I expect if I delete the DOCTYPE line from the xml file. I can also get the results I expect if I change the names of the MathML elements to, say, <a>, <b>, <c>, ... In what way is the behavior of an XSLT stylesheet dependent upon the details of an XML document's doctype? Thanks! The spreadsheet: <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet xmlns version="1.0"> <xsl:strip-space elements="*"/> <xsl <xsl:template match="/"> <mathML> <xsl:apply-templates/> </mathML> </xsl:template> <xsl:template match="mathDisplay"> <xmathDisplay> <xsl:apply-templates/> </xmathDisplay> </xsl:template> <xsl:template match="math"> <xmath> <xsl:apply-templates/> </xmath> </xsl:template> <xsl:template match="msub"> <xmsub> <xsl:apply-templates/> </xmsub> </xsl:template> <xsl:template match="mi"> <xmi> <xsl:apply-templates/> </xmi> </xsl:template> <xsl:template match="mn"> <xmn> <xsl:apply-templates/> </xmn> </xsl:template> </xsl:stylesheet> Fred |
|
|
|
|
#2 |
|
Posts: n/a
|
Try it without specifying the DTD. If that produces the right output,
check whether the MathML DTD is automatically setting default namespaces for those elements. If so, your stylesheet has to be made namespace-aware. |
|
|
|
#3 |
|
Posts: n/a
|
Adding xmlns:m="http://www.w3.org/1998/Math/MathML" to xsl:stylesheet
and prefixing all the MathML element names in the xsl:templates with "m:" worked. Thanks! I don't quite understand why it's necessary to specify the namespace if one isn't going to be using the prefixed form of the element names in the XML documents ... nor does a quick scan of Kay's book help. Could you point me to an explanation of this phenomenon? Thanks again, Fred |
|
|
|
#4 |
|
Posts: n/a
|
Fred wrote:
> I don't quite understand why it's necessary to specify the namespace if > one isn't going to be using the prefixed form of the element names in > the XML documents The meaningful thing isn't the prefix, or lack of one -- it's whether the element and/or attribute is bound to a namespace. In your case, the DTD is indeed asserting such a binding, via a default namespace declaration (xmlns=). XPath, and XSLT, are always namespace-aware. This means all element and attribute names they refer to have to be in the correct namespace, or they won't match. Since XPath 1.0 has no concept of default namespaces in its own syntax, that means that the only way to refer to namespaced names is to use a prefix bound to the correct namespace. Don't confuse syntax and semantics. Prefixes are syntax. Namespaces are the semantic they represent. |
|