Имя: Пароль:
1C
1С v8
XSD: Аннотация, документация [дубль 2]
0 Cyberhawk
 
28.02.17
14:25
Прошлая тема: v8: XSD: Аннотация, документация

Требуется вот такое: http://pastebin.com/CNBQ00Fz
У меня пока получается вот такое: http://pastebin.com/w7J4M6rH

Чтобы не вчитывались / вдумывались: разница в том, что надо, чтобы комментарий "bla-bla-bla" был заключен внутри элемента (между тэгами), а не в атрибуте (внутри открывающего тэга).

Я просто пока от безысходности записываю нужный мне комментарий в свойство (атрибут) "Источник", а не в содержимое элемента <xs:documentation>.

Код в 1С:

    Тип = ОбработкаОбъект.СоздатьТип(ИмяТипа);
    
    Аннотация = Новый АннотацияXS;
    Документация = Новый ДокументацияXS;
    Документация.Источник = Комментарий;
    Аннотация.Состав.Добавить(Документация);
    Тип.Аннотация = Аннотация;

Функция СоздатьТип(ИмяТипа) Экспорт
    
    Тип = Новый ОпределениеСоставногоТипаXS;
    Тип.Имя = ИмяТипа;
    Часть = Новый ГруппаМоделиXS;
    
    Содержимое = Новый ФрагментXS;
    Содержимое.Часть = Часть;
    
    Тип.Содержимое = Содержимое;
    
    Возврат Тип;
    
КонецФункции // СоздатьТип()

Вопрос: как сделать так, чтобы нужный мне комментарий был у объявляемого типа внутри тэга документации-аннотации?
1 Cyberhawk
 
28.02.17
14:58
Кастую Fragster в ветку
2 Жан Пердежон
 
28.02.17
15:06
https://www.w3.org/2001/XMLSchema.xsd
схема для создания схем
3 Cyberhawk
 
28.02.17
15:17
(2) Если ее сделали программным кодом 1С, то Я рад :)
Но пока не удается "угадать" код, которым можно засунуть текст между тэгами <xs:documentation>...
4 Fragster
 
гуру
28.02.17
15:18
а в документация.ЭлементDOM что?
5 Fragster
 
гуру
28.02.17
15:19
вообще похоже на какое-то извращение
6 Cyberhawk
 
28.02.17
15:29
(4) До вызова метода     
Документация.ОбновитьЭлементDOM();
там Неопределено. После - ЭлементДом, у которого "ТипУзла" = "Элемент": http://pics.rsh.ru/img/2017-02-28152537_a6knmzs0.png
Но после такого вызова потом в конце, когда обновляется ДОМ-элемент самой схемы кодом
Схема.ОбновитьЭлементDOM();
платформа падает с ошибкой (как в предыдущей теме)
(5) Ну почему - обхожу объекты метаданных, генерю XSD-схему по определенным правилам. Генерить как xml-файл (последовательно тэгами) или пост-обработкой выходного файлика для добавления аннотации-документации не хотелось бы...
7 Fragster
 
гуру
28.02.17
15:45
(6) ага. значится после Схема.ОбновитьЭлементДом у нас есть документдом и доступ к его свойствам. можно через xpath или еще как достучаться до нужного элемента и добавить ему текст
8 Cyberhawk
 
28.02.17
15:53
(7) Я пока так и сделал и оно работает (текст помещается между тэгами), но не ясно в этом случае, почему нужна пост-обработка ДОМ-документа, а не сразу использование свойств и методов объектов (всякие там АннотацияXS / ДокументацияXS), из которых идет построение схемы...
9 Fragster
 
гуру
28.02.17
15:58
а если пойти от обратного? взять готовую схему, загрузить её в объектную модель и посмотреть что где лежит?
10 Вафель
 
28.02.17
16:07
какой смысл из кода генерить схему xsd?
11 Fragster
 
гуру
28.02.17
16:08
(10) да мало ли... может КД4 делает
12 Cyberhawk
 
28.02.17
16:11
(9) 1С при импорте схемы в дерево метаданных (в конфигураторе) просто игнорирует (похеривает) тэги аннотации-документации: если потом из конфигуратора сделать экспорт только что созданного (импортом) пакета, то в xml-файле этих тэгов не будет.
Щас попробую программно еще создать схему из файла и проверю, сохраняются ли там эти тэги...
13 Fragster
 
гуру
28.02.17
16:13
(12) ну, пакет XDTO - не совсем схема. Например у объекта свойства с типом "текст" при экспорте и импорте пропасть погут
14 Вафель
 
28.02.17
16:26
(12) значит такие схемы скорее всего не поддерживаются
15 Cyberhawk
 
28.02.17
16:31
(14) Со схемой все нормуль: программно в 1С она создается в первозданном виде.
Вот таким кодом создал в памяти схему ХМЛ, подсунув туда файл с аннотациями-документациями:

    ЧтениеXML = Новый ЧтениеXML;
    ЧтениеXML.ОткрытьФайл(ПутьКФайлу);
    
    ПостроительDOM = Новый ПостроительDOM;
    ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXML);
    
    ПостроительСхемыXML = Новый ПостроительСхемXML;
    СхемаXML = ПостроительСхемыXML.СоздатьСхемуXML(ДокументDOM);

В результате мои текстовые аннотации-документации присутствуют _только_ в ДОМ-элементах... Значит, в 1С походу не доработана объектная модель ХМЛ-схем, чтобы фигачить текстовое содержимое между тэгами - придется оставить способ в (8)...
16 Жан Пердежон
 
28.02.17
16:54
(3) чукча не читатель? это одинэсные объекты писались для этой схемы.
17 Вафель
 
28.02.17
16:57
(16) И ты гарантируешь что 1сные объекты покрывают схему на 100% ?
18 Жан Пердежон
 
28.02.17
17:13
(17) ещё один...
19 Cyberhawk
 
28.02.17
17:23
(16) Так ты объясни, зачем дал эту ссылку
20 Fragster
 
гуру
28.02.17
17:32
(19) чтобы ты создавал не схему через программный интерфейс, а объект XDTO по схеме, который сам будет схемой
21 Cyberhawk
 
28.02.17
17:36
(20) Так это надо где-то схему для схемы хранить и поддерживать в актуальном состоянии - такое меня не устраивает (у меня все актуальные сведения хранятся в метаданных дерева конфигурации)
22 Вафель
 
28.02.17
17:37
(21) Так по ссылке и есть актуальная схема
23 Жан Пердежон
 
28.02.17
17:42
(21) она уже есть в стандартном наборе схем
24 Fragster
 
гуру
28.02.17
17:51
СхемаXML (XMLSchema)
СхемаДляСхемыXML (SchemaForSchema)
Использование:

Только чтение.
Описание:

Тип: СхемаXML.
Содержит схему для схемы XML.

Доступность:

Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
25 Вафель
 
28.02.17
17:57
а можете код написать как из схемы для схем делать свою схему
26 Fragster
 
гуру
28.02.17
18:46
хрень какая-то. не получается добавить в последовательность текст, хотя тип открытый


ПИ = "http://www.w3.org/2001/XMLSchema&quot;;
ПакетСхемы = ФабрикаXDTO.Пакеты.Получить(ПИ);
Корень = ПакетСхемы.КорневыеСвойства.Получить("schema");
ТипСхемы = Корень.Тип;
ТипАннотации = ПакетСхемы.КорневыеСвойства.Получить("annotation").Тип;
ТипСтрока = ФабрикаXDTO.Тип(ПИ, "string");
ОбъектСхемы = ФабрикаXDTO.Создать(ТипСхемы);
Аннотация = ФабрикаXDTO.Создать(ОбъектСхемы.annotation.ВладеющееСвойство.Тип);
Документация = ФабрикаXDTO.Создать(Аннотация.documentation.ВладеющееСвойство.Тип);
Последовательность = Документация.Последовательность();
Последовательность.Добавить("фыжвдар"); // тут ошибка :(

Аннотация.documentation.Добавить(Документация);
ОбъектСхемы.annotation.Добавить(Аннотация);

Запись = Новый ЗаписьXML;
Запись.УстановитьСтроку();
ФабрикаXDTO.ЗаписатьXML(Запись, ОбъектСхемы, Корень.Имя); // почему-то имя типа пустое, надо указывать имя корневого элемента
XML = Запись.Закрыть();
27 Cyberhawk
 
28.02.17
19:33
(23) (24) Фигасебе, не знал, благодарю!
28 Жан Пердежон
 
01.03.17
10:49
(28) (29) похоже эта проблема xdto для узлов со смешанным содержимым: при импорте из xml-схемы в xdto-пакеты 1С для таких типов добавляет еще одно свойство с без локального имени с формой "текст". Но это для типов объявленных явно, для типов же объявленных по месту использования (Определение типа) такой же финт, видимо, сделать забыли.
29 Fragster
 
гуру
01.03.17
10:58
напишите на [email protected] про проблему - ведь косяк досаточно серьезный
Независимо от того, куда вы едете — это в гору и против ветра!