XML - 试图掌握命名空间 URI 的概念
Posted
技术标签:
【中文标题】XML - 试图掌握命名空间 URI 的概念【英文标题】:XML - Trying to grasp the concept of namespace URI 【发布时间】: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 来查找信息(命名空间的元素),不是吗?
【问题讨论】:
【参考方案1】:它与解析 URL(和下载模式)无关。尽管两个示例中的 XML 看起来相同:“xsl:stylesheet”,但您的输入被读取为 stylesheet
元素(由命名空间 https://www.w3schools.com/xml/xml_namespaces.asp
标识)。
Java 程序需要一个 stylesheet
元素(由命名空间 http://www.w3.org/1999/XSL/Transform
标识),但是由于找不到它,因此会引发异常。
【讨论】:
感谢您的回复。如果它甚至不需要从该 URL 中提取任何信息,为什么它会期望来自 URI w3.org/1999/XSL/Transform 标识的命名空间中的样式表元素?我的意思是,Java 程序不知道来自这个 URL 的样式表元素是什么!无论 URI 是什么,样式表都是样式表。 因为样式表不是随机/自定义格式,而是 w3 标准。 Java 已经拥有该标准的模式定义 (XSD),因此在准备转换时,它会尝试查看这是否符合其预期。它不知道如何解释来自 w3schools 的样式表,但它知道它可以解析/解释一个验证 w3.org 样式表模式的 XML 文件(由……那个确切的 URI 唯一标识)。 简短回答:根据样式表的 XSD,具有 w3schools URI 的样式表无效。以上是关于XML - 试图掌握命名空间 URI 的概念的主要内容,如果未能解决你的问题,请参考以下文章