有人能看出为什么我的xsd限制不起作用吗?
更新:我尝试了与下面完全相同的xsd,但在正则表达式中,我将(
和)
更改为[
和]
带方括号的版本在正则表达式测试程序中完美我尝试但在XSD中生成架构验证错误。是的,oXygen似乎是说在[]
中包含的正则表达式不允许在其他有效的XSD中使用。
XML架构或oXygen不支持方括号表达式吗?
还是其他原因?
相关(?)问题:XSD restriction pattern for accented characters
目的是仅验证符合以下2个内容模型的字符串:
<xs:simpleType name="Tokenized500Type">
<xs:restriction base="xs:string">
<xs:maxLength value="500"/>
<xs:minLength value="1"/>
<xs:pattern value="\S+( \S+)*"/>
</xs:restriction>
</xs:simpleType>
和
<xs:simpleType name="TransliteratedStringType">
<xs:annotation>
<xs:documentation> can only contain non-control characters drawn from the “invariant subset”
of ISO 646 (i.e. ASCII). </xs:documentation>
</xs:annotation>
<xs:restriction base="example:Tokenized500Type">
<xs:pattern
value="(!|"|%|&|'|\(|\)|\*|\+|,|-|.|\/|0|1|2|3|4|5|6|7|8|9|:|;|<|=|>|\?|A|B|C|D|E|F|G|H|I|J|K|L| |M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|_|a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z)+"
/>
</xs:restriction>
</xs:simpleType>
我已经单独测试了标记化,它似乎适合它所用的所有用例(删除任何不需要的空格并限制字符串长度)。
我无法弄清楚为什么ASCII限制不起作用。
我想也许某种从带有变音符号的字符映射到等效字符的映射,但事实证明它也允许其他特殊字符,例如ß
。 ß
是否真的映射到ss
?还是sz
?
我是否需要将所有字符作为unicode代码点转义?
或者我使用xs:restriction
时出现了某种错误?
测试使用: - oXygen XML Editor(XSD中的正则表达式) - http://regexr.com/(仅限正则表达式)
测试字符串:
Dr. Bäcker
Dr. Baecker
......和部分:
ŦŲƯY̨Ƴąɓçđɗęħįƙłøơşșţțŧųưy̨ƴÁÀÂÄǍĂĀÃÅǺĄÆǼǢƁĆĊĈČÇĎḌĐƊÐÉÈĖÊËĚ
ĔĒĘẸƎƏƐĠĜǦĞĢƔáàâäǎăāãåǻąæǽǣɓćċĉčçďḍđɗðéèėêëěĕēęẹǝəɛġĝǧğģɣĤḤĦIÍÌİÎÏǏĬĪĨĮỊIJĴĶƘĹĻŁĽĿʼNŃN̈ŇÑŅŊÓÒÔÖǑŎŌÕŐỌØǾ
ƠŒĥḥħıíìiîïǐĭīĩįịijĵķƙĸĺļłľŀʼnńn̈ňñņŋóòôöǒŏōõőọøǿơœŔŘŖŚŜŠŞȘṢẞŤŢṬŦÞÚÙÛÜǓŬŪŨŰŮŲỤƯẂẀŴẄǷÝỲŶŸȲỸƳŹŻŽẒŕřŗſśŝšşșṣßťţṭŧþúùûüǔŭūũűůųụưẃẁŵẅƿýỳŷÿȳỹƴźżžẓ
答案 0 :(得分:1)
如果要将字符串限制为可打印的ASCII字符, 你可以简单地表示这样的Unicode范围:
hello
ISO-646的范围有点复杂,因为它不是一个连续的序列:
$(document).ready(function(){
if(window.location.hash == '#hello'){
window.location = '#hello';
}
})
在明确的字符列表中,您很可能使用了错误转义的字符,从而导致错误。
答案 1 :(得分:1)
Saxon的错误消息告诉您确切的错误:
Schema processing failed: Syntax error at char 31 in regular expression: Escape character '/' not allowed
也就是说,XSD 1.0中正则表达式的规则不允许&#34; /&#34; (因为&#34; /&#34;在正则表达式中不是特殊的,它不需要转义,并且XSD不允许在这些情况下转义字符 - 这是一种保留它们以供将来使用的方法。)
现在我有一些问题要问你:
您收到此错误消息吗?
如果没有,您是如何运行验证的?
如果你确实得到了它,为什么忽略它?
答案 2 :(得分:0)
我很乐意在这里给出另一张海报的答案,但未转义的.
只是问题的一半。
鉴于我使用的是基于Saxon的XML编辑器(如上所述),/
也不得转义,因为不需要的字符会引发错误逃脱。
这里的完整答案(off-SE):https://www.oxygenxml.com/forum/topic13779.html#p40565