【问题标题】:XML Schema type definition for XPath values?XPath 值的 XML 模式类型定义?
【发布时间】:2010-11-19 10:11:59
【问题描述】:

我有一个 XML 文件,其中有一个属性,其值为 XPath,用于在不同的 XML 文件集中定位内容。

例子:

<?xml version="1.0" encoding="utf-8"?>
<Root>
  <IterestingNode Value="/html/head/title"/>
</Root>

可以针对 XSD 验证此文件。目前我只是验证属性的值是一个字符串,但我想检查它是否是一个语法上有效的 XPath 值。

是否有 XPath 值的 XML 架构定义?

【问题讨论】:

  • Perez:RegExp 和 XPath 语法不匹配。

标签: xml xsd


【解决方案1】:

XPATH 表达式没有 XSD 数据类型。

您可能会做的最好的事情是使用xsd:restrictionxsd:pattern,使用正则表达式模式来验证字符串值是否是XPATH 表达式。

类似这样的:

<xsd:simpleType name="XPathValueType">
  <xsd:restriction base="xsd:string">
    <xsd:pattern value="**PUT IN SOME REGEX PATTERN TO VERIFY THE STRING IS AN XPATH EXPRESSION**"/>
  </xsd:restriction>
</xsd:simpleType>

我不知道有一种正则表达式模式可以验证给定字符串是否是要引用的 XPATH 表达式。

【讨论】:

    【解决方案2】:

    我怀疑 xpath 是数据,而不是 XML。规范在这里:http://www.w3.org/TR/xpath/

    【讨论】:

    • xpath 不是以 XML 格式表示的,因此不会有 XML 模式。
    • 仍然可以实现匹配正确 xpath 语法的模式不是吗?
    • 如果 OQ 可以重新调整为“我可以仅使用 XSLT 中可用的工具验证 XPath”,那么您的解决方案是合适的。您可能是正确的,但我不确定 - 某些语言无法通过正则表达式解析。
    【解决方案3】:

    您可以使用任何带有某种模式的URI,以及XPointer

    XPointer 示例:

    <?xml version="1.0" encoding="utf-8"?>
    <Root>
      <IterestingNode Value="doc.xml#xpointer(/html/head/title)"/>
    </Root>
    

    【讨论】:

      【解决方案4】:

      归根结底,redben提供的答案是正确的答案(我确实看到它声称,并且我相信xslt 不能用xsd表示),但我想提请注意xslt xsd 对 xpath 表达式具有以下 xsd 定义:

      <xs:simpleType name="expression">
          <xs:annotation>
              <xs:documentation>
                  An XPath 2.0 expression.
              </xs:documentation>
          </xs:annotation>
          <xs:restriction base="xs:token">
              <xs:pattern value=".+"/>
          </xs:restriction>
      </xs:simpleType>
      

      虽然我意识到这个问题已经很长时间没有活跃了,但我认为这可能对其他应该解决这个问题的人有所启发。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-25
        • 1970-01-01
        • 1970-01-01
        • 2018-12-11
        相关资源
        最近更新 更多