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 ...
- Another example here
- 这里也看看Related question in Whosebug
编辑:
请注意,XML 的根元素应具有以下属性以便应用验证。
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation='pathToYourFile.xsd'
最近我在配置文件中遇到一种情况,我需要一个属性,其值来自我的文档中指定的值列表。
例如
<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 ...
- Another example here
- 这里也看看Related question in Whosebug
编辑: 请注意,XML 的根元素应具有以下属性以便应用验证。
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation='pathToYourFile.xsd'