我是XSD的新手,并且对以下两种模式之间的区别有疑问吗?

1)直接使用IDREF和ID将选择范围限制为文件中的另一个元素:

<xsd:element name="policy" >
  <xsd:complexType>
    <xsd:sequence>
      <xsd:element name="actor-def" 
                   type="tns:actor-def"/>                        
      <xsd:element name="actor-system-def" 
                   type="tns:actor-system-def"/>           
    </xsd:sequence>
  </xsd:complexType>
</xsd:element>

<xsd:complexType name="actor-def">
  <xsd:sequence>
    <xsd:element name="actor-system" 
                 type="tns:actor-system-type"/>
  </xsd:sequence>
  <xsd:attribute name="name" 
                 type="xsd:ID" 
                 use="required" />
</xsd:complexType>
<xsd:complexType name="actor-system-type">
  <xsd:attribute name="name" 
                 type="xsd:IDREF" 
                 use="required" />
</xsd:complexType>

<xsd:complexType name="actor-system-def">
  <xsd:attribute name="name" type="xsd:ID" use="required" />
  <xsd:attribute name="url" type="xsd:anyURI" use="required" />
</xsd:complexType>

2)将元素的类型直接设置为其他元素类型:

<xsd:element name="policy">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:element name="actor-def" 
                   type="tns:actor-def"/>
      <xsd:element name="actor-system-def" 
                   type="tns:actor-system-def"/>
    </xsd:sequence>
  </xsd:complexType>
</xsd:element>

<xsd:complexType name="actor-def">
  <xsd:sequence>
    <xsd:element name="actor-system" 
                 type="tns:actor-system-def"/>
  </xsd:sequence>
    <xsd:attribute name="name" 
                   type="xsd:ID" 
                   use="required" />
</xsd:complexType>

<xsd:complexType name="actor-system-def">
  <xsd:attribute name="name" 
                 type="xsd:ID" 
                 use="required" />
  <xsd:attribute name="url" 
                 type="xsd:anyURI" 
                 use="required" />
</xsd:complexType>

在转换的Java类中将第一种方法与JAXB结合使用时,我遇到了一些问题,有人建议使用第二种方法来回应我的另一篇文章。 但是,我不确定这两种模式之间的主要区别是什么,哪种适合我的应用程序?

  ask by reza translate from so

本文未有回复,本站智能推荐: