2010-12-06 37 views
0

在根據模式驗證XML時,出現即將出現的錯誤。XML模式定義中的正則表達式失敗

Value 'this/is/a/simple/node-path' is not facet-valid 
with respect to pattern '^(\w+[\w\-/])+\w' for type 'PathModel'. 

PathModel類型的定義被定義爲simpleType如下面的片斷所示。它被使用<path>this/is/a/simple/node-path</path>

<xs:simpleType name="PathModel"> 
    <xs:restriction base="xs:string"> 
    <xs:pattern value="^(\w+[\w\-/])+\w" /> 
    </xs:restriction> 
</xs:simpleType> 

預期的結果在此匹配表中列出。

this/is/a/simple/node-path  MATCHING 
/this/is/a/simple/node-path  NOT MATCHING 
this/is/a/simple/node-path/  NOT MATCHING 
this/is/a/simple/nodep%th  NOT MATCHING (special characters) 

怎麼回事?謝謝

回答

5

刪除前導^字符。

 

<xs:simpleType name="PathModel"> 
    <xs:restriction base="xs:string"> 
    <xs:pattern value="(\w+[\w\-/])+\w" /> 
    </xs:restriction> 
</xs:simpleType> 
 

這是一組您所提供的唯一有效的值:

 

this/is/a/simple/node-path 
 

這應該爲你做的伎倆(在我的Eclipse IDE測試)。

的原因是可見的,例如,在這裏:http://www.regular-expressions.info/xml.html

「與其他正則表達式的口味相比,XML模式風味特點是非常有限的,因爲它只是用來驗證整個元素是否有模式的匹配。而不是從大塊數據中提取匹配XML模式總是隱式地錨定整個正則表達式正則表達式必須匹配整個元素才能被認爲是有效的元素如果模式爲regexp,那麼XML模式驗證器將以與Perl,Java或.NET對^regexp$模式所做的相同的方式應用它。「

-2

據我可以看到正則表達式似乎是有效的,並應根據XSD規範給出匹配表中顯示的結果。使用Microsoft .NET Framework 2以及使用路徑值和正則表達式的測試用例,我可以得到您的預期結果。

所以,可能的原因,你所看到的:

  • 有一個在你使用的是XSD實現中的錯誤。
  • 代碼未驗證你認爲它是驗證如果您告訴我們您所使用的執行和發佈您的代碼(儘管這似乎不太可能給出的錯誤信息,你所看到的)

,它可能有可能進一步幫助。

+0

謝謝你的回答。 Jiri Patera的帖子解決了這個問題。 – codevour 2010-12-07 08:32:15

+0

啊...所以它看起來這個錯誤是在微軟的.NET 2 XSD實現中,而不是你的:-)。 – 2010-12-07 10:36:22