Přizpůsobení souborového úložiště a serializace XML
Když uživatel uloží instanci, nebo modelu, specifické pro doménu jazyka (DSL) v Visual Studio, vytvoření nebo aktualizaci souboru XML.Soubor můžete znovu načíst znovu vytvořit modelu v úložišti.
Schéma serializace můžete přizpůsobit úpravou nastavení pod Chování serializace Xml v aplikaci Explorer DSL.Není uzel pod Chování serializace Xml pro všechny domény třídy, vlastnosti a vztah.Vztahy jsou umístěny v jejich zdroj tříd.Existují také uzly odpovídající tvar, konektor a diagramu tříd.
Můžete také napsat kód programu další upřesnění vlastního nastavení.
[!POZNÁMKA]
Pokud chcete uložit model v určitém formátu, ale není nutné ji znovu načíst z tohoto formuláře, zvažte text šablony vygenerovat výstup z modelu namísto vlastní serializaci schéma.Další informace naleznete v tématu Vytváření kódu z jazyka specifického pro doménu.
Model a diagramu soubory
Každý model obvykle ukládány do dvou souborů:
Model soubor má název, například Model1.mydsl.Uloží prvky modelu a vztahy a jejich vlastnosti.Příponu souboru, například .mydsl , závisí Přípona_názvu_souboru vlastnost Editor uzlu v definici DSL.
Diagram soubor má název, například Model1.mydsl.diagram.Uloží tvary, konektory a jejich pozice, barvy, tlouštěk čáry a jiných podrobností vzhled diagramu.Pokud uživatel odstraní .diagram soubor, základní informace v modelu nejsou ztraceny.Rozložení diagramu je ztraceno.Při otevření modelu výchozí nastavení tvarů a spojovacích čar budou vytvořeny.
Změňte příponu souboru DSL
Otevřete definici DSL.V aplikaci Explorer DSL klepněte na uzel editoru.
V okně Vlastnosti Upravit Přípona_názvu_souboru vlastnost.Nezahrnujte počáteční "." přípony názvu souboru.
V aplikaci Solution Explorer změnit název soubory šablony dvě položky v DslPackage\ProjectItemTemplates.Tyto soubory mají názvy, které tento formát:
myDsl.diagram
myDsl.myDsl
Výchozí schéma serializace
Chcete-li vytvořit například pro toto téma byla použita následující definici DSL.
Tento DSL byl použit k vytvoření modelu, který má následující vzhled na obrazovce.
Tento model byl uložíte a znovu otevřete v textovém editoru 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>
Oznámení o serializovaném modelu následující body:
Každý uzel XML má název, který je stejný jako název třídy domény, je malá počáteční písmeno.For example, familyTreeModel and person.
Vlastnosti domény, například název a BirthYear jsou serializován jako atributy v uzlů XML.Opět počáteční znak názvu vlastnosti je převeden na malá písmena.
Každý vztah je serializován jako uzlu XML vnořených uvnitř zdroje konec vztahu.Uzel má stejný název jako vlastnost Zdroj role, ale malá počáteční znak.
Například v definici DSL role s názvem People na získání FamilyTree třídy.V souboru XML, je reprezentováno uzel s názvem people vnořených uvnitř familyTreeModel uzel.
Cíl konec každé vložení vztahů je serializován jako uzel vnořené pod vztah.Například people uzel obsahuje několik person uzlů.
Konec cílové každý odkaz vztah serializována jako zástupný název, který kóduje odkaz na cílový prvek.
Například pod person uzlu, může být children vztah.Tento uzel obsahuje například zástupných názvů:
<personMoniker name="/f817b728-e920-458e-bb99-98edc469d78f/Elizabeth I" />
Principy zástupných názvů
Pro křížové odkazy mezi různými částmi diagram modelu a soubory používají zástupných názvů.Používají se také v .diagram soubor odkazuje na uzly v souboru modelu.Existují dvě formy zástupný název:
ID zástupných názvů nabídka identifikátor GUID cílový prvek.Příklad:
<personShapeMoniker Id="f79734c0-3da1-4d72-9514-848fa9e75157" />
Kvalifikované zástupných názvů klíčů určit cílový prvek podle hodnoty určené domény vlastnost nazvanou zástupný název klíče.Cílový prvek zástupný název je předchází zástupný název jeho nadřazený prvek ve stromu vložení vztahů.
Následující příklady jsou převzaty z DSL, ve kterém existuje je třída domény s názvem alba, která má vkládání vztah k doméně třídy Song s názvem:
<albumMoniker title="/My Favorites/Jazz after Teatime" /> <songMoniker title="/My Favorites/Jazz after Teatime/Hot tea" />
Kvalifikovaný zástupných názvů klíčů bude použit, pokud cílová třída obsahuje vlastnosti domény, jehož možnost Je zástupný název klíče je nastavena na true v Chování serializace Xml.V příkladu je tato možnost nastavena pro vlastnosti domény v doméně třídy "Album" a "Skladby" s názvem "Title".
Kvalifikovaný zástupných názvů klíčů jsou čitelnější než ID zástupných názvů.Chcete-li soubor XML soubory modelu číst uživatelé, zvažte použití zástupných názvů kvalifikovanou klíče.Je však možné nastavit více než jeden prvek mít stejný klíč zástupný název uživatele.Duplicitní klíče mohl soubor není správně znovu načíst.Proto pokud definujete pomocí zástupných názvů kvalifikovanou klíče odkazované domény třídy, zvažte způsobů, jak zabránit uživateli v uložení souboru, který má duplicitní zástupných názvů.
Nastavení třídy odkazovat podle ID zástupných názvů domény
Ujistěte se, že Je zástupný název klíče je false pro každou vlastnost domain třídy a jeho základní třídy.
V aplikaci Explorer DSL, rozbalte položku Xml serializace Behavior\Class Data\< třídy domény >\Element Data.
Ověřte, že Je zástupný název klíče je false pro každou vlastnost domény.
Pokud doména třídy základní třídy, opakujte postup v dané třídy.
Nastavit Serializovat Id = true pro třídu domény.
Tuto vlastnost lze nalézt v části Chování serializace Xml.
Nastavení domény třídy adresářem kvalifikovanou zástupných názvů klíčů
Nastavit Je zástupný název klíče pro vlastnost domain existující třídy domény.Typ vlastnosti musí být string.
V aplikaci Explorer DSL, rozbalte položku Xml serializace Behavior\Class Data\< třídy domény >\Element Dataa pak vyberte vlastnost domain.
V okně Vlastnosti nastavit Je zástupný název klíče na true.
-nebo-
Vytvoření nové domény třídy s názvem domény třídy nástroj.
Tento nástroj vytvoří nové třídy, která má vlastnost domain název.Je název prvku a Je zástupný název klíče vlastnosti této vlastnosti domény true.
-nebo-
Vytvoření vztahu dědičnosti z domény třídy do jiné třídy, která má vlastnost zástupný název klíče.
Zamezení duplicitní zástupných názvů
Pokud používáte kvalifikovaný zástupných názvů klíčů, je možné dvěma prvky modelu uživatele mohlo stejnou hodnotu vlastnosti klíče.Například vaše DSL má-li osoba, která má vlastnost název třídy, může uživatel nastavit názvy dvou prvků stejné.Přestože model může být uložen do souboru jej by znovu nenačte správně.
Existuje několik metod, které se této situaci vyhnout:
Nastavit Je název prvku = true pro vlastnost klíče domény.Vyberte vlastnost domain diagramu definice DSL a hodnotu nastavit v okně Vlastnosti.
Když uživatel vytvoří novou instanci třídy, způsobí tato hodnota vlastnosti domény automaticky přiřadit jinou hodnotu.Výchozí chování přidá číslo na konec názvu třídy.To nebrání uživateli změnu na duplicitní název, ale pomůže v případě, když uživatel není nastavena na hodnotu před uložením modelu.
Povolte ověření pro modem DSL.V aplikaci Explorer DSL, vyberte Editor\Validation a nastavte používá... vlastnosti a true.
Zde je automaticky generována ověřovací metoda, která kontroluje pro nejasnosti.Metoda je Load kategorie ověření.Tím zajistíte, že bude uživatel varován, že nebude možné znovu otevřít soubor.
Další informace naleznete v tématu Ověřování v jazyce specifickém pro doménu.
Zástupný název cesty a kvalifikátory
Kvalifikovaný klíč zástupný název končí zástupný název klíče a předponou je zástupný název nadřazené položky ve stromové struktuře vkládání.Například je zástupný název alba:
<albumMoniker title="/My Favorites/Jazz after Teatime" />
Potom jeden skladby v tomto albu může být:
<songMoniker title="/My Favorites/Jazz after Teatime/Hot tea" />
Pokud však alba odkazuje ID místo, pak zástupných názvů by být takto:
<albumMoniker Id="77472c3a-9bf9-4085-976a-d97a4745237c" />
<songMoniker title="/77472c3a-9bf9-4085-976a-d97a4745237c/Hot tea" />
Všimněte si, že je jedinečný identifikátor GUID je je nikdy předchází zástupný název nadřazené položky.
Pokud znáte určité domény vlastnost bude mít vždy jedinečnou hodnotu v rámci modelu, můžete nastavit Je zástupný název kvalifikátoru na true pro tuto vlastnost.To způsobí, že má být použit jako kvalifikátor, bez použití zástupného názvu nadřazené.Nastavíte-li například Je zástupný název kvalifikátoru a Je zástupný název klíče pro vlastnost domain Název třídy, alba, název nebo identifikátor v modelu se nepoužívá v zástupných názvů pro alba a jeho vloženého děti:
<albumMoniker name="Jazz after Teatime" />
<songMoniker title="/Jazz after Teatime/Hot tea" />
Přizpůsobení struktury XML
Chcete-li provést následující úpravy, rozbalte Chování serializace Xml uzel v aplikaci Explorer DSL.V rámci domény třídy rozbalte uzel prvku dat zobrazíte seznam vlastností a vztahů, které jsou v této třídě získání.Vyberte relaci a nastavit jeho možnosti v okně Vlastnosti.
Nastavit Vynechat prvek na true vynechat zdrojový uzel roli ponechat pouze seznam cílových prvky.Tuto možnost byste neměli nastavovat, pokud existuje více než jeden vztah mezi zdrojové a cílové třídy.
<familyTreeModel ...> <!-- The following node is omitted by using Omit Element: --> <!-- <people> --> <person name="Henry VIII" .../> <person name="Elizabeth I" .../> <!-- </people> --> </familyTreeModel>
Nastavit Použijte úplný formát vložit cílové uzly v uzlech představující vztah instance.Tato možnost je nastavena automaticky při přidání vlastnosti domény do domény vztah.
<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>
Nastavit znázornění = Element mít vlastnost domain uložen jako prvek místo jako hodnota atributu.
<person name="Elizabeth I" birthYear="1533"> <deathYear>1603</deathYear> </person>
Chcete-li změnit pořadí, ve kterém jsou atributy a vztahy serializovat, klepněte pravým tlačítkem na položku pod prvek dat a použít Nahoru nebo Dolů příkazy nabídky.
Hlavní přizpůsobení pomocí programového kódu
Můžete nahradit části nebo všech algoritmů serializace.
Doporučujeme, aby studie kód v Dsl\Generated Code\Serializer.cs a SerializationHelper.cs.
Přizpůsobení serializace určité třídy
Nastavit Je vlastní v uzlu pro třídy pod Chování serializace Xml.
Transformace všechny šablony sestavit řešení a zkoumat výsledné chyby kompilace.Komentáře v blízkosti každé chybě popisují, jaký kód, je nutné poskytnout.
Poskytnout vlastní serializaci pro celý model
- Přepsat metody v Dsl\GeneratedCode\SerializationHelper.cs
Možnosti Xml serializace chování
Uzel Xml serializace chování DSL Explorer obsahuje podřízený uzel pro jednotlivé domény třídy, vztah, tvar, konektor a diagramu.V každé z těchto uzlů je seznam vlastností a získání na tento prvek vztahy.Vztahy jsou reprezentovány samy i podle jejich zdroj tříd.
Následující tabulka shrnuje možnosti, které lze nastavit v této části definice DSL.V každém případě výběr prvku v aplikaci Explorer DSL a nastavte volby v dialogovém okně Vlastnosti.
Třída XML data
Tyto prvky se nacházejí v aplikaci Explorer DSL pod Data Behavior\Class serializace Xml.
Property |
Description |
Má vlastní prvek schématu |
Pokud je PRAVDA, znamená, že třída domény má vlastní prvek schématu |
Vlastní |
Toto nastavení platí, pokud chcete psát vlastní kód serializace a deserializace pro tuto třídu domény. Řešení a zjistěte chyby zjistit podrobné pokyny. |
Třída domény |
Třída domény, na které se vztahuje tento uzel datové třídy.Jen pro čtení |
Název prvku |
Název uzlu XML prvků této třídy.Výchozí hodnota je malá verze třídy název domény. |
Zástupný název atributu |
Název atributu, který používá zástupný název prvky obsahují odkaz.Pokud je pole prázdné, se používá název id nebo vlastnost klíče. V tomto příkladu je "název":<personMoniker name="/Mike Nash"/> |
Zástupný název prvku |
Název prvku xml pro zástupných názvů, které odkazují na prvky této třídy. Výchozí hodnota je malá verze dat s "Zástupný název" název třídy.Například:personMoniker |
Název typu zástupný název |
Název typ xsd pro zástupných názvů prvků této třídy.Je XSDDsl\Generated Code\*Schema.xsd |
Serializovat Id |
Pokud je hodnota True, prvek GUID do souboru.Musí být hodnota true, pokud není žádná vlastnost, která je označena Je zástupný název klíče a modem DSL definuje vztahy odkaz k této třídy. |
Název typu |
Název typu xml generované v xsd z třídy určené domény. |
Poznámky |
Neformální poznámky spojené s tímto prvkem |
Vlastnost XML Data
Vlastnost XML uzly se nacházejí pod uzly tříd.
Property |
Description |
Vlastnost Domain |
Vlastnost, na které se vztahuje konfigurační data xml serializace.Jen pro čtení |
Je zástupný název klíče |
Pokud je hodnota True, vlastnost se používá jako klíč pro vytváření zástupných názvů, které odkazují na instance této třídy domény. |
Je zástupný název kvalifikátoru |
V případě hodnoty True vlastnost se používá pro vytvoření kvalifikátor v zástupných názvů.Hodnota false a SerializeId není pro tuto třídu domény zástupných názvů jsou kvalifikovány zástupný název nadřazeného prvku ve vkládání stromu. |
Zastupování |
Pokud je atribut vlastnosti serializovat jako atribut xml; Pokud prvek, je serializován jako element; Pokud ignorovat, není serializovat. |
Název XML |
Název používaný pro vlastnost představující prvek nebo atribut xml.Standardně je to malá verze vlastnost název domény. |
Poznámky |
Neformální poznámky spojené s tímto prvkem |
Data XML Role
Uzly role data se nacházejí pod uzly zdroj třídy.
Property |
Description |
---|---|
Má vlastní zástupný název |
Nastavte na hodnotu true, pokud chcete zadat vlastní kód pro generování a zástupných názvů, které tento vztah křížovou řešení. Podrobné pokyny řešení a poklepejte na položku chybové zprávy. |
Vztah domény |
Určuje vztah, na které se vztahují tyto možnosti.Jen pro čtení |
Vynechat prvek |
Pokud je hodnota true, je vynechán uzel XML, který odpovídá roli zdroje ze schématu. Pokud existuje více než jeden vztah mezi třídami zdroj a cíl, tento uzel role rozlišuje mezi odkazy, které patří do dvou relací.Proto doporučujeme nastavení této možnosti v tomto případě. |
Název prvku role |
Určuje název prvku XML, který je odvozen z role zdroje.Výchozí hodnota je vlastnost název role. |
Úplný formulář. |
Pokud je PRAVDA, každý cílový prvek nebo zástupný název uzavřít do uzlu XML představující vztah.To je třeba nastavit na hodnotu true, pokud vztah má své vlastní vlastnosti domény. |
Viz také
Koncepty
Navigace v modelu a aktualizace modelu v kódu programu