嵌入式Schematron可以看到XSD类型吗?

时间:2014-10-15 18:57:07

标签: xml xpath xsd schema schematron

我有一个简单的架构,描述了游戏引擎的基于组件的子系统。某些组件类型对它们可以找到的组合有限制。

例如,系统定义基本类型Selectable,然后由ButtonToggle进行扩展。单个对象只能容纳1 Selectable个组件。

我的XSD架构镜像了这种关系(摘录):

<xs:complexType name="Selectable">
    <xs:complexContent>
        <xs:extension base="Component"/>
    </xs:complexContent>
</xs:complexType>
<xs:complexType name="Button">
    <xs:complexContent>
        <xs:extension base="Selectable"/>
    </xs:complexContent>
</xs:complexType>
<xs:complexType name="Toggle">
    <xs:complexContent>
        <xs:extension base="Selectable">
            <xs:attribute name="OnClickedCallback" type="Callback"/>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>

现在,我可以使用诸如此类的断言手动定义上述限制:

    <xs:annotation>
        <xs:appinfo>
            <sch:pattern id="SingleSelectable">
                    <sch:rule context="Transform">
                        <sch:assert test="count(Button) + count(Toggle) &lt; 2">
                        A transform can only have one selectable component.
                    </sch:assert>
                </sch:rule>
            </sch:pattern>
        </xs:appinfo>
    </xs:annotation>
然而,这种方法具有较差的可扩展性。我需要手动添加每个新类型,并确保我更新数字。

问题:有没有办法访问我在xsd文件中定义的类型信息?

<sch:assert test="count(*[extends('Selectable')] < 2">

这样的东西

0 个答案:

没有答案