XPath值的XML模式类型定义?

问题描述:

我有一个XML文件,其中有一个属性,其值将是一个XPath,用于查找不同的一组XML文件中的内容。XPath值的XML模式类型定义?

实施例:

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

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

是否存在XPath值的XML模式定义?

+1

Perez:RegExp和XPath语法不匹配。 – 2010-11-19 13:01:48

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表达式来参考的。

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

+0

为什么不呢? xpath表达式也是“信息”呢? :) – redben 2011-12-26 17:01:40

+0

xpath不以XML格式表示,因此不会有XML模式。 – 2011-12-31 23:48:03

+0

仍然可以实现匹配正确xpath语法的模式否? redben 2012-01-01 14:52:40

你可以使用任何URI有一些模式,XPointer

的XPointer例如:

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

最终,由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> 

虽然我意识到这个问题已经很久没有活跃起来,但我认为这对任何应该发生这个问题的人都有启发意义。