2010-12-06 39 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