Настройка хранилища файлов и XML-сериализации
Когда пользователь сохраняет экземпляр или модель, доменного языка (DSL) Visual Studioсоздается XML-файл или изменялись.Файл может быть перезапущен, чтобы повторно создать модель в хранилище.
Можно настраивать схема сериализации с помощью параметров вниз Реакция на событие сериализации XML в обозревателе DSL.Узел вниз Реакция на событие сериализации XML для каждого доменного класса, свойства и связи.Связи находятся в них классами источника.Также узлы, соответствующие фигуре, соединителю и классы схемы.
Также можно написать программный код для предварительной настройки.
Примечание |
---|
Если нужно сохранить модель в указанном формате, но не нужно перезапускать его из этой формы, попробуйте использовать текстовые шаблоны для создания выходных данных из моделей, а не пользовательской схемы сериализации.Дополнительные сведения см. в разделе Создание кода из доменного языка. |
Файлы модели и схемы
Каждая модель обычно сохраняется в файлах: 2
Файл модели имеет имя как Model1.mydsl.Он сохраняет элементы модели и связей, и их свойствами.Расширение файла .mydsl определяет FileExtension свойство Редактор узел в определении DSL.
Файл имеет имя, что и схемы Model1.mydsl.diagram.Он сохраняет фигуры, соединители, и их расположения, цвета, толщины линий и другие сведения представления схемы.Если пользователь удаляет a .diagram не теряются файл, необходимых данных в модели.Только структуру схемы будут потеряны.При открытии модели файл будет создан по умолчанию набор фигур и соединителей.
Чтобы изменить расширение файла DSL
Откройте определение DSL.в обозревателе DSL, щелкните узел редактора.
В окне свойств правка FileExtension свойство.Не включайте initial "." расширения имени файла.
В обозревателе решений измените имя файла шаблона элемента внутри 2 DslPackage\ProjectItemTemplates.Эти файлы, имена которых соответствует следующему формату:
myDsl.diagram
myDsl.myDsl
По умолчанию схема сериализации
Для создания примера для этого раздела используется следующее определение DSL.
Этот DSL использовался для создания модели, которая имеет следующий вид на экране.
Эта модель была сохранена, а затем была открыта заново в текстовом редакторе XML:
<?xml version="1.0" encoding="utf-8"?>
<familyTreeModel xmlns:dm0="https://schemas.microsoft.com/VisualStudio/2008/DslTools/Core" dslVersion="1.0.0.0" Id="f817b728-e920-458e-bb99-98edc469d78f" xmlns="https://schemas.microsoft.com/dsltools/FamilyTree">
<people>
<person name="Henry VIII" birthYear="1491" deathYear="1547" age="519">
<children>
<personMoniker name="/f817b728-e920-458e-bb99-98edc469d78f/Elizabeth I" />
<personMoniker name="/f817b728-e920-458e-bb99-98edc469d78f/Mary" />
</children>
</person>
<person name="Elizabeth I" birthYear="1533" deathYear="1603" age="477" />
<person name="Mary" birthYear="1515" deathYear="1558" age="495" />
</people>
</familyTreeModel>
Обратите внимание на следующие моменты о сериализованной модели:
Каждый узел имеет имя XML, так же, как и доменного имени класса, за исключением того, что начальное буква в нижнем регистре.Например, familyTreeModel и person.
Свойства домена, как имя и BirthYear сериализуются как атрибуты, в узлах XML.Опять-таки, начальный символ имени свойства преобразуется в нижний регистр.
Каждое отношение сериализуется как xml-узел находится внутри конца источника связи.Узел имеет то же имя, что роль свойства источника, но с начальным символом в нижнем регистре.
Например, в определении DSL, роль, которая называется People источником на FamilyTree класс.В формате XML это узел, представляемое именованным people о in familyTreeModel узел.
Конец каждого целевого объекта содержит отношения сериализуется как узел вложенных в связи.Например, people узел содержит несколько person узлы.
Конец каждого целевого объекта связи ссылки сериализуется как a моникер, кодирует ссылка на элемент целевого объекта.
Например, ниже a person узел, a children связь.Этот узел содержит моникеров, как:
<personMoniker name="/f817b728-e920-458e-bb99-98edc469d78f/Elizabeth I" />
Основные сведения о моникеры
Моникеры используются для представления перекрестные ссылки между разными частями модели и файлов схемы.Они также используются в .diagram файл, который необходимо обратиться к узлам в модели файле.2 Формы моникера.
Моникеры id закавычьте GUID элемента целевого объекта.Примеры.
<personShapeMoniker Id="f79734c0-3da1-4d72-9514-848fa9e75157" />
квалифицированные ключевые моникеры укажите целевой объект значением, обозначенного вызванного свойства домена ключом моникера.Моникер элемента целевого объекта присоединен префикс моникером родительского элемента в дереве внедрение связи.
В следующих примерах берутся из DSL, в котором доменный класс с именем Альбомом, который имеет внедрения связь с именем доменному класс Песней:
<albumMoniker title="/My Favorites/Jazz after Teatime" /> <songMoniker title="/My Favorites/Jazz after Teatime/Hot tea" />
Квалифицированные ключевые моникеры будут использоваться, если класс целевого объекта содержит свойства домена, для которого параметр Ключ моникера равно true IN Реакция на событие сериализации XML.В примере этот параметр устанавливается для свойства домена столбца "title" в доменных классах "альбоме" и "песне".
Квалифицированные ключевые моникеры легче читать, чем моникеры идентификатор.Если планируется XML модели файлов для чтения person, рассмотрите возможность использования полных ключевые моникеры.Однако возможно для пользователя установить несколько элементов, чтобы иметь один и тот же ключ моникера.Повторяющиеся ключи могут привести к тому, что файл не перезапустить правильно.Поэтому, если определить доменный класс, который ссылается на использование полных ключевые моникеров, следует рассмотреть способы предотвращения создания пользователя из сохранить файл, который содержит повторяющиеся моникеры.
Установка доменный класс, который будет ссылаться моникеры идентификатор
Убедитесь, что Ключ моникера существует false для каждого свойства в классе и его базовых классах.
Разверните в обозревателе DSL Реакция на событие сериализации XML по класса \ data \<доменный класс>\Element Data.
Проверьте, то Ключ моникера существует false для каждого свойства домена.
Если доменный класс имеет базовый класс, повторьте процедура в этом классе.
Установка Сериализация идентификатор. = true для доменного класса.
Это свойство можно найти вниз Реакция на событие сериализации XML.
Установка доменный класс для ссылки на полные ключевые моникеры
Установка Ключ моникера для свойства домена существующего доменного класса.Тип свойства должен иметь string.
Разверните в обозревателе DSL Реакция на событие сериализации XML по класса \ data \<доменный класс>\Element Data, а затем выберите свойство домена.
В окне свойства установите Ключ моникера В true.
- или -
Создайте новый класс с использованием доменный Доменный класс, именуемый средство.
Это средство создает новый класс, имеющий свойство домена именем.Имя элемента и Ключ моникера свойства этого свойства домена инициализируются true.
- или -
Создание связи наследования из доменного класса к другому классу, который содержит ключевое свойство моникера.
Во избежание повторяющихся моникеры
При использовании полных ключевые моникеров, то возможно, что 2 элемента в модели пользователя могут иметь одно и то же значение в ключевом свойстве.Например, если DSL имеет продажу, то класса, которая содержит имя свойства, пользователь может задать имена 2 элементов, чтобы быть одинаковым.Несмотря на то что модель может сохранять в файл, он не перезагрузитьTfа бы правильно.
Несколько методов, которые помогают избежать этой ситуации:
Установка Имя элемента = true для ключевого свойства домена.Выберите свойство в схеме определения домена DSL, а затем установите значение в окне свойства.
Когда пользователь создает новый экземпляр класса, причины этого значения свойства домена быть автоматически присвоенным другое значение.По умолчанию функциональности добавляет значение в конец имени класса.Это не мешает выполнению пользователя из изменить имя на дубликату, но помогает в случае, если пользователь не задает значение до сохранить модель.
Включите проверку DSL.В обозревателе DSL выберите редактор \ проверка и присвоить Использует… свойства true.
Автоматически создаваемый метод проверки, который проверяет неоднозначностей.Метод Load категория проверки.Это гарантирует, что пользователь будет предупрежен которому может оказаться невозможным повторное открытие файла.
Дополнительные сведения см. в разделе Проверка в доменных языках.
Пути и квалификаторы моникера
Уточненный ключевой моникер заканчивается ключом моникера и присоединен префикс с моникером родительского элемента в дереве внедрения.Например, если моникер альбома выглядит следующим образом:
<albumMoniker title="/My Favorites/Jazz after Teatime" />
Затем одну из песен в альбоме может быть:
<songMoniker title="/My Favorites/Jazz after Teatime/Hot tea" />
Однако если альбомы ссылается идентификатор вместо, моникеры был следующим образом:
<albumMoniker Id="77472c3a-9bf9-4085-976a-d97a4745237c" />
<songMoniker title="/77472c3a-9bf9-4085-976a-d97a4745237c/Hot tea" />
Обратите внимание, что поскольку идентификатор GUID, уникальным, его никогда не присоединено префикс моникером родительского элемента.
Если известно, что определенное свойство домена всегда будет иметь уникальное значение в модели, можно присвоить Квалификатор моникера В true для этого свойства.Это вызовет его для использования в качестве квалификатора без использования моникера родительского элемента.Например, если задать оба Квалификатор моникера и Ключ моникера для свойства домена объектов класса альбома, имя или идентификатор модели не используются в моникерах для внедренных альбома и его дочерних элементов:
<albumMoniker name="Jazz after Teatime" />
<songMoniker title="/Jazz after Teatime/Hot tea" />
Xml-структура настройки
Чтобы сделать следующие параметры, разверните Реакция на событие сериализации XML узел в обозревателе DSL.Под доменным классом, разверните узел элемента, чтобы просмотреть список свойств и связей, источником в этом классе.Выберите связь, и обрабатывайте его параметры в окне свойства.
Установка Отсоедините элемент true, чтобы исключить роль узла источника, покидая просто список элементов целевого объекта.Не рекомендуется установить этот параметр, если более чем одна связь между источником и классами целевого объекта.
<familyTreeModel ...> <!-- The following node is omitted by using Omit Element: --> <!-- <people> --> <person name="Henry VIII" .../> <person name="Elizabeth I" .../> <!-- </people> --> </familyTreeModel>
Установка Используйте полную форму внедрение узлы целевого объекта в узлах, представляющих экземпляры связи.Этот параметр устанавливается автоматически при добавлении свойства домена к доменной ссылки.
<familyTreeModel ...> <people> <!-- The following node is inserted by using Use Full Form: --> <familyTreeModelHasPeople myRelationshipProperty="x1"> <person name="Henry VIII" .../> </familyTreeModelHasPeople> <familyTreeModelHasPeople myRelationshipProperty="x2"> <person name="Elizabeth I" .../> </familyTreeModelHasPeople> </people> </familyTreeModel>
Установка Представление = Элемент иметь свойство домена, сохраняемое в качестве элемента, а не в виде значения атрибута.
<person name="Elizabeth I" birthYear="1533"> <deathYear>1603</deathYear> </person>
Чтобы изменить порядок, в котором атрибуты и связи, сериализуются, щелкните правой кнопкой мыши элемент с данными элемента и использования Переместить вверх OR Переместить вниз команды меню.
Основная конфигурация с помощью идентификатора программы
Можно заменить или все алгоритмы сериализации.
Рекомендуется изучаете код внутри Dsl\Generated Code\Serializer.cs и SerializationHelper.cs.
Настраивать сериализацию заданного класса
Установка Изготовлена custom в узле для класса вниз Реакция на событие сериализации XML.
Преобразовать все шаблоны, выполните построение решения и изучите полученный в результате ошибки компиляции.Комментарии около каждой ошибки объясняется, какой код необходимо задать.
Для реализации собственной сериализации для модели в целом
- Переопределите методы Dsl \ GeneratedCode \ SerializationHelper.cs
Параметры в расширениях функциональности xml-сериализации
В обозревателе DSL, узел расширения функциональности сериализации Xml содержит дочерний узел для каждого класса доменного класса, связи, фигуры соединителя и схемы.Под каждым из этих узлов список свойств и связей, найденных в этом элементе.Связей представлены в собственном и справа и ниже них классами источника.
В следующей таблице описываются параметры, которые можно установить в данном разделе определения DSL.В каждом случае выберите элемент в обозревателе DSL, и задайте параметры в окне свойства.
Данные классов Xml
Эти элементы располагаются в обозревателе DSL вниз Реакция на событие сериализации XML \ данные класса.
Свойство. |
Описание |
Имеет схему пользовательского элемента |
При значении true указывает на то, что доменный класс имеет схему пользовательского элемента |
Изготовлена custom |
Установите это значение True, если необходимо написать собственный код сериализации и десериализации для этого доменного класса. Выполните построение решения и выявите ошибки для обнаружения подробных инструкций. |
Доменный класс |
Доменный класс, к которому применяется данный узел данных класса.Только для чтения. |
Имя элемента |
Имя узла Xml для элементов этого класса.Значение по умолчанию lower-case версия доменного имени класса. |
Имя атрибута моникера |
Имя атрибута, используемого в элементах моникера, чтобы содержать ссылку.Если используются пробелы, имя ключевого свойства или идентификатор. В этом примере "имя": <personMoniker name="/Mike Nash"/> |
Имя элемента моникера |
Имя элемента xml, используемого моникеров, которые ссылаются на элементы для данного класса. Значение по умолчанию lower-case версия имени класса suffixed с моникером".Например, personMoniker. |
Имя типа моникера |
Имя типа xsd моникеров к элементам, созданного для этого класса.В XSD Dsl\Generated Code\*Schema.xsd |
Сериализация идентификатор. |
Значение true, если идентификатор GUID элемента включаются в файле.Это должно быть значение true, если свойство, которое помечено Ключ моникера и DSL определяет связи ссылки к этому классу. |
Имя типа |
Имя создаваемого типа xml в xsd из обозначенного доменного класса. |
Примечания |
Неофициальные заметки, связанные с этим элементом |
Данные свойства Xml
Узлы Xml свойства расположены под узлами класса.
Свойство. |
Описание |
Свойство домена |
Свойство, к которому применяются данные конфигурации сериализации xml.Только для чтения. |
Ключ моникера |
Если значение равно true, свойство используется в качестве ключа для создания моникеров, которые ссылаются на экземпляры этого доменного класса. |
Квалификатор моникера |
Если значение равно true, свойство используется для создания квалификатор в моникерах.Если значение равно false, и если SerializeId не задано значение true для данного доменного класса, моникеры определены моникером родительского элемента в дереве внедрения. |
Представление |
Если атрибут, свойство сериализуется как атрибут xml; если элемент, он сериализуется как элемент; если пропуск она не сериализуется. |
Имя Xml |
Имя, используемое для элемента или атрибута xml, представляющее свойство.По умолчанию это нижний регистр версия имени свойства домена. |
Примечания |
Неофициальные заметки, связанные с этим элементом |
Роль xml-данных
Роль узлов данных находится под узлами класса источника.
Свойство. |
Описание |
---|---|
Имеет пользовательский моникер |
Установите это значение true, если необходимо предоставить собственный код для создания и включение моникеров, просматривающие этот отношению. Подробные инструкции, постройте решение, а затем дважды щелкните сообщение об ошибке. |
Доменная связь |
Определяет отношение, к которому применяются эти параметры.Только для чтения. |
Отсоедините элемент |
Значение true, если узел XML, соответствующий роли источника опускается из схемы. Если более чем одна связь между источником и классами целевого объекта, то эта роль узла различие между связями, принадлежащих 2 связей.Мы поэтому рекомендуется не устанавливать этот параметр в данном случае. |
Роль имени элемента |
Указывает имя xml-элемента, который является производным от роли источника.По умолчанию роль имени свойства. |
Используйте полную форму |
Значение true, если каждый элемент целевого объекта или моникер заключены в узел XML, представляющая отношение.Это должно быть установлено в значение true, если связь имеет собственные свойства домена. |
См. также
Основные понятия
Перемещение по модели и обновление модели в коде программы