XML - 试图掌握名称空间URI的概念

时间:2017-08-07 15:06:10

标签: xml url uri transformer urn

如果我的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)是标识互联网资源的字符串。

因此,因为“使用URI的目的是给命名空间一个唯一的名称”,这是否意味着命名空间URI必须是一个URL (同样,没有提到我绝对无法理解的URN,这意味着我无法设置这样的命名空间:

xlmns:foo="A_random_but_unique_string"

我会从同一个链接完成这个引用:

  

命名空间“http://www.w3.org/1999/XSL/Transform”标识HTML文档中的XSLT元素

所以现在这意味着解析器肯定必须使用命名空间URL来查找信息(命名空间的元素),不是吗?

1 个答案:

答案 0 :(得分:1)

它与解析URL(和下载模式)无关。尽管两个示例中的XML看起来都相同:“xsl:stylesheet”,但您的输入将被读取为stylesheet元素(由名称空间https://www.w3schools.com/xml/xml_namespaces.asp标识)。

Java程序需要一个stylesheet元素(由名称空间http://www.w3.org/1999/XSL/Transform标识),但由于它无法找到它,因此会引发异常。