当XSL转换命名空间页面脱机时该怎么办?

时间:2011-11-14 15:42:40

标签: xslt transform saxon

XSL要求在每个样式表的顶部:

xmlns:xsl =“http://www.w3.org/1999/XSL/Transform”

如果命名空间中的url不完全正确,则抛出错误。

今天,“http://www.w3.org/1999/XSL/Transform”处于离线状态。我无法进行任何转换。转换挂起,然后在网络请求超时时返回“意外的文件结束”。如果我将名称空间声明中的URL更改为随机URL,则转换失败并显示错误,告诉我“http://www.w3.org/1999/XSL/Transform”是必需的xsl名称空间。

那么我如何解决W3网站的问题呢?

2 个答案:

答案 0 :(得分:3)

使用xmlns:something="..."声明XML 命名空间。这样的命名空间只是一个字符串,有助于将唯一含义归属于templatehref等元素名称,从而确保可以在单个文档中使用多种基于XML的语言而不会产生混淆至于它的含义。

其中一些名称空间保留供W3C使用。 XSLT命名空间就是其中之一。一个正确的XSLT处理器将检查样式表是否声明了正确的命名空间,以确保没有不正确的解释。样式表的根元素应该在该XSLT名称空间中。

对于实际的命名空间值,您通常会有一个URI(通常是一个URL),因为它通常是一个很好的唯一标识符。但是,在XML处理过程中,绝不应该使用此实际解析为任何在线资源。虽然HTTP URL通常以不区分大小写的方式处理,并且可以使用字符的URL编码(例如,空间变为%20),但是在XML命名空间处理中不检查URL的这种解决方案或相等性。 XML中的命名空间只不过是一个字符串,它总是以其确切的形式,外壳和所有内容进行检查。

因此,如果一个XSLT处理器抱怨某个URL上的某些资源无法找到,那么要么它正在执行它不应该执行的操作,要么该问题与命名空间处理无关。

你正在使用Saxon,它绝对不是一个不理解命名空间概念的处理器。它的父亲是Michael Kay,他也负责XSLT 2.0规范。但Saxon确实支持模式感知的XSLT处理。如果文档指定了架构位置,那么使用它进行验证的处理器实际上会使用该位置来获取架构。这与名称空间的区别。 DTD和XML Schema位置肯定会导致网络活动。

所以我建议你检查一下......

  • XML使用带有外部定义的DTD以及它们是否可用;
  • XML指定架构位置以及是否可以到达该位置;
  • 样式表使用模式或其他一些外部资源以及是否可用。

找到原因后,请考虑将XML目录与处理器结合使用。如果无法通过URI解析XML目录,则允许您使用本地资源。

答案 1 :(得分:1)

简单回答:http://www.w3.org/1999/XSL/Transform不是URL,它只是一个字符串。如果W3C已经决定,那就没有理由不能成为'ThisIsAnXsltStylesheet'。按照惯例,它们通常类似于URL,但这不是必需的。

因此,该URL没有任何内容与样式表失败的原因无关,而且肯定不是原因。从逻辑上讲,如果是这种情况,那么没有互联网连接的人将无法使用XSLT,而w3c的服务器将会严重过度工作。

我建议将XSLT的前几行添加到您的问题中;它可能会解释你的问题究竟在哪里。