Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Как определить тип ссылки IDREF?

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
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;
  }
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...