2011-02-02 31 views
1

我有一个基本上是从一种语言翻译到另一种语言的映射XML文档列表。这是一个示例:某种动态XML结构上的XSD模式

<?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。 正如我在这里看到的是一些类型的与元件同谋因为语言元素是关于属性元件的动态型基极。 语言值基于ISO 639-1标准,用逗号分隔,可以是一个或多个。在这种情况下,每个项目集必须包含相同的元素。默认lang属性具有单个值“en”和元素项目只有一个子元素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> 

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

回答

0

W3C模式不允许你表达这些条件约束。

Schematron是为这种验证设计的ISO标准。

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

+0

不幸的是,它被假定为W3C模式格式。可能,我必须定义将被支持的语言列表。看起来我在W3C领域没有其他选择。 – AlB 2011-02-02 19:14:55

0

不,XML模式不能根据属性的值限制元素。

+0

这是这项任务的某种麻烦感。看起来你确认了它。 – AlB 2011-02-02 17:03:36