如何为具有不同输入数据的两个常见元素设计xsd模式?

时间:2013-01-17 09:21:54

标签: java xml xsd

我需要一个如何设计 xsd schema 来表示对象的建议。

我有这样的界面

public interface Validator{
     boolean validate(Q query);   
}

我有一些实现 -

public class SimpleValidator implements Validator{

     private R param;

     public boolean validate(Q Query){
          //some logic with using param   
     }

     public void setParam(R param){
         this.param = param;
     }
}


public class AnotherValidator implements Validator{

     private Data data1;
     private Data data1;

     public boolean validate(Q Query){
          //some logic with using data1 and data2   
     }

     public void setData1(Data data1){
         this.data1 = data1;
     }

     public void setData2(Data data2){
         this.data2 = data2;
     }
}

我有这样的决定 -

我创建根元素 - <xsd:element name="validator" type="validatorType"/>

这样的元素 -

<xsd:element name="simpleValidator" type="simpleValidatorType"  substitutionGroup="validator"/>

<xsd:element name="anotherValidator" type="anotherValidatorType"  substitutionGroup="validator"/>

现在,我可以在需要simpleValidator的地方使用代码anotherValidatorvalidator。示例 -

<anotherValidator>
     <data1 value="value1"/>
     <data2 value="value2"/>
</anotherValidator>

问题是,我只想使用标记validator。例如,我想要这样的东西 -

<validator type="simpleValidator>
     //simpleValidator data
</validator>

<validator type="anotherValidator>
     //anotherValidator data
</validator>

1 个答案:

答案 0 :(得分:2)

我认为可以使用Runtime Polymorphism via xsi:type and Abstract Types完成此操作 我还找到了related question:可能会有帮助。

在我的一个项目中,我是dellign,但有不同类型的地址,即shippingAddress,billingAddress ..我们使用这个技术来解决我们的问题。