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模式定义?
答
XPATH表达式没有XSD数据类型。
您可能最好的做法是使用xsd:restriction
和xsd: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表达式来参考的。
答
你可以使用任何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>
虽然我意识到这个问题已经很久没有活跃起来,但我认为这对任何应该发生这个问题的人都有启发意义。
Perez:RegExp和XPath语法不匹配。 – 2010-11-19 13:01:48