如果我的 XSL 具有以下标题,则不会出现错误:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
但是,如果我更改 xsl 命名空间 URI...:
<xsl:stylesheet version="1.0" xmlns:xsl="https://www.w3schools.com/xml/xml_namespaces.asp"
...我收到一个错误:
javax.xml.transform.TransformerConfigurationException
我想我不理解命名空间 URI 的概念,因为我认为它可以是任何 URL(更不用说 URN),只要它在 XML/XSL 文档中是唯一的。明显不是。我试图改变 URI 来测试这个理论。
在https://www.w3schools.com/xml/xml_namespaces.asp,我们可以阅读以下语句:
解析器不使用命名空间 URI 来查找信息。
使用 URI 的目的是给命名空间一个唯一的名称。
然而,公司经常使用命名空间作为指向包含命名空间信息的网页的指针。
第一条语句的意思是我们不关心URI指向的网页是什么,那为什么我不能将它设置为指向我想要的任何页面,甚至是不存在的页面呢?为什么它必须特别是http://www.w3.org/1999/XSL/Transform?
此外,稍后在上述链接中,我们可以阅读:
统一资源标识符 (URI) 是标识 Internet 资源的字符串。
所以,正因为如此,并且因为“使用 URI 的目的是给命名空间一个唯一的名称”,这是否意味着命名空间 URI 必须是一个 URL(再次,更不用说我绝对无法理解的 URN ),这意味着我不能像这样设置命名空间:
xlmns:foo="A_random_but_unique_string"
我将从同一个链接中引用这个引用:
命名空间“ http://www.w3.org/1999/XSL/Transform ”标识 HTML 文档中的 XSLT 元素
所以现在这意味着解析器必须使用命名空间 URL 来查找信息(命名空间的元素),不是吗?