|
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"; ПакетСхемы = Фабрика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] про проблему - ведь косяк досаточно серьезный
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |