XML Schema(XSD)限制模式只允许ISO 646不变子集(即ASCII)?

时间:2016-11-24 13:52:51

标签: regex xml validation unicode xsd

有人能看出为什么我的xsd限制不起作用吗?

更新:我尝试了与下面完全相同的xsd,但在正则表达式中,我将()更改为[]

带方括号的版本在正则表达式测试程序中完美我尝试在XSD中生成架构验证错误。是的,oXygen似乎是说在[]中包含的正则表达式不允许在其他有效的XSD中使用。

XML架构或oXygen不支持方括号表达式吗?

还是其他原因?

相关(?)问题:XSD restriction pattern for accented characters

目的是仅验证符合以下2个内容模型的字符串:

  1. "标记化":
  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>

    1. (将标记化作为基本类型包括在内)ASCII字符集:
    2. <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="(!|&quot;|%|&amp;|'|\(|\)|\*|\+|,|-|.|\/|0|1|2|3|4|5|6|7|8|9|:|;|&lt;|=|>|\?|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̈ňñņŋóòôöǒŏōõőọøǿơœŔŘŖŚŜŠŞȘṢẞŤŢṬŦÞÚÙÛÜǓŬŪŨŰŮŲỤƯẂẀŴẄǷÝỲŶŸȲỸƳŹŻŽẒŕřŗſśŝšşșṣßťţṭŧþúùûüǔŭūũűůųụưẃẁŵẅƿýỳŷÿȳỹƴźżžẓ

3 个答案:

答案 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