XPath值的XML Schema类型定义?

时间:2010-11-19 10:12:00

标签: xml xsd

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

示例:

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

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

XPath值是否有XML Schema定义?

4 个答案:

答案 0 :(得分:3)

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表达式来引用。

答案 1 :(得分:0)

我怀疑xpath是数据,而不是XML。规范如下:ht tp://www.w3.org/TR/xpath/

答案 2 :(得分:0)

您可以将anyURI用于某种模式,XPointer

XPointer示例:

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

答案 3 :(得分:0)

归根结底,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>

虽然我意识到这个问题在很长一段时间内都没有发挥作用,但我认为这对任何应该在这个问题上发生的事情都有启发意义。