2010-10-29 48 views
0

我的要求是使用兩種不同的驗證策略來驗證xml。在策略1中,xml需要具有某些必需屬性的元素的實例。在策略2中,xml需要具有不同所需屬性的相同元素的實例。所以,這個想法是,對於每個集合,有兩個不同的相同元素集和不同的必需屬性集。有沒有一種方法來驗證這一點,只使用一個xsd。到目前爲止,我唯一的解決方案是使用兩個不同的xsd文件進行驗證。在XML模式中驗證不同的必需屬性集

實施例1:

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <element firstName="something"/> <!--required --> 
    <element lastName="something"/> <!-- required --> 
<element phoneNumber="something"/> <!-- not required --> 
<root> 

實施例2:

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <element firstName="something"/> <!-- not required --> 
    <element lastName="something"/> <!-- required --> 
<element phoneNumber="something"/> <!-- required --> 
<root> 

可以通過XSD驗證實現?

+0

我認爲你不能,因爲你試圖爲同一個元素聲明兩個不同的模式,這是模糊的。 – 2010-10-29 22:11:03

回答

0

裏克,

我有類似的問題在我們的應用程序來解決,而我們最好的解決辦法是使用模塊化架構。

因此,除了Schema1和Schema2除了不同的部分外,其它Schema2都是重複的,而Schema1和Schema2只包含不同的約束,並且都導入一個常見的Schema3,它定義了約束共享。

如何做到這一點的一個例子是here

它不會給你一個XSD,但它確實減少了重複,所以它有助於維護性,並有助於避免在Schema1和Schema2之間有大量重複時出現錯誤的可能性。

缺點是模式對於人類來說變得更加困難,因爲定義被分割在不同的文件之間。

+0

同意,使用多個模式的解決方案更難以溝通,我希望使服務儘可能容易地消耗。我認爲我要採用的方法是使用''元素來在兩組約束之間進行彎曲。感謝您的意見。 – rick 2010-11-01 15:07:49