使用Schematron在内联元素之前添加空格

时间:2016-06-02 14:06:11

标签: dita schematron

我希望在使用Schematron的某些特定XML内联元素之前添加空格,例如<ph>,但前提是没有空格。我看不出我的规则问题。你能帮忙吗?

<sch:pattern id="add-space-before-ph">
    <sch:rule context="ph">
        <sch:assert test="preceding::text()[not(ends-with(., ' '))]" 
                    role="warning" 
                    sqf:fix="add-space-before-ph">Add space before &lt;ph&gt;</sch:assert>
        <sqf:fix id="add-space-before-ph">
            <sqf:description>
                <sqf:title>Add space before &lt;ph&gt;</sqf:title>
            </sqf:description>
            <sqf:add position="before" match="." select="' '"/>
        </sqf:fix>
    </sch:rule>
</sch:pattern>

1 个答案:

答案 0 :(得分:1)

断言有两个问题:第一个问题是当断言未满足时显示消息,因此需要否定其条件,第二个问题是您实际上是将文本节点与某个条件匹配而不是检查文本节点是否满足某个条件,所以我认为断言应该是这样的:

{{1}}

你还应该考虑这样一个事实:在ph之前可以有多个空格+换行符(XML可能会打印得很漂亮)