restrict 属性值基于 XML 本身定义的列表

restrict Attribute value based on a list defined in the XML itself

最近我在配置文件中遇到一种情况,我需要一个属性,其值来自我的文档中指定的值列表。

例如

<SeverityList>
    <Severity name="SAFETY" />
    <Severity name="ERROR" />
    <Severity name="WARNING" />
    <Severity name="INFO" />
</SeverityList>

此严重性列表作为系统配置的一部分出现,但在医院的生命周期内可能因用户而异。

稍后在同一个 XML 文档中,我进行了测试,每个测试都有一个严重性, 此严重性必须是上述选项之一。

例如

<Test name="patient_dosage_test" severity="SAFETY" /> <!-- O.K -->
<Test name="room_temperature" severity="WTF_SEV" /> <!-- FAIL Validation -->

我要强调:
1. 严重性列表可能会发生变化
2. 在 XSLT 中使用 Severity 列表稍后重新格式化。

谢谢

您好,您可以为此定义一个 XSD 架构并使用它来验证您的模型。

下面显示了如何在架构中声明键和键引用的示例。

    <xsd:key name="severity">
            <xsd:selector xpath="..."/>
            <xsd:field xpath="@name"/>
    </xsd:key>

    <xsd:keyref name="severity_constraint" refer="...:severity">
        <xsd:selector xpath="..."/>
        <xsd:field xpath="@severity"/>
    </xsd:keyref>

请注意,对于该模式的列表表示,您可以考虑使用

<xs:complexType ...

编辑: 请注意,XML 的根元素应具有以下属性以便应用验证。

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:noNamespaceSchemaLocation='pathToYourFile.xsd'