Russian Qt Forum
Ноябрь 24, 2024, 04:47 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Архитектура программы  (Прочитано 3977 раз)
Nalsur1982
Гость
« : Июль 22, 2010, 12:06 »

Привет! Помогите оформить классы и структуры данных.
Данные содержаться в xml файле в виде:
Код:
<cim:Company rdf:ID=45>
<cim:Company rdf:ID="13_3">
                  <cim:IdentifiedObject.name>Акмолинские МЭС</cim:IdentifiedObject.name>
                  <cim:IdentifiedObject.aliasName>Акмолинские МЭС</cim:IdentifiedObject.aliasName>
                  <fgc:Company.HeadCompany rdf:resource="#13_34" />
         </cim:Company>
         <cim:Company rdf:ID="13_4">
                  <cim:IdentifiedObject.name>Актюбинский филиал ОАО KEGOC</cim:IdentifiedObject.name>
                  <cim:IdentifiedObject.aliasName>Актюбинский филиал ОАО KEGOC</cim:IdentifiedObject.aliasName>
                  <fgc:Company.HeadCompany rdf:resource="#13_34" />
         </cim:Company>
         <cim:Company rdf:ID="13_105">
                  <cim:IdentifiedObject.name>Амурская МСК</cim:IdentifiedObject.name>
                  <cim:IdentifiedObject.aliasName>Амурская МСК</cim:IdentifiedObject.aliasName>
         </cim:Company> 
</cim:Company> 

Есть описание классов:
НаименованиеТип данныхАтрибутОбласть определения
Уникальный идентификатор объектаIDIDrdf
Краткое наименование зоны управленияТекстIdentifiedObject.namecim
Иерархическая цепочка кратких именТекстIdentifiedObject.pathNamecim
Зарубежный регионЛогическийGeographicalRegion.Foreignfgc
и т.д.
Ноды первого уровня хочу отображать в виде дерева, а справа дочерние элементы разделенные по вкладкам (rdf, cim, fgc) с использованием модель/представление (QTreeView).
Как правильно организовать классы с данными и учесть что типы данных в области определения имеет вид структуры (IdentifiedObject.pathName ....) и не все элементы из области определения могут быть определены в данном классе (они могут быть в других) и не должны отображаться.
Записан
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #1 : Июль 24, 2010, 21:10 »

XML-файл, видимо, должен быть примерно такого вида:
Код:
<?xml version="1.0" encoding="WINDOWS-1251"?>
<cim:Company rdf:ID="45" xmlns:cim="..." xmlns:rdf="..." xmlns:fgc="...">
   <cim:Company rdf:ID="13_3">
        <cim:IdentifiedObject>
           <cim:name>Акмолинские МЭС</cim:name>
           <cim:aliasName>Акмолинские МЭС</cim:aliasName>
        </cim:IdentifiedObject>
        <fgc:HeadCompany rdf:resource="#13_34" />
   </cim:Company>
   <cim:Company rdf:ID="13_4">
        <cim:IdentifiedObject>
           <cim:name>Актюбинский филиал ОАО KEGOC</cim:name>
           <cim:aliasName>Актюбинский филиал ОАО KEGOC</cim:aliasName>
        </cim:IdentifiedObject>
        <fgc:HeadCompany rdf:resource="#13_34" />
   </cim:Company>
   <cim:Company rdf:ID="13_105">
        <cim:IdentifiedObject>
            <cim:name>Амурская МСК</cim:name>
            <cim:aliasName>Амурская МСК</cim:aliasName>
        </cim:IdentifiedObject>
   </cim:Company> 
</cim:Company>
Могу предложить такой вариант классов:
Код:
class CompanyType;
typedef QVector<CompanyType *> CompanyTypeList;

class IdentifiedObjectType
{
public:
  QString name;
  QString aliasName;
};

class HeadCompanyType
{
public:
  QString resource;
};

class CompanyType
{
public:
  QString ID;
  IdentifiedObjectType IdentifiedObject;
  HeadCompanyType HeadCompany;
  CompanyTypeList Company;
};
Можете посмотреть http://www.prog.org.ru/topic_12973_0.html, может, найдете что-нибудь полезное.
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Nalsur1982
Гость
« Ответ #2 : Июль 24, 2010, 23:26 »

Спасибо за ссылку! Кстати, что лучше использовать DOM или SAX при очень большом количестве узлов (~50000 и 30Mb файл) для отображения в QTreeView. Использую DOM, очень медленно получается. Хотя, может, к xml это не относиться, а все это проблемы с QTreeView?
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #3 : Июль 25, 2010, 01:51 »

>>Хотя, может, к xml это не относиться
именно к нему и относится.

Для чтения смотри QXmlStreamReader, он самый быстрый в Qt.
Записан

Юра.
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #4 : Июль 25, 2010, 19:02 »

Кстати, что лучше использовать DOM или SAX при очень большом количестве узлов

DOM при больших объемах быстро деградирует, требует большого объема оперативной памяти. Хотя, скорее всего, 30 метров - это не цифра.
SAX потенциально позволяет ускорить обработку за счет последовательного доступа к данным, т.к. не требует загрузки всего файла в ОЗУ. Надо смотреть для конкретной задачи, однозначно утверждать трудно.
Лично мне SAX понравился больше, поскольку предоставляет больше свободы. Да и подумать позволяет..
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.051 секунд. Запросов: 23.