2011-02-02 21 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