Gtukmachev
Зарегистрирован: 04.12.2009 Сообщения: 2
|
Добавлено: Пт Дек 04 2009 08:50 Заголовок сообщения: Как определить тип ссылки IDREF? |
|
|
Добрый день.
Задача следующая: Есть XSD файл. Необходимо по этому файлу сгенерировать объектную модель (схему классов) и сделать автозагрузку xml, соответствующий xsd в эту модель. Это всё делают системные программисты, которые в бизнес логике данных не шарят. Обрабатывать данные будут прикладные программисты, которые не шарят в XML и XSD. Системщики сделают модель и загрузку, а прикладники сделают обработку данных – все счастливы. Но возникла проблема при генерации классов по xsd в котором есть элементы IDREF.
Дело в том, что определить по xsd, на какой именно элемент ссылается элемент с типом IDREF – невозможно. Я прав? Это приводит к тому, что непонятно какого типа реквизит необходимо создать.
Допустим у нас есть следующее описание (xsd).
В этом описании опрделён тип Loan, в которм есть два элемента-ссылки:
Код: |
<xsd:complexType name="Loan">
<xsd:annotation>
<xsd:documentation>Кредит</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="rate" type="xsd:decimal"/>
<xsd:element name="client_id" type="xsd:IDREF"/>
<xsd:element name="loan_type_id" type="xsd:IDREF"/>
</xsd:sequence>
</xsd:complexType>
|
По логике данных эти ссылки будут, соответственно, на элементы типов Client и LoanType, и для такого типа хочется сгенерировать следующий класс: (тут и далее синтаксис Явы я использую условно... )
Код: |
public class Loan {
float rate;
Client clien_id;
LoanType loan_type_id;
}
|
Но автоматически этого нельзя сделать, т.к. непонятно «куда именно» показывают эти IDREF. Кто-нибудь сталкивался с подобной проблемой? Как её можно решить?
Вот полный xsd из примера.:
Код: | <?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xsd:element name="LOAN_DATA" type="LoanData"/>
<xsd:complexType name="LoanData">
<xsd:annotation>
<xsd:documentation>Данные о кредитах</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="loan_types" type="LoanTypeArray"/>
<xsd:element name="clients" type="ClientArray"/>
<xsd:element name="loans" type="LoanArray"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="LoanTypeArray">
<xsd:annotation>
<xsd:documentation>Массив кредитных продуктов</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="loan_type" type="LoanType" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="ClientArray">
<xsd:annotation>
<xsd:documentation>Массив клиентов</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="client" type="Client" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="LoanArray">
<xsd:annotation>
<xsd:documentation>Массив кредитов</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="loan" type="Loan" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="LoanType">
<xsd:annotation>
<xsd:documentation>Кредитный продукт</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="id" type="xsd:ID"/>
<xsd:element name="description" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="Client">
<xsd:annotation>
<xsd:documentation>Клиент</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="id" type="xsd:ID"/>
<xsd:element name="name" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="Loan">
<xsd:annotation>
<xsd:documentation>Кредит</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="rate" type="xsd:decimal"/>
<xsd:element name="client_id" type="xsd:IDREF"/>
<xsd:element name="loan_type_id" type="xsd:IDREF"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema> |
Вот пример того, что хочется получить на выходе (я привожу только интересующие меня классы):
Код: | public class LoanType {
String id;
String description;
}
public class Client {
String id;
String name;
}
public class Loan {
float rate;
Client clien_id;
LoanType loan_type_id;
} |
|
|