我有一个XML文件,其中有一个属性,其值为XPath,用于在不同的XML文件集中查找内容。
示例:
<?xml version="1.0" encoding="utf-8"?>
<Root>
<IterestingNode Value="/html/head/title"/>
</Root>
可以针对XSD验证此文件。目前我只是验证属性的值是一个字符串,但我想检查它是否是一个有效的XPath值。
XPath值是否有XML Schema定义?
答案 0 :(得分:3)
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表达式来引用。
答案 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>
虽然我意识到这个问题在很长一段时间内都没有发挥作用,但我认为这对任何应该在这个问题上发生的事情都有启发意义。