Personalizar el almacenamiento de archivos y la serialización XML
Cuando el usuario guarda una instancia, o el modelo, un lenguaje específico (DSL) de Visual Studio, un archivo XML se crea o se actualiza.El archivo se puede volver a cargar para volver a crear el modelo del almacén.
Puede personalizar el esquema de serialización ajustando los valores en Comportamiento de serialización XML en el Explorador de ADSL.Hay un nodo en Comportamiento de serialización XML para cada clase, propiedad, y relación de dominio.Las relaciones se encuentran en sus clases de origen.También hay nodos correspondiente a la forma, el conector, y las clases del diagrama.
También puede escribir el código de programa de una personalización más avanzada.
[!NOTA]
Si desea guardar el modelo en un formato determinado, pero no necesita recargarlo de ese formulario, considere usar plantillas de texto para generar el resultado del modelo, en lugar de un esquema personalizado de serialización.Para obtener más información, vea Generar código a partir de lenguajes específicos de dominio.
Archivos de modelo y de diagrama
Cada modelo se guarda normalmente en dos archivos:
El archivo modelo tiene un nombre como Model1.mydsl.Almacena los elementos y relaciones del modelo y sus propiedades.La extensión de archivo como .mydsl viene determinada por la propiedad de FileExtension de nodo de Editor en la definición del ADSL.
El archivo de diagrama tiene un nombre como Model1.mydsl.diagram.Almacena las formas, conectores, y sus posiciones, los colores, los espesores de línea, y otros detalles del aspecto del diagrama.Si el usuario elimina un archivo de .diagram , la información esencial del modelo no se pierde.Sólo el diseño del diagrama se pierde.Cuando se abre el archivo del modelo, se crearán un conjunto predeterminado de formas y conectores.
Para cambiar la extensión de archivo ADSL
Abra la definición ADSL.En el Explorador ADSL, haga clic en el nodo del editor.
en la ventana Propiedades, edite la propiedad de FileExtension .no incluya la inicial “.” de la extensión de nombre de archivo.
En el explorador de soluciones, cambie el nombre de los dos archivos de plantilla de elementos de DslPackage\ProjectItemTemplates.Estos archivos tienen nombres que cumplen este formato:
myDsl.diagram
myDsl.myDsl
El esquema de serialización predeterminado
Para crear un ejemplo de este tema, la siguiente definición ADSL se utilizó.
Este ADSL utilizado para crear un modelo que tiene el aspecto siguiente en la pantalla.
Este modelo se ha guardado y después abra de nuevo en el editor de texto 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>
Observe los siguientes sobre el modelo serializado:
Cada nodo XML tiene un nombre que sea igual que el nombre de clase de dominio, pero la letra inicial es minúscula.Por ejemplo, familyTreeModel y person.
Las propiedades de dominio como nombre y BirthYear son serializadas como atributos en nodos XML.Una vez más el carácter inicial del nombre de propiedad se convierte en minúsculas.
Cada relación es serializado como un nodo XML anidados dentro del extremo de origen de la relación.El nodo tiene el mismo nombre que de la propiedad de origen el rol, pero con un carácter inicial de minúscula.
Por ejemplo, en la definición de DSL, un rol denominado People se origina en la clase de FamilyTree .En XML, esto es representada por el nodo denominado people anidados dentro del nodo de familyTreeModel .
El extremo de destino de cada relación de incrustación es serializado como nodo anidada bajo relación.por ejemplo, el nodo de people contiene varios nodos de person .
El extremo de destino de cada relación de referencia es serializado como un moniker, que codifica una referencia al elemento de destino.
Por ejemplo, en el nodo de person , puede haber una relación de children .Este nodo contiene monikers como:
<personMoniker name="/f817b728-e920-458e-bb99-98edc469d78f/Elizabeth I" />
Monikers de introducción
Monikers se utilizan para representar referencias cruzadas entre diferentes partes del modelo y los archivos de diagrama.También se usan en el archivo de .diagram para hacer referencia a nodos en el archivo del modelo.Hay dos formas de moniker:
Monikers de id. citan el GUID del elemento de destino.Por ejemplo:
<personShapeMoniker Id="f79734c0-3da1-4d72-9514-848fa9e75157" />
Monikers clave calificados identifican el elemento de destino por el valor de un dominio designado propiedad denominada el moniker.El moniker del elemento de destino está precedido por el moniker del elemento primario del árbol de relaciones de incrustación.
Los ejemplos siguientes se toman ADSL en las que hay una clase de dominio denominada Album, que tiene una relación de incrustación a una clase de dominio denominada Song:
<albumMoniker title="/My Favorites/Jazz after Teatime" /> <songMoniker title="/My Favorites/Jazz after Teatime/Hot tea" />
Monikers clave calificados se utilizarán si la clase de destino tiene una propiedad de dominio para la que la opción La clave es el moniker se establezca en true en Comportamiento de serialización XML.En el ejemplo, esta opción se establece para las propiedades de dominio denominados “título” en las clases “álbum” y “Song” del dominio.
Los monikers clave calificados son más fáciles de leer que monikers de identificador.Si piensa XML de los archivos de modelo que se leerán personas, considere utilizar monikers clave calificados.Sin embargo, es posible que el usuario establezca más de un elemento para tener la misma clave el moniker.Claves duplicadas podrían hacer el archivo para no recargar correctamente.Por consiguiente, si define una clase de dominio que se haga referencia mediante monikers clave calificados, debe considerar formas de evitar que el usuario guarda un archivo con monikers duplicados.
Para establecer una clase de dominio que se hará referencia monikers de identificador
Asegúrese de que La clave es el moniker es false para cada propiedad de dominio en la clase y sus clases base.
En el Explorador ADSL, expanda XML de serialización comportamiento \Class Data \ <la clase de dominio> \Element Data.
Compruebe que La clave es el moniker es false para cada propiedad de dominio.
Si la clase de dominio tiene una clase base, repita el procedimiento de esa clase.
Establezca serialice el id. = true para la clase de dominio.
Esta propiedad se puede encontrar en Comportamiento de serialización XML.
Para establecer una clase de dominio que se hará referencia monikers clave calificados
Establezca La clave es el moniker para una propiedad del dominio de una clase existente del dominio.El tipo de propiedad debe ser string.
En el Explorador ADSL, expanda XML de serialización comportamiento \Class Data \ <la clase de dominio> \Element Data, y seleccionar la propiedad del dominio.
en la ventana Propiedades, establezca La clave es el moniker a true.
-O bien-
Cree una nueva clase de dominio utilizando la herramienta de Nombre denominado Class .
Esta herramienta crea una nueva clase que tiene una propiedad denominada name del dominio.es el nombre de elemento y las propiedades de La clave es el moniker de esta propiedad de dominio se inicializan con true.
-O bien-
Cree una relación de herencia de clases de dominio a otra clase con una propiedad de clave el moniker.
Evitar monikers duplicados
Si utiliza monikers clave calificados, es posible que dos elementos del modelo de un usuario podrían tener el mismo valor en la propiedad de clave.Por ejemplo, si un ADSL tiene una persona de la clase con un nombre de propiedad, el usuario podría establecer los nombres de dos elementos sea igual.Aunque el modelo se puede guardar el archivo, no recargaría correctamente.
Existen varios métodos que ayudan a evitar esta situación:
Establezca es el nombre de elemento = true para la propiedad clave de dominio.Seleccione la propiedad del dominio en el diagrama de la definición de ADSL y establezca el valor en la ventana Propiedades.
Cuando el usuario crea una nueva instancia de la clase, este valor la propiedad de dominio automáticamente de asignar un valor diferente.El comportamiento predeterminado agrega un número al final del nombre de clase.Esto no impide que el usuario cambie el nombre a un duplicado, pero ayuda en caso de que el usuario no establece el valor antes de guardar el modelo.
Validación de permiso para ADSL.En el Explorador ADSL, seleccione el editor \Validation, y establece las propiedades de utiliza… a true.
Hay un método automáticamente-generado de validación que comprueba la ambigüedad.el método está en la categoría de la validación de Load .Esto asegura que adviertan el usuario que puede no ser posible abrir el archivo.
Para obtener más información, vea La validación en los lenguajes específicos de dominio.
Rutas y calificadores el moniker
Los extremos clave completos de un moniker con la clave del moniker, y llevan el moniker del elemento primario del árbol de incrustación.Por ejemplo, si el moniker de un álbum:
<albumMoniker title="/My Favorites/Jazz after Teatime" />
A continuación uno de Songs en ese álbum podría ser:
<songMoniker title="/My Favorites/Jazz after Teatime/Hot tea" />
Sin embargo, si álbumes se hace referencia en el identificador en su lugar, los monikers es como sigue:
<albumMoniker Id="77472c3a-9bf9-4085-976a-d97a4745237c" />
<songMoniker title="/77472c3a-9bf9-4085-976a-d97a4745237c/Hot tea" />
Observe que como GUID es único, nunca es precedido por el moniker del elemento primario.
Si sabe que una propiedad determinada de dominio siempre tendrá un valor único en un modelo, puede establecer Es el calificador de moniker a true para esa propiedad.Esto la hará que se utilizará como calificador, sin utilizar el moniker del elemento primario.Por ejemplo, si se Es el calificador de moniker establecido y La clave es el moniker para la propiedad del dominio de título de la clase de álbumes, el nombre del modelo o identificador no utilizan en los monikers del álbum y sus elementos secundarios incrustados:
<albumMoniker name="Jazz after Teatime" />
<songMoniker title="/Jazz after Teatime/Hot tea" />
Personalizar la estructura XML
Para crear personalizaciones siguientes, expanda el nodo de Comportamiento de serialización XML en el Explorador de ADSL.Bajo la clase de dominio, expanda el nodo de los datos de elemento para ver la lista de propiedades y relaciones que son su origen en esta clase.Seleccione una relación y ajustan las opciones en la ventana Propiedades.
Establezca omita el elemento en true para omitir del nodo de origen el rol, y no solo la lista de elementos de destino.No debe establecer esta opción si hay más de una relación entre el origen y las clases de destino.
<familyTreeModel ...> <!-- The following node is omitted by using Omit Element: --> <!-- <people> --> <person name="Henry VIII" .../> <person name="Elizabeth I" .../> <!-- </people> --> </familyTreeModel>
Establezca Utilice el formato completo para insertar nodos de destino en los nodos que representan las instancias de la relación.Esta opción se establece automáticamente al agregar propiedades de dominio a relación de dominio.
<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>
Establezca representación = Elemento tener una propiedad de dominio guardada como elemento en lugar de como valor de atributo.
<person name="Elizabeth I" birthYear="1533"> <deathYear>1603</deathYear> </person>
Para cambiar el orden en que los atributos y las relaciones son serializados, haga clic con el botón secundario en un elemento en datos de elemento, y utilizar los comandos de menú de Subir o de Bajar .
Personalización importante utilizando código de programa
Puede reemplazar partes o todos los algoritmos de serialización.
Se recomienda estudia el código en Dsl\Generated Code\Serializer.cs y SerializationHelper.cs.
para personalizar la serialización de una clase determinada
Establezca es personalizado en el nodo de esa clase en Comportamiento de serialización XML.
Transformar Todas las plantillas, compile la solución, e investigar los errores de compilación resultantes.Los comentarios cerca de cada error explican qué código tiene que proporcionar.
Para proporcionar dispone de serialización para el conjunto de modelos
- Métodos de reemplazo en ADSL \GeneratedCode\SerializationHelper .cs
Opciones del comportamiento de Serialización XML
En el Explorador ADSL, el nodo del comportamiento de Serialización XML contiene un nodo secundario para cada clase de la clase, de la relación, de la forma, el conector y de diagrama de dominio.En cada uno de los nodos es una lista de propiedades y relaciones originarias en el elemento.Las relaciones se representan por derecho propio y en sus clases de origen.
La tabla siguiente resume las opciones que puede establecer en esta sección de la definición del ADSL.En cada caso, seleccione un elemento en el Explorador ADSL, y establezca las opciones en la ventana Propiedades.
Datos de clase de XML
Estos elementos se encuentran en el Explorador ADSL en Comportamiento \Class Data de la serialización XML.
Propiedad. |
Descripción |
Tiene esquema de elemento personalizado |
Si es True, indica que la clase de dominio tiene un esquema de elemento personalizado |
es personalizado |
Establezca esta propiedad en True si desea escribir dispone del código de serialización y deserialización para esta clase de dominio. Compile la solución e investigar errores para detectar instrucciones detalladas. |
Clase de dominio |
Clase de dominio a la que este nodo de datos de la clase aplica.Sólo lectura. |
Nombre del elemento |
Nombre de nodo XML para los elementos de esta clase.El valor predeterminado es una versión minúsculas del nombre de clase de dominio. |
Nombre de atributo del moniker |
Nombre del atributo utilizado en elementos el moniker para contener la referencia.si el espacio en blanco, el nombre de la propiedad de clave o el id. se utiliza. en este ejemplo, es “nombre”: <personMoniker name="/Mike Nash"/> |
Nombre de elemento el moniker |
Nombre del elemento XML utilizado para los monikers que hacen referencia a los elementos de esta clase. El valor predeterminado es una versión minúsculas del nombre de clase con el sufijo con “moniker”.Por ejemplo, personMoniker. |
Nombre de tipo el moniker |
Nombre del tipo XSD generado para los monikers a los elementos de esta clase.El XSD está en Dsl\Generated Code\*Schema.xsd |
serialice el id. |
Si es True, el elemento GUID se incluye en el archivo.Debe ser true si no existe ninguna propiedad que es La clave es el moniker marcado y ADSL define relaciones de referencia a esta clase. |
Nombre de tipo |
Nombre del tipo XML generado en el XSD de la clase designada del dominio. |
Notas |
Notas informales asociado a este elemento |
Datos de propiedad de XML
Los nodos de la propiedad XML se encuentran en nodos de la clase.
Propiedad. |
Descripción |
Propiedad de dominio |
Propiedad a la que los datos de configuración de serialización de XML aplica.Sólo lectura. |
La clave es el moniker |
Si es True, la propiedad se utiliza como clave para crear los monikers que hacen referencia las instancias de esta clase de dominio. |
Es el calificador de moniker |
Si es True, la propiedad se utiliza para crear el calificador en monikers.Si es false, y si SerializeId no es true para esta clase de dominio, los monikers se diferencian por el moniker del elemento primario del árbol de incrustación. |
Representación |
Si el atributo, la propiedad será serializado como un atributo XML; si el elemento, es serializado como elemento; si se omite, no está serializado. |
Nombre XML |
Nombre utilizado para el atributo o elemento XML que representa la propiedad.De forma predeterminada, ésta es una versión en minúscula de nombre de propiedad del dominio. |
Notas |
Notas informales asociado a este elemento |
De los datos XML rol
El rol de los nodos de los datos se encuentra en nodos de la clase de origen.
Propiedad. |
Descripción |
---|---|
Tiene moniker personalizado |
Establezca esta propiedad en true si desea proporcionar el propio código para generar y resolver los monikers que atraviesan esta relación. Para obtener instrucciones detalladas, compile la solución, y haga doble clic en los mensajes de error. |
Relación de dominio |
Especifica la relación a la que estas opciones se aplican.Sólo lectura. |
omita el elemento |
Si es true, el nodo XML que corresponde al rol del origen se omite del esquema. Si hay más de una relación entre el origen y las clases de destino, este rol de nodo distingue los vínculos que pertenecen a las dos relaciones.Por consiguiente se recomienda no establecer esta opción en este caso. |
Nombre de rol de elemento |
Especifica el nombre del elemento XML que es derivado del rol del origen.El valor predeterminado es el nombre de rol de propiedad. |
Formulario completo de uso |
Si es true, cada elemento de destino o moniker se incluye en un nodo XML que representa la relación.Esto se debe establecer en true si la relación tiene sus propias propiedades de dominio. |
Vea también
Conceptos
Navegar y actualizar un modelo en el código del programa