SASGIS - SAS.Планета
View Issue Details
0002107SAS.Планета[All Projects] Багpublic22-08-2013 18:3612-11-2015 14:27
Snake 
zed 
lowtweakalways
resolvedfixed 
WindowsXPSP3
120808 
150915150915 
0002107: sml файлы не по стандарту XML
Заголовок xml файла выглядит так:
<?xml version="1.0" standalone="yes"?>
что подразумевает использования UTF-8 для содержимого, а сейчас используется кодировка по-умолчанию ОС.
No tags attached.
related to 0002166resolved zed Переход на версию Delphi с полной поддержкой юникода 
parent of 0001217confirmed  Избавиться от MidasLib 
has duplicate 0002633closed zed добавить в .sml параметр encoding="windows-1251" 
related to 0002901resolved zed Переход на базу меток в SQLite по умолчанию 
Not all the children of this issue are yet resolved or closed.
Issue History
22-08-2013 18:36SnakeNew Issue
22-08-2013 19:04vdemidovNote Added: 0012568
22-08-2013 19:20vdemidovStatusnew => confirmed
22-08-2013 19:20vdemidovProduct Version.Nightly => 120808
22-08-2013 19:20vdemidovTarget Version => 29xxxx
03-05-2014 18:20sheavyNote Added: 0014208
05-05-2014 07:03vdemidovNote Added: 0014209
14-05-2014 07:07sheavyNote Added: 0014233
14-05-2014 07:35vdemidovNote Added: 0014234
14-05-2014 10:41zedNote Added: 0014235
14-05-2014 10:43zedNote Edited: 0014235bug_revision_view_page.php?bugnote_id=14235#r6051
14-05-2014 13:57FedNote Added: 0014236
15-05-2014 05:59FedNote Edited: 0014236bug_revision_view_page.php?bugnote_id=14236#r6055
15-05-2014 06:02FedNote Edited: 0014236bug_revision_view_page.php?bugnote_id=14236#r6056
19-02-2015 05:16zedRelationship addedhas duplicate 0002633
19-02-2015 05:25zedNote Added: 0015279
19-02-2015 05:28zedRelationship addedparent of 0001217
19-02-2015 05:35zedSeveritytrivial => tweak
19-02-2015 05:48FedNote Added: 0015280
19-02-2015 07:43vdemidovNote Added: 0015281
19-02-2015 08:20vasketsovNote Added: 0015283
19-02-2015 08:26vasketsovNote Edited: 0015283bug_revision_view_page.php?bugnote_id=15283#r6414
19-02-2015 08:57vdemidovDescription Updatedbug_revision_view_page.php?rev_id=6416#r6416
19-02-2015 08:57vdemidovAdditional Information Updatedbug_revision_view_page.php?rev_id=6418#r6418
19-02-2015 10:36FedNote Added: 0015285
19-02-2015 10:42zedNote Added: 0015286
19-02-2015 10:44zedNote Edited: 0015286bug_revision_view_page.php?bugnote_id=15286#r6420
19-02-2015 11:05vdemidovNote Added: 0015287
19-02-2015 11:15vasketsovNote Added: 0015288
19-02-2015 11:16zedNote Added: 0015289
19-02-2015 11:22zedNote Edited: 0015289bug_revision_view_page.php?bugnote_id=15289#r6422
19-02-2015 11:24vdemidovNote Added: 0015290
19-02-2015 11:31zedNote Added: 0015291
19-02-2015 11:33vdemidovNote Added: 0015292
19-02-2015 11:38vdemidovRelationship addedrelated to 0002166
20-02-2015 19:32zedNote Added: 0015306
20-02-2015 19:34zedStatusconfirmed => resolved
20-02-2015 19:34zedFixed in Version => 150915
20-02-2015 19:34zedResolutionopen => fixed
20-02-2015 19:34zedAssigned To => zed
20-02-2015 19:35zedTarget Version29xxxx => 150915
21-02-2015 09:42vdemidovNote Added: 0015308
12-11-2015 14:27vdemidovRelationship addedrelated to 0002901

Notes
(0012568)
vdemidov   
22-08-2013 19:04   
Ну, строго говоря, там не обязательно "windows-1251", там та кодировка, которая установлена у вас для неюникодных программ.
(0014208)
sheavy   
03-05-2014 18:20   
Поддерживаю этот пост! Экспериментирую с импортом sml в MS SQL. Без encoding="windows-1251" возникают сложности. Не могу это обойти.
Было бы здорово указать кодировку. Спасибо.
(0014209)
vdemidov   
05-05-2014 07:03   
Если вас интересует решение этой проблемы, то жду пул-реквеста с исправлениями. Иначе в ближайшее время можете особо не рассчитывать.
(0014233)
sheavy   
14-05-2014 07:07   
Хорошо, попробую организовать. Был бы признателен если бы кто-то дал направление, куда копать. Какой модуль или библиотека за это отвечает.
(0014234)
vdemidov   
14-05-2014 07:35   
u_MarkDbSml.pas и u_MarkCategoryDBSml.pas
(0014235)
zed   
14-05-2014 10:41   
(edited on: 14-05-2014 10:43)
А самое интересное, что у нас указана кодировка и для меток и для
категорий и она UTF-8. Но подозреваю, что строки записываются в Ansi. Хотя, почему строка с кодировкой пропадает из sml файлов остаётся загадкой.

Вот ещё в тему меток и юникода: http://sasgis.org/forum/viewtopic.php?f=47&t=2348

(0014236)
Fed   
14-05-2014 13:57   
(edited on: 15-05-2014 06:02)
Файлы marks.sml и Categorymarks.sml имеет формат Generic XML.
Как я понимаю в u_MarkCategoryDBSml.pas
procedure TMarkCategoryDBSml.InitEmptyDS;
а в u_MarkDbSml.pas
procedure TMarkDbSml.InitEmptyDS(ACdsMarks: TClientDataSet);
они не влияют на запись *.sml файлов, а только инициализируют структуру данных в TClientDataSet.

(0015279)
zed   
19-02-2015 05:25   
Я думаю, этот тикет можно закрывать как "won't fix" - изменить стандартное поведение компонента (TDataSet), который пишет метки в sml, не представляется возможным, а городить свой велосипед с ручным парсингом xml в SAS я думаю не стоит. Кому надо открыть метки в сторонней программе, могут без проблем добавить руками эту строку с кодировкой.
(0015280)
Fed   
19-02-2015 05:48   
Не удобно постоянно руками добавлять эту строку с кодировкой, особенно когда нужно эти данные получать автоматически.
Хорошо бы решить эту проблему, но вот как?
(0015281)
vdemidov   
19-02-2015 07:43   
Ну, единственное правильное решение - заставить TClientDataSet сохранять строки в UTF-8, но как этого добиться я не знаю. Писать encoding="windows-1251" нельзя, так как там не обязательно "windows-1251", а любая, которая сейчас указана дефолтной в системе.
(0015283)
vasketsov   
19-02-2015 08:20   
(edited on: 19-02-2015 08:26)
>как этого добиться я не знаю
Его надо отнаследовать, и использовать WriteDataPacket.
TDataPacketFormat = (dfBinary, dfXML, dfXMLUTF8);
Либо отнаследовать и продублировать код GetXMLData через DSBase с флагом xmlUTF8 вместо xmlON.

(0015285)
Fed   
19-02-2015 10:36   
Согласен с vasketsov.
(0015286)
zed   
19-02-2015 10:42   
(edited on: 19-02-2015 10:44)
Если перейти на юникод (dfXMLUTF8), то может поломаться обратная совместимость. К тому же, для неюникодной версии SAS, переход меток на юникод не принесёт ничего, кроме падения быстродействия (WideString-и и всё такое) и увеличения размера (в байтах) sml-файлов.

(0015287)
vdemidov   
19-02-2015 11:05   
Может поломаться, а может и нет - я не проверял. А по поводу скорости, это скорее повод побыстрее перейти на юникодную версию.
(0015288)
vasketsov   
19-02-2015 11:15   
>может поломаться обратная совместимость
Я могу это попробовать сделать у себя, но только если вы это точно делать не будете. Я полную обратную совместимость для SML и не обещал.
Впрочем, можно же такое (dfXMLUTF8) сделать только для экспорта меток, а саму базу меток не трогать. У вас есть флаг или какой признак, экспорт это или нет?
В общем, подумайте.
(0015289)
zed   
19-02-2015 11:16   
(edited on: 19-02-2015 11:22)
Поломать может. У себя я один раз словил глюк когда экспериментировал с форматами (dfBinary, dfXML, dfXMLUTF8), но глубоко рыть не стал. Поэтому придерживаюсь мнения, что если и переходить на юникод, то нужно менять расширение файла, чтобы не миксовать их и не потерять все метки, открывая их попеременно в разных версиях программы.

Если бы в коде был механизм множественности типов баз меток (как это сделано с тайло-хранилищами), то ввести расширенный sml (какой-нибудь smlx) - дело пяти минут (поменять одну константу с False на True): в коде я уже всё подготовил к переходу на юникод (комментарий по коду "ToDo" относится к выносу в конфиг этих параметров, чтобы юзер мог управлять ими из настроек программы).

(0015290)
vdemidov   
19-02-2015 11:24   
> Если бы в коде был механизм множественности типов баз меток (как это сделано с тайло-хранилищами), то ввести расширенный sml (какой-нибудь smlx) - дело пяти минут

Ну так сделай его. Там один шаг остался для его реализации.
(0015291)
zed   
19-02-2015 11:31   
Начнём с того, что я предлагаю закрыть тикет как won't fix и не париться :)

На текущий момент юникод в метка бесполезен и местами даже вреден. Нужен он только загадочным внешним автоматизаторам, которые не в силах в текстовом файле заменить одну строку на другую (на самом деле - 5 строчек в скрипте), перед началом своих действий.
(0015292)
vdemidov   
19-02-2015 11:33   
Ну, а я считаю, что переход на юникод все-таки нужен, поэтому пусть пока живет.
(0015306)
zed   
20-02-2015 19:32   
Странная штука этот датасет - флаг dfXMLUTF8 позволяет писать на диск файл в utf-8 кодировке, но в то же время, не даёт возможности по-настоящему работать с юникодом.

В общем, включил я этот флаг и теперь sml будет сохраняться по всем канонам xml. На внутреннюю работу меток это никак не повлияет - они как были неюникодными, так и останутся (даже при переходе на XE2), т.е. никакого падения производительности и прочих проблем быть не должно. С обратной совместимостью по всей видимости тоже всё ОК, старые версии SAS без проблем понимают "новый" sml, как и свежая версия открывает старые sml.

Похоже, этот тикет можно было закрыть ещё полтора года назад, если бы кто вплотную этим вопросом занялся и разобрался с нюансами работы датасетов.
(0015308)
vdemidov   
21-02-2015 09:42   
>Похоже, этот тикет можно было закрыть ещё полтора года назад, если бы кто
вплотную этим вопросом занялся и разобрался с нюансами работы датасетов.
Ну да. Тут таких тикетов дофига.