3

我有一个“格式正确且有效”的 XML 文件(与 XSD 模式匹配,在http://xsdvalidation.utilities-online.info/进行了测试)。

我在 XSD 中使用这些代码行来限制 a 的 XML 输入<firstname>

<xsd:pattern value = "[A-Z][a-z]+" />
<xsd:minLength value = "2" />
<xsd:maxLength value = "25" />


<firstname>因此,上面提到的网站会在不匹配此正则表达式和长度限制 时抛出错误并且不验证(例如,如果我在 XML 文件中输入“5”作为名字)。

但是,当我在 Firefox 中打开 XML 文件(使用 XSL 文件解析为 HTML)时,它不会抛出错误,并且会显示输入到 XML 文件中的任何内容,而不管正则表达式和长度限制如何。

XSD 模式是否不打算以这种方式用于 Web 浏览器中的错误检查?我是否需要使用 XSLT 中的限制而不是 XSD?

4

3 回答 3

2

XSD 验证仅在您请求时才会发生。指定 xsi:schemaLocation 本身并不构成执行验证的请求(尽管有一些工具,例如 Altova,以这种方式解释它)。

我实际上并不知道任何在浏览器中工作的 XSD 验证器,但这并不意味着不存在。

于 2012-06-24T21:56:23.327 回答
1
  • 您似乎将 Web 浏览器用作 XML 验证器,但事实并非如此。Web 浏览器是非常宽容的工具,因为网站非常多样化,并且偶尔会违反各种规则。

  • firefox 看到的不是 XSL 转换的输入,即有效或无效的 XML 文件,而是转换的输出,它不一定对您计算机上的任何特定模式有效。XSL 转换的工作是将文档转换为其他东西,在本例中为 XHTML。现在虽然有一个用于验证 XHTML 的模式,但它肯定对名字没有任何限制,因此转换的输出很可能是有效的。

  • XML 格式良好(意味着文档在成对标记等方面XML)和有效性之间存在差异。有效性是相对于特定模式的。这就是为什么您会看到“格式正确且有效”这一短语。

重点应该是,如果 XML 不是 HTML,则获取一个用于处理 XML 的验证 XML 编辑器。浏览器可以显示任意 XML,但仅此而已。如果您必须使用浏览器并显示 XSLT 中的错误,您可以执行以下操作:

<xsl:message terminate='yes'>message here</message>

...但这与 XSD 无关。那是一种不同的技术。

于 2012-06-24T20:51:27.547 回答
1

XPath 2.0(和 XSLT 2.0)是一种强类型语言,可以验证所有内置和用户定义的模式类型。

可以使用 XSLT 2.0 SA(面向模式)处理器来强制执行以下模式类型验证

  1. 源 XML 文档。

  2. 传递给模板/(xsl:) 函数或(外部)传递给样式表的任何参数的值。

  3. 任何 的值xsl:variable

  4. 任何模板或 xsl:function 产生的结果

正确使用这些功能可以使转换结果的任何转换后验证变得不必要

于 2012-06-24T21:52:32.443 回答