Название: Архитектура программы
Отправлено: 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>
Есть описание классов: Наименование | Тип данных | Атрибут | Область определения | Уникальный идентификатор объекта | ID | ID | rdf | Краткое наименование зоны управления | Текст | IdentifiedObject.name | cim | Иерархическая цепочка кратких имен | Текст | IdentifiedObject.pathName | cim | Зарубежный регион | Логический | GeographicalRegion.Foreign | fgc |
и т.д. Ноды первого уровня хочу отображать в виде дерева, а справа дочерние элементы разделенные по вкладкам (rdf, cim, fgc) с использованием модель/представление (QTreeView). Как правильно организовать классы с данными и учесть что типы данных в области определения имеет вид структуры (IdentifiedObject.pathName ....) и не все элементы из области определения могут быть определены в данном классе (они могут быть в других) и не должны отображаться.
Название: Re: Архитектура программы
Отправлено: sergek от Июль 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 (http://www.prog.org.ru/topic_12973_0.html), может, найдете что-нибудь полезное.
Название: Re: Архитектура программы
Отправлено: Nalsur1982 от Июль 24, 2010, 23:26
Спасибо за ссылку! Кстати, что лучше использовать DOM или SAX при очень большом количестве узлов (~50000 и 30Mb файл) для отображения в QTreeView. Использую DOM, очень медленно получается. Хотя, может, к xml это не относиться, а все это проблемы с QTreeView?
Название: Re: Архитектура программы
Отправлено: lit-uriy от Июль 25, 2010, 01:51
>>Хотя, может, к xml это не относиться именно к нему и относится.
Для чтения смотри QXmlStreamReader, он самый быстрый в Qt.
Название: Re: Архитектура программы
Отправлено: sergek от Июль 25, 2010, 19:02
Кстати, что лучше использовать DOM или SAX при очень большом количестве узлов
DOM при больших объемах быстро деградирует, требует большого объема оперативной памяти. Хотя, скорее всего, 30 метров - это не цифра. SAX потенциально позволяет ускорить обработку за счет последовательного доступа к данным, т.к. не требует загрузки всего файла в ОЗУ. Надо смотреть для конкретной задачи, однозначно утверждать трудно. Лично мне SAX понравился больше, поскольку предоставляет больше свободы. Да и подумать позволяет..
|