Разница между использованием ID+IDREF и прямым типом в XML-схеме?
Я новичок в 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>
Я столкнулся с некоторыми проблемами при использовании первого подхода при объединении его с JAXB в переведенных классах Java, и кто-то предложил в ответ на мой другой пост, используя второй метод. Тем не менее, я не уверен, в чем главное различие между этими двумя схемами и какая из них подходит для моего приложения?