Schematron xslt 1.0邮政编码格式验证



我使用schematron验证xml。我想创建一个规则来检查加拿大邮政编码(仅限格式)。有效的正则表达式应该是:/[ABCEGHJKLMNPRSTVXY]d[ABCEGHJKLMNPRSTVWXYZ]d/

我只能使用xslt1作为绑定。我正在使用Saxon的xsl库。

如果我使用这个示例xml:

<address><postalcode>T2R2R2</postalcode></address>

我如何在schematron中创建一个规则来验证这个呢?

任何帮助都将是非常感激的。

谢谢,特里

XSLT 1.0不支持正则表达式。但是有一种方法可以用Schematron规则验证这个模式:

<sch:rule context="postalcode">
        <sch:assert test="child::text()[
            string-length() = 6
            and translate(
                substring(.,1,1),
                'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
                ''
            ) = ''
            and translate(
                substring(.,2,1),
                '0123456789',
                ''
            ) = ''
            and translate(
                substring(.,3,1),
                'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
                ''
            ) = ''
            and translate(
                substring(.,4,1),
                '0123456789',
                ''
            ) = ''
            and translate(
                substring(.,5,1),
                'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
                ''
            ) = ''
            and translate(
                substring(.,6,1),
                '0123456789',
                ''
            ) = ''
            ]">postalcode '<sch:value-of select="."/>' does not follow required pattern.</sch:assert>            
    </sch:rule>

这有点麻烦,但它可以工作。

它检查邮政编码由6个字符组成,然后依次检查每个字符。

相关内容

  • 没有找到相关文章

最新更新