Personalizzazione dell'archiviazione dei file e della serializzazione XML
quando l'utente salva un'istanza, o modello, un linguaggio specifico di (DSL) dominio in Visual Studio, un file XML viene creato o aggiornato.Il file può essere ricaricatoe per ricreare il modello nell'archivio.
È possibile personalizzare la combinazione di serializzazione modificando le impostazioni in comportamento di serializzazione XML nel modello DSL Esplora Risorse.Esiste un nodo sotto comportamento di serializzazione XML per ogni classe di dominio, proprietà e relazioni.Le relazioni presenti nelle relative classi di origine.Esistono inoltre nodi che corrispondono alla forma, il connettore e classi del diagramma.
È anche possibile scrivere codice programma per la personalizzazione più avanzata.
[!NOTA]
Se si desidera salvare il modello in un determinato formato, ma non è necessario ricaricarlo da tale form, considerare l'utilizzo dei modelli di testo di generare l'output del modello, anziché una combinazione di serializzazione personalizzata.Per ulteriori informazioni, vedere Generazione di codice da un linguaggio specifico di dominio.
Modello e i diagrammi
Ogni modello in genere viene salvato in due file:
Il file di modello dispone di un nome come Model1.mydsl.Contiene gli elementi del modello e le relazioni e le relative proprietà.l'estensione di file come .mydsl è determinato dal FileExtension proprietà di editor nodo nella definizione di modello DSL.
Il file diagramma dispone di un nome come Model1.mydsl.diagram.Archivia le forme, connettori e le relative posizioni, colori, pesi di riga e altri dettagli del diagramma.Se l'utente elimina un oggetto .diagram il file, le informazioni essenziali nel modello non viene perso.Solo il layout del diagramma viene perso.Quando il file di modello è aperto, un set predefinito di forme e di connettori verrà creato.
Per modificare l'estensione di file di un modello DSL
Aprire la definizione di modello DSL.Nel modello DSL Esplora Soluzioni, fare clic sul nodo dell'editor.
Nella Finestra Proprietà, impostare FileExtension proprietà.Non includere l'elemento “.„ l'estensione di file.
In Esplora soluzioni, modificare il nome dei due file di modello di elemento in DslPackage\ProjectItemTemplates.Questi file hanno nomi che seguono il formato seguente:
myDsl.diagram
myDsl.myDsl
La combinazione predefinita di serializzazione
Per creare un esempio di questo argomento, la seguente definizione di modello DSL è stata utilizzata.
Questo modello DSL è stato utilizzato per creare un modello che ha il seguente aspetto sullo schermo.
Questo modello è stato salvato e quindi si riapre un editor di testo 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>
Tenere presenti le informazioni seguenti sul modello serializzato:
Ogni nodo XML dispone di un nome che sarà uguale a quello della classe di dominio, ad eccezione del fatto che la lettera iniziale è in minuscolo.Ad esempio, familyTreeModel e person.
Le proprietà del dominio come nome e BirthYear vengono serializzate come attributi nei nodi XML.Nuovamente, il carattere iniziale del nome della proprietà viene convertito in minuscolo.
Ogni relazione viene serializzata come nodo XML annidato all'entità finale di origine della relazione.Il nodo ha lo stesso nome del ruolo di origine della proprietà, ma con un carattere iniziale minuscolo.
Ad esempio, nella definizione di modello DSL, un ruolo denominato People è origine a FamilyTree classe.Nel file XML, questo è rappresentato dal nodo denominato people annidato a familyTreeModel nodo.
L'entità finale di destinazione di ogni relazione includendo viene serializzata come nodo annidato sotto la relazione.Ad esempio, people il nodo contiene diversi person nodi.
L'entità finale di destinazione di ogni relazione di riferimento viene serializzata come a moniker, che codifica un riferimento all'elemento di destinazione.
Ad esempio, in un oggetto person nodo, è possibile che si sia a children relazione.questo nodo contiene i moniker come:
<personMoniker name="/f817b728-e920-458e-bb99-98edc469d78f/Elizabeth I" />
Moniker di l
I moniker vengono utilizzati per rappresentare i riferimenti incrociati tra le diverse parti del modello e i file del diagramma.Vengono inoltre utilizzati in .diagram file per fare riferimento ai nodi nel file di modello.Sono disponibili due forme del moniker:
moniker di identificazione racchiudere il GUID dell'elemento di destinazione.Di seguito è riportato un esempio:
<personShapeMoniker Id="f79734c0-3da1-4d72-9514-848fa9e75157" />
moniker principali qualificati identificare l'elemento di destinazione per il valore di una proprietà definita del dominio denominata chiave del moniker.Il moniker dell'elemento di destinazione è preceduto dal moniker del relativo elemento padre nella struttura ad albero di incorporare le relazioni.
Negli esempi sono composti da un linguaggio specifico di dominio in cui è presente una classe di dominio denominata Album, che ha una relazione che utilizza una classe di dominio denominata Song:
<albumMoniker title="/My Favorites/Jazz after Teatime" /> <songMoniker title="/My Favorites/Jazz after Teatime/Hot tea" />
I moniker principali qualificati verranno utilizzati se la classe di destinazione con una proprietà del dominio per il quale l'opzione È la chiave del moniker è impostato su true in comportamento di serializzazione XML.Nell'esempio, questa opzione è impostata per le proprietà del dominio denominate “titolo„ nelle classi di dominio “album„ e “brano„.
i moniker principali qualificati sono più facili da leggere che i moniker di ID.Se si intende XML dei file di modello da leggere dagli utenti, considerare l'utilizzo dei moniker principali qualificati.Tuttavia, è possibile che l'utente imposti più di un elemento per avere la stessa chiave del moniker.Le chiavi duplicate possono fare in modo che il file a non ricaricare correttamente.Pertanto, se si definisce una classe di dominio a cui viene fatto riferimento utilizzando i moniker principali qualificati, è necessario considerare le modalità di impedire all'utente di salvare un file con moniker duplicati.
Per impostare una classe di dominio che può fare riferimento ai moniker ID.
Assicurarsi che È la chiave del moniker viene false per ogni proprietà di dominio nella classe e le relative classi base.
Nel modello DSL Esplora Soluzioni, espandere Di serializzazione XML comportamento \Class Data \ <la classe di dominio> \Element Data.
Verificare gli aspetti È la chiave del moniker viene false per ogni proprietà del dominio.
Se la classe di dominio dispone di una classe base, ripetere la procedura di tale classe.
set Serializzare ID. = true per la classe di dominio.
Questa proprietà può essere rilevato in comportamento di serializzazione XML.
Per impostare una classe di dominio che può fare riferimento ai moniker principali qualificati
set È la chiave del moniker per una proprietà del dominio di una classe di dominio esistente.Il tipo della proprietà deve essere string.
Nel modello DSL Esplora Soluzioni, espandere Di serializzazione XML comportamento \Class Data \ <la classe di dominio> \Element Dataquindi selezionare la proprietà del dominio.
Nella Finestra Proprietà, impostare È la chiave del moniker in true.
- oppure -
Creare una nuova classe di dominio utilizzando il classe di dominio denominata strumento.
Questo strumento crea una nuova classe che ha una proprietà del dominio chiamata nome.È il nome dell'elemento e È la chiave del moniker le proprietà di questa proprietà del dominio vengono inizializzate a true.
- oppure -
Creare una relazione di ereditarietà dalla classe di dominio in un'altra classe che ha una proprietà chiave del moniker.
Evitare i moniker duplicati
Se si utilizzano moniker principali qualificati, è possibile che due elementi nel modello di un utente possono avere lo stesso valore della proprietà chiave.Ad esempio, se il modello DSL è persona della classe con un nome di proprietà, l'utente potrebbe impostare i nomi di due elementi dello stesso.Sebbene il modello può essere salvata per archiviare, non ricaricherebbe correttamente.
Esistono diversi metodi che consentono di evitare questa situazione:
set È il nome dell'elemento = true per la proprietà principale del dominio.Selezionare la proprietà del dominio nel diagramma della definizione di modello DSL e quindi impostare il valore nella Finestra Proprietà.
Quando l'utente crea una nuova istanza della classe, questo valore della proprietà del dominio automaticamente da assegnare un valore diverso.Il comportamento predefinito aggiunge un numero alla fine del nome della classe.Ciò non impedisce all'utente di modificare il nome di un duplicato, ma consente nel caso in cui l'utente non presenta il valore salvare il modello.
Per abilitare la convalida del modello DSL.Nel modello DSL Esplora Risorse, l'editor selezionato \Validation e imposta utilizza… proprietà di true.
Esiste un metodo di convalida automaticamente-generato per il controllo della disponibilità di ambiguità.Il metodo viene in Load categoria di convalida.Ciò garantisce che sia visualizzato un avviso che potrebbe non essere possibile riaprire il file.
Per ulteriori informazioni, vedere Convalida in un linguaggio specifico di dominio.
Percorsi e qualificatori del moniker
Un moniker principale qualificato termina con la chiave del moniker e è preceduto dal moniker del padre nella struttura ad albero che utilizza.Ad esempio, se il moniker di un album è:
<albumMoniker title="/My Favorites/Jazz after Teatime" />
Scegliere una delle canzoni nell'album potrebbe essere:
<songMoniker title="/My Favorites/Jazz after Teatime/Hot tea" />
Tuttavia, se album viene fatto riferimento in alternativa, i moniker essere il seguente:
<albumMoniker Id="77472c3a-9bf9-4085-976a-d97a4745237c" />
<songMoniker title="/77472c3a-9bf9-4085-976a-d97a4745237c/Hot tea" />
Si noti che poiché un GUID univoco, non è mai precedute dal moniker del padre.
Se si sa che una particolare proprietà del dominio avrà sempre un valore univoco all'interno di un modello, è possibile impostare È il qualificatore del moniker in true per tale proprietà.In questo modo si consente a essere utilizzato come qualificatore, senza utilizzare il moniker del padre.Ad esempio, se si impostano entrambe È il qualificatore del moniker e È la chiave del moniker per la proprietà del dominio del titolo della classe dell'album, il nome o l'identificatore del modello non viene utilizzato nei moniker per l'album e i relativi figli incorporati:
<albumMoniker name="Jazz after Teatime" />
<songMoniker title="/Jazz after Teatime/Hot tea" />
Personalizzare la struttura XML
Per effettuare le seguenti operazioni, espandere comportamento di serializzazione XML nodo nel modello DSL Esplora Risorse.In una classe di dominio, espandere il nodo di dati degli elementi per visualizzare l'elenco delle proprietà e le relazioni che sono un controllo a questa classe.Selezionare una relazione e impostare le relative opzioni nella Finestra Proprietà.
set omettere l'elemento per allineare per omettere il ruolo di origine del nodo, lasciando solo l'elenco degli elementi di destinazione.Non è necessario impostare questa opzione se c " è maggiore di una relazione tra origine e di destinazione.
<familyTreeModel ...> <!-- The following node is omitted by using Omit Element: --> <!-- <people> --> <person name="Henry VIII" .../> <person name="Elizabeth I" .../> <!-- </people> --> </familyTreeModel>
set form completo di utilizzo per importare i nodi di destinazione in nodi che rappresentano le istanze della relazione.Questa opzione è impostata automaticamente quando si aggiunge le proprietà di dominio a una relazione di 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>
set rappresentazione = elemento per impostare una proprietà del dominio salvata come elemento anziché come valore dell'attributo.
<person name="Elizabeth I" birthYear="1533"> <deathYear>1603</deathYear> </person>
Per modificare l'ordine in cui gli attributi e le relazioni vengono serializzate, fare clic con il pulsante destro del mouse su un elemento con i dati degli elementi e utilizzare Alzare o Sposta giù comandi del menu.
Personalizzazione di base utilizzando il codice del programma
È possibile sostituire parti o tutti algoritmi di serializzazione.
È consigliabile studiate il codice in Dsl\Generated Code\Serializer.cs e SerializationHelper.cs.
Per personalizzare la serializzazione di una particolare classe
set Viene personalizzato nel nodo relativo a tale classe in comportamento di serializzazione XML.
Trasformazione di tutti i modelli, compilare la soluzione ed esaminare gli errori di compilazione risultanti.I commenti accanto a ciascun errore viene illustrato il codice che è necessario fornire.
Per fornire diventi proprietaria di serializzazione per il modello intero
- Metodi di override in Dsl \GeneratedCode\SerializationHelper .cs
Opzioni del comportamento di serializzazione XML
Nel modello DSL Esplora Risorse, il nodo del comportamento di serializzazione XML contiene un nodo figlio per ogni classe classi di dominio, di relazione, in forma, del connettore e del diagramma.In ognuno di questi nodi è un elenco di proprietà e le relazioni un controllo all'elemento.Le relazioni vengono rappresentate sia nel diritto che nelle relative classi di origine.
Nella tabella seguente vengono riepilogate le opzioni che è possibile impostare in questa sezione della definizione di modello DSL.In ogni caso, selezionare un elemento nel modello DSL Esplora Risorse e impostare le opzioni nella Finestra Proprietà.
Dati della classe XML
Questi elementi presenti nel modello DSL Esplora Soluzioni sotto comportamento \Class Data di serializzazione XML.
Proprietà |
Descrizione |
Ha schema dell'elemento personalizzato |
Se true, indica che la classe di dominio presenta uno schema dell'elemento personalizzato |
Viene personalizzato |
Impostare tale proprietà su true se si desidera scrivere per contenere il codice di serializzazione e deserializzazione di serializzazione per questa classe di dominio. Compilare la soluzione ed esaminare gli errori per individuare le istruzioni dettagliate. |
classe di dominio |
Classe di dominio a cui questo nodo dati della classe viene applicato.Sola lettura. |
Nome elemento |
Nome nodo XML per gli elementi di questa classe.Il valore predefinito è una versione in lettere minuscole nel nome di classe di dominio. |
Nome di attributo del moniker |
Nome dell'attributo utilizzato in elementi del moniker per contenere il riferimento.Se lo spazio vuoto, il nome della proprietà chiave o l'id viene utilizzato. in questo esempio, è “nome„: <personMoniker name="/Mike Nash"/> |
Nome dell'elemento del moniker |
Nome dell'elemento XML utilizzato per i moniker che fanno riferimento agli elementi di questa classe. Il valore predefinito è una versione in lettere minuscole nel nome della classe che con “il moniker„.Ad esempio personMoniker. |
Nome del tipo del moniker |
Nome del tipo di XSD generato per i moniker agli elementi di questa classe.XSD è in Dsl\Generated Code\*Schema.xsd |
Serializzare ID. |
Se le True, l'elemento GUID sono incluse nel file.Questa operazione deve essere true se non c " è proprietà contrassegnata È la chiave del moniker e il modello DSL definisce le relazioni di riferimento sulla classe. |
Nome tipo |
Nome del tipo XML generato in XSD dalla classe di dominio definita. |
Note |
Note informali associate a questo elemento |
Dati della proprietà XML
I nodi della proprietà XML sono disponibili nei nodi della classe.
Proprietà |
Descrizione |
Proprietà del dominio |
Proprietà a cui i dati di configurazione della serializzazione XML vengono applicate.Sola lettura. |
È la chiave del moniker |
Se le True, la proprietà viene utilizzato come chiave per creare i moniker che le istanze di riferimento della classe di dominio. |
È il qualificatore del moniker |
Se le True, la proprietà viene utilizzato per creare il qualificatore nei moniker.Se false e se SerializeId non vale per questa classe di dominio, i moniker sono qualificate dal moniker dell'elemento padre nella struttura ad albero che utilizza. |
Rappresentazione |
Se l'attributo, la proprietà viene serializzata come attributo XML, se l'elemento, viene serializzato come elemento; se ignorare, non viene serializzato. |
Nome XML |
Nome utilizzato per l'attributo o l'elemento XML che rappresenta la proprietà.Per impostazione predefinita, questa è una versione in lettere minuscole nel nome della proprietà del dominio. |
Note |
Note informali associate a questo elemento |
Di dati XML ruolo
Il ruolo dei nodi dati viene trovato nei nodi di origine della classe.
Proprietà |
Descrizione |
---|---|
Il moniker personalizzato |
Impostare tale proprietà su true se si desidera fornire il proprio codice per la generazione e la risoluzione dei moniker che passa attraverso questa relazione. Per istruzioni dettagliate, compilare la soluzione e quindi fare doppio clic sui messaggi di errore. |
relazione di dominio |
Specifica la relazione a cui queste opzioni vengono applicate.Sola lettura. |
omettere l'elemento |
Se true, il nodo XML che corrisponde al ruolo di origine viene omesso dallo schema. Se c " è maggiore di una relazione tra origine e di destinazione, questo ruolo del nodo fa distinzione tra i collegamenti che appartengono a due relazioni.Pertanto si consiglia di non impostare questa opzione in questo caso. |
Nome dell'elemento Role |
Specifica il nome dell'elemento XML che deriva dal ruolo di origine.il valore predefinito è il ruolo di nome proprietà. |
form completo di utilizzo |
Se true, ogni elemento o moniker di destinazione è incluso nel nodo XML che rappresenta la relazione.Questa operazione deve essere impostata su true se il rapporto presenta proprietà del dominio. |
Vedere anche
Concetti
Esplorazione e aggiornamento di un modello nel codice del programma