我是 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结合使用时,我遇到了一些问题,有人建议使用第二种方法回应我的另一篇文章。但是,我不确定这两种模式之间的主要区别是什么,哪一种适合我的应用程序?