2010-11-19 78 views
5

我有一個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

回答

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表達式來參考的。

0

我懷疑它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

0

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

的XPointer例如:

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

雖然我意識到這個問題已經很久沒有活躍起來,但我認爲這對任何應該發生這個問題的人都有啓發意義。