xsl-list
[Top] [All Lists]

Re: [xsl] HTML5 and MathML and namespaces, oh my

2020-11-04 16:00:59
Thanks Wendell!

When I first learned about XSLT and namespaces, I figured, “I’ll be thankful 
for this when I have mixed-namespace content.” I am relieved that indeed, the 
complexity helps avoid even more complexity!

I am learning XSLT and namespaces at the same time. My background is 
perl/Tcl/C/etc., and my brain doesn’t think in XSLT yet. Every template, every 
structure, every expression is a hard-fought battle.

Thankfully, this list has been outstandingly helpful and patient with my 
questions.


  *   Chris


From: Wendell Piez wapiez(_at_)wendellpiez(_dot_)com 
<xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com>
Sent: Wednesday, November 4, 2020 11:12 AM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: Re: [xsl] HTML5 and MathML and namespaces, oh my

Chris,

Awesome. You have about cracked the namespace conundrum. Part of the key is to 
see that the XSLT is also an XML document and follows all the same rules as any 
other XML document as to its namespaces.

So:

Why would the XSLT serializer write explicit namespace references that aren’t 
needed by context?

In this case, all the declarations in samples you have shown are needed with 
the exception of the stray binding to an 'mml' prefix, which you removed. They 
would not be needed if the processor (say) assigned all its own prefixes to 
names, instead of using the names as given in the XSLT. But we would hate that. 
So it does its best to give us what we need, with the names it thinks we want.

Isn’t the point of namespaces that everything is fully qualified internally, 
then the output can adjust accordingly?

Yes! As you've discovered, that can require some jiggery when multiple 
vocabularies are competing for unprefixed names (or the same prefixes).

How do I get a clean <math> island of MathML content without namespace stuff 
cluttering up its contents?

Bravo! Actually with a little practice you can make it so your code is 
reasonably clean even in mixed-namespace use cases.

Old project: 
https://github.com/wendellpiez/XMLNamespaceFixup<https://urldefense.com/v3/__https:/github.com/wendellpiez/XMLNamespaceFixup__;!!A4F2R9G_pg!Jhl_IDRYqlo2VzhBevEPT2OWcoGcLIPmsruLOTbumPfCYoJ_cCkeVydWWU_RjqAl8DdrvKRO1IBfYvM$>
 (but if you do things right you'll never need it).

Cheers, Wendell


On Wed, Nov 4, 2020 at 8:04 AM Chris Papademetrious 
christopher(_dot_)papademetrious(_at_)synopsys(_dot_)com<mailto:christopher(_dot_)papademetrious(_at_)synopsys(_dot_)com>
 
<xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com<mailto:xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com>>
 wrote:
Hi Martin,

Thanks for taking the time to reply!

The :mml namespace was a vestigial declaration from earlier experiments. I 
didn't realize its presence would cause problems. After deleting it, I get


    ...
    <math 
xmlns="http://www.w3.org/1998/Math/MathML<https://urldefense.com/v3/__http:/www.w3.org/1998/Math/MathML__;!!A4F2R9G_pg!Jhl_IDRYqlo2VzhBevEPT2OWcoGcLIPmsruLOTbumPfCYoJ_cCkeVydWWU_RjqAl8DdrvKROJrOkqso$>">
      <mrow>
        <mrow xmlns="">
          <mspace 
xmlns="http://www.w3.org/1998/Math/MathML<https://urldefense.com/v3/__http:/www.w3.org/1998/Math/MathML__;!!A4F2R9G_pg!Jhl_IDRYqlo2VzhBevEPT2OWcoGcLIPmsruLOTbumPfCYoJ_cCkeVydWWU_RjqAl8DdrvKROJrOkqso$>"/>
        </mrow>
      </mrow>
    </math>
    ...


which makes me now realize that my newly-added <mrow> was *not* in the MathML 
namespace as I expected. So then I added

    
xmlns="http://www.w3.org/1998/Math/MathML<https://urldefense.com/v3/__http:/www.w3.org/1998/Math/MathML__;!!A4F2R9G_pg!Jhl_IDRYqlo2VzhBevEPT2OWcoGcLIPmsruLOTbumPfCYoJ_cCkeVydWWU_RjqAl8DdrvKROJrOkqso$>"

to my <xsl:stylesheet> opening tag so that the unqualified <mspace> in my 
template was created in the MathML namespace, and now I get the expected 
results:


<!DOCTYPE html>
<html 
xmlns="http://www.w3.org/1999/xhtml<https://urldefense.com/v3/__http:/www.w3.org/1999/xhtml__;!!A4F2R9G_pg!Jhl_IDRYqlo2VzhBevEPT2OWcoGcLIPmsruLOTbumPfCYoJ_cCkeVydWWU_RjqAl8DdrvKRONX00fVk$>">
  <head>
    <title>Equations</title>
  </head>
  <body>
    <math 
xmlns="http://www.w3.org/1998/Math/MathML<https://urldefense.com/v3/__http:/www.w3.org/1998/Math/MathML__;!!A4F2R9G_pg!Jhl_IDRYqlo2VzhBevEPT2OWcoGcLIPmsruLOTbumPfCYoJ_cCkeVydWWU_RjqAl8DdrvKROJrOkqso$>">
      <mrow>
        <mrow>
          <mspace/>
        </mrow>
      </mrow>
    </math>
  </body>
</html>


In retrospect, my mistakes were:

1. Thinking that "xpath-default-namespace" affected new element creation too.
2. Not realizing that the <mspace> created by my template was *not* in the 
MathML namespace.

Many thanks!!

 - Chris



--
...Wendell Piez... ...wendell -at- nist -dot- gov...
...wendellpiez.com... ...pellucidliterature.org... ...pausepress.org...
...github.com/wendellpiez.<https://urldefense.com/v3/__http:/github.com/wendellpiez.__;!!A4F2R9G_pg!Jhl_IDRYqlo2VzhBevEPT2OWcoGcLIPmsruLOTbumPfCYoJ_cCkeVydWWU_RjqAl8DdrvKRObEgyriU$>..
 ...gitlab.coko.foundation/wendell...
XSL-List info and 
archive<https://urldefense.com/v3/__http:/www.mulberrytech.com/xsl/xsl-list__;!!A4F2R9G_pg!Jhl_IDRYqlo2VzhBevEPT2OWcoGcLIPmsruLOTbumPfCYoJ_cCkeVydWWU_RjqAl8DdrvKROeie5NT4$>
EasyUnsubscribe<https://urldefense.com/v3/__http:/lists.mulberrytech.com/unsub/xsl-list/3380743__;!!A4F2R9G_pg!Jhl_IDRYqlo2VzhBevEPT2OWcoGcLIPmsruLOTbumPfCYoJ_cCkeVydWWU_RjqAl8DdrvKROQ4jx_Bc$>
 (by email<>)
--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--
<Prev in Thread] Current Thread [Next in Thread>