2011-07-10 105 views
2

我正在嘗試編寫一個XML架構來定義一些在java中使用jaxb的模型類。Xml架構接口

我想能夠在xsd中定義一個接口,但我不知道如何做到這一點。

例如,我的很多類都有一個叫做id的屬性,它是類型xs:ID。它們將具有名爲ref的屬性,該屬性是類型xs:IDREF,並且它們將具有稱爲extRef的屬性,這意味着存在引用但該元素未在給定的xml文件中指定。

理想情況下,這將是一個接口,當轉換爲java有兩個原因。

  1. 實現此目的的類不一定是連接的。
  2. 我想爲這些對象中的一些指定不同的繼承樹。

實施例:

<!-- Utility type to be externally referenceable this is too keep all the 
    externally refrencable attributes in check --> 
<xs:complexType name="ExternallyReferenceable" abstract="true"> 
    <xs:attribute name="extRef" type="externalReference" /> 
    <xs:attribute name="id" type="xs:ID" /> 
    <xs:attribute name="ref" type="xs:IDREF" /> 
</xs:complexType> 

<xs:complexType name="ExternalCarPart"> 
    <xs:extension base ="ExternallyReferenceable" /> 
</xs:complexType> 

<xs:complexType name="CarPart"> 
    <xs:extension base ="ExternalCarPart"> 
        <xs:sequence> 
          <xs:element type="xs:string" name="partName" /> 
        </xs:sequence> 
    </xs:extension> 
</xs:complexType> 

<xs:complexType name="CarLamp"> 
    <xs:extension base ="ExternalCarPart"> 
        <xs:sequence> 
          <xs:element type="xs:string" name="glassPurity" /> 
        </xs:sequence> 
      </xs:extension> 
</xs:complexType> 

因此,在上面的例子中這將是更好的,如果是exteranllyRefrencable的接口,以及如果carpart是一個接口。

這將允許CarLamp繼承燈而不是外部汽車零件。 BicycleLamp也可以實現外部Refrencable接口並擴展燈泡。

如果問題不清楚,請問我澄清。

回答

0

IIRC,JAXB不會從XSD生成接口。

JAXB還支持從Java類生成XSD。我不確定在這方面它與接口有什麼關係,但也許你需要朝着相反的方向去做 - 從Java開始並生成XSD,但我不確定這對你有什麼幫助。