【发布时间】:2018-01-14 22:49:58
【问题描述】:
如果我的 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 来查找信息(命名空间的元素),不是吗?
【问题讨论】:
标签: xml url uri transformer urn