某种动态XML结构的XSD架构

时间:2011-02-02 02:21:21

标签: xml xsd

我有映射XML文档的列表,基本上是从一种语言到另一种语言的翻译。这是一个示例:

<?xml version="1.0" encoding="UTF-8"?>
<root lang="en,fr">
    <item name="error_1">
        <en><![CDATA[User name does not exist.]]></en>
        <fr><![CDATA[Nom d'utilisateur n'existe pas.]]></fr>
    </item>
    <item name="error_2">
        <en><![CDATA[One or both path parameters have not defined.]]></en>
        <fr><![CDATA[Un ou deux paramètres de trajet ne sont pas définies.]]></fr>
    </item>
</root>

如果可能的话,我需要在这种类型的文件上写XSD。 我在这里看到的是与元素的某种类型的共谋,因为语言元素是基于 root 元素的属性 lang 的动态类型。 语言值基于ISO 639-1标准,以逗号分隔,可以是一个或多个。在这种情况下,每个项目集必须包含相同的元素。默认 lang 属性具有单个值“en”,元素 item 只有一个子元素 en 。它看起来像那样:

<?xml version="1.0" encoding="UTF-8"?>
<root lang="en">
    <item name="error_1">
        <en><![CDATA[User name does not exist.]]></en>
    </item>
    <item name="error_2">
        <en><![CDATA[One or both path parameters have not defined.]]></en>
    </item>
</root>

我需要一些解决方案,建议。这项任务是否可以实现?

2 个答案:

答案 0 :(得分:0)

不,XML Schema不能基于属性值约束元素。

答案 1 :(得分:0)

W3C架构不允许您表达那种条件约束。

Schematron是为此类验证而设计的ISO标准。

顺便说一句,如果你让@lang NMTOKENS其他系统读取架构会知道如何处理它。逗号分隔值需要额外的自定义解析逻辑才能理解该属性值中有多个值。