JavaTM 2 Platform
Standard Ed. 6

javax.xml.bind.annotation
註釋型別 XmlIDREF


@Retention(value=RUNTIME)
@Target(value={FIELD,METHOD})
public @interface XmlIDREF

將 JavaBean 屬性映射到 XML IDREF。

要在 XML 序列化然後反序列化這一過程中保持物件圖形的參考完整性,需要通過使用參考或容器適當地對物件參考進行編組。註釋 @XmlID@XmlIDREF 一起使用時允許通過容器或參考來實作 JavaBean 屬性型別的自定義映射。

用法

@XmlIDREF 註釋能夠與以下程序元素一起使用:

有關其他公共訊息,請參閱 javax.xml.bind.package javadoc 中的“套件規範”。

用法受到以下約束的限制:

範例:將 JavaBean 屬性映射到 xs:IDREF(即通過參考而不是通過包含)。


   //EXAMPLE: Code fragment
   public class Shipping {
       @XmlIDREF public Customer getCustomer();
       public void setCustomer(Customer customer);
       ....
    }

   <!-- Example: XML Schema fragment -->
   <xs:complexType name="Shipping">
     <xs:complexContent>
       <xs:sequence>
         <xs:element name="customer" type="xs:IDREF"/>
         ....
       </xs:sequence>
     </xs:complexContent>
   </xs:complexType>

 

範例 2:以下是一個對比容器與參考的完整範例。

    // By default, Customer maps to complex type xs:Customer
    public class Customer {
        
        // map JavaBean property type to xs:ID
        @XmlID public String getCustomerID();
        public void setCustomerID(String id);

        // .... other properties not shown 
    }


   // By default, Invoice maps to a complex type xs:Invoice 
   public class Invoice {
    
       // map by reference
       @XmlIDREF public Customer getCustomer();       
       public void setCustomer(Customer customer);

      // .... other properties not shown here
   }

   // By default, Shipping maps to complex type xs:Shipping
   public class Shipping {

       // map by reference
       @XmlIDREF public Customer getCustomer();       
       public void setCustomer(Customer customer);
   }

   // at least one class must reference Customer by containment;
   // Customer instances won't be marshalled.
   @XmlElement(name="CustomerData")
   public class CustomerData {
       // map reference to Customer by containment by default.
       public Customer getCustomer();

       // maps reference to Shipping by containment by default. 
       public Shipping getShipping();     

       // maps reference to Invoice by containment by default. 
       public Invoice getInvoice();     
   }

   <!-- XML Schema mapping for above code frament -->

   <xs:complexType name="Invoice">
     <xs:complexContent>
       <xs:sequence>
         <xs:element name="customer" type="xs:IDREF"/>
         ....
       </xs:sequence>
     </xs:complexContent>
   </xs:complexType>

   <xs:complexType name="Shipping">
     <xs:complexContent>
       <xs:sequence>
         <xs:element name="customer" type="xs:IDREF"/>
         ....
       </xs:sequence>
     </xs:complexContent>
   </xs:complexType>

   <xs:complexType name="Customer">
     <xs:complexContent>
       <xs:sequence>
         ....
       </xs:sequence>
       <xs:attribute name="CustomerID" type="xs:ID"/>
     </xs:complexContent>
   </xs:complexType>

   <xs:complexType name="CustomerData">
     <xs:complexContent>
       <xs:sequence>
         <xs:element name="customer" type="xs:Customer"/>
         <xs:element name="shipping" type="xs:Shipping"/>
         <xs:element name="invoice"  type="xs:Invoice"/>
       </xs:sequence>
     </xs:complexContent>
   </xs:complexType>

   <xs:element name"customerData" type="xs:CustomerData"/>

   <!-- Instance document conforming to the above XML Schema -->
    <customerData>
       <customer customerID="Alice">
           ....
       </customer>

       <shipping customer="Alice">
           ....
       </shipping>
         
       <invoice customer="Alice">
           ....
       </invoice>
   </customerData>

 

範例 3:將列表映射到 IDREF 型別的重複元素。

     // Code fragment
     public class Shipping {
         @XmlIDREF
         @XmlElement(name="Alice")
             public List customers;
     }

     <!-- XML schema fragment -->
     <xs:complexType name="Shipping">
       <xs:sequence>
         <xs:choice minOccurs="0" maxOccurs="unbounded">
           <xs:element name="Alice" type="xs:IDREF"/>
         </xs:choice>
       </xs:sequence>
     </xs:complexType> 
 

範例 4:將列表映射到 IDREF 型別的元素列表。

     //Code fragment
     public class Shipping {
         @XmlIDREF
         @XmlElements(
             @XmlElement(name="Alice", type="Customer.class")
              @XmlElement(name="John", type="InternationalCustomer.class")
         public List customers;
     }

     <!-- XML Schema fragment -->
     <xs:complexType name="Shipping">
       <xs:sequence>
         <xs:choice minOccurs="0" maxOccurs="unbounded">
           <xs:element name="Alice" type="xs:IDREF"/>
           <xs:element name="John" type="xs:IDREF"/>
         </xs:choice>
       </xs:sequence>
     </xs:complexType> 
 

從以下版本開始:
JAXB2.0
另請參見:
XmlID


JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only