Dostosowywanie pliku magazynu i serializacji XML
Gdy użytkownik zapisuje wystąpienie, lub model, specyficzne dla domeny języka (DSL) w Visual Studio, plik XML jest tworzony lub aktualizowany.Plik można wykorzystać do odtworzenia wzoru w magazynie.
Schematu serializacji można dostosować, zmieniając ustawienia w obszarze Zachowanie serializacji Xml w Eksploratorze DSL.Brak węzła w obszarze Zachowanie serializacji Xml dla każdej domeny klasy, właściwości i relacji.Relacje znajdują się w ich klas źródła.Istnieją również węzłów odpowiadający kształt łącznika i diagram klas.
Można także napisać kod programu bardziej zaawansowane dostosowanie.
[!UWAGA]
Jeśli chcesz zapisać model w określonym formacie, ale nie trzeba go ponownie załadować z tego formularza, należy rozważyć użycie tekstu szablonów do generowania danych wyjściowych z modelu, zamiast schematu serializacji niestandardowej.Aby uzyskać więcej informacji, zobacz Generowanie kodu w języku specyficzne dla domeny.
Model i pliki diagramu
Każdy model jest zwykle zapisywana w dwóch plików:
Plik modelu ma nazwę, takich jak Model1.mydsl.Przechowuje elementy modelu i relacje oraz ich właściwości.Rozszerzenie pliku, takie jak .mydsl jest określona przez Rozszerzenie_pliku właściwość edytora węzeł w definicji DSL.
Plik diagramu ma nazwę, takich jak Model1.mydsl.diagram.Przechowuje ona kształtów, łączniki i ich stanowiska, kolorów, grubości linii i inne szczegóły wygląd diagramu.Jeśli użytkownik usunie .diagram pliku, istotne informacje w modelu nie zostaną utracone.Układ diagramu zostaną utracone.Po otwarciu pliku modelu domyślnego zestawu kształtów i łączników, które zostaną utworzone.
Aby zmienić rozszerzenie pliku DSL
Otwórz definicji DSL.W Eksploratorze DSL kliknij węzeł edytor.
W oknie dialogowym właściwości edytować Rozszerzenie_pliku właściwości.Nie obejmują wstępne "." rozszerzenia nazwy pliku.
W oknie Solution Explorer, należy zmienić nazwę elementu dwóch plików szablonów w DslPackage\ProjectItemTemplates.Te pliki mają nazwy, które należy wykonać w tym formacie:
myDsl.diagram
myDsl.myDsl
Domyślnego schematu serializacji
Aby utworzyć przykład dla tego tematu, wykorzystano następującą definicję DSL.
DSL ten został użyty do utworzenia modelu, który ma następujący wygląd na ekranie.
Ten model został zapisany i ponownym otwarciu w edytorze tekstowym 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>
Zwróć uwagę następujące kwestie dotyczące szeregowany modelu:
Każdy węzeł XML ma nazwę, która jest taka sama, jak nazwa klasy domeny, z wyjątkiem, że pierwsza litera jest małymi literami.For example, familyTreeModel and person.
Właściwości domeny, takie jak nazwa i BirthYear są szeregowane jako atrybuty w węzłów XML.Ponownie początkowy znak nazwa właściwości jest konwertowane na małe litery.
Każda relacja jest seryjny jako węzeł XML zagnieżdżone wewnątrz źródła końca relacji.Węzeł ma taką samą nazwę jak właściwość rolę źródła, lecz początkowy znak małe litery.
Na przykład w definicji DSL, rolę, jaką nosi nazwę People jest sprowadzana na FamilyTree klasy.W formacie XML, to jest reprezentowany przez węzeł o nazwie people zagnieżdżone wewnątrz familyTreeModel węzła.
Koniec docelowej każdego osadzania relacji jest seryjny jako węzeł zagnieżdżone pod relacji.Na przykład people węzeł zawiera kilka person węzłów.
Koniec docelowych każda relacja odniesienia jest seryjny jako moniker, który koduje odwołanie do elementu docelowego.
Na przykład, w ramach person węzła, może być children relacji.Ten węzeł zawiera monikerów, takie jak:
<personMoniker name="/f817b728-e920-458e-bb99-98edc469d78f/Elizabeth I" />
Zrozumienie monikerów
Monikery są używane do reprezentowania odsyłacze między poszczególnymi częściami pliki modelu i diagram.Są one również używane w .diagram pliku do odwoływania się do węzłów w pliku modelu.Istnieją dwie formy monikera:
Identyfikator monikerów oferta identyfikator GUID elementu docelowego.Na przykład:
<personShapeMoniker Id="f79734c0-3da1-4d72-9514-848fa9e75157" />
Kwalifikacje monikerów klucza identyfikacji elementu docelowego przez wartość właściwości domeny wyznaczone, nazywany kluczem monikera.Moniker elementu docelowego jest poprzedzane moniker jego elementu nadrzędnego w drzewie osadzanie relacje.
Poniższe przykłady są pobierane z DSL w którym jest klasą domeny o nazwie Album, który ma relację osadzania do domeny klasy Song nazwane:
<albumMoniker title="/My Favorites/Jazz after Teatime" /> <songMoniker title="/My Favorites/Jazz after Teatime/Hot tea" />
Kwalifikowaną monikerów kluczy będą używane, jeśli Klasa docelowa zawiera właściwości domeny, którego opcja Klucz Moniker jest jest ustawiona na true w Zachowanie serializacji Xml.Na przykład opcja ta jest ustawiona dla właściwości domeny o nazwie "Tytuł" w klasach domeny "Album" i "Song".
Kwalifikowaną monikerów klucza są bardziej czytelny niż monikerów identyfikator.Jeżeli zamierzasz XML pliki modelu do odczytu przez ludzi, należy rozważyć korzystanie z monikerów klucza kwalifikowaną.Jednak jest możliwe dla użytkownika ustawić więcej niż jeden element, które mają ten sam klucz monikera.Zduplikowane klucze, może spowodować, że plik nie ponownie załadować poprawnie.W związku z tym w przypadku zdefiniowania klasy domeny, do którego odwołuje się korzystanie z monikerów klucza kwalifikowaną, należy rozważyć sposoby uniemożliwia zapisanie pliku, który ma duplikat monikerów użytkownika.
Aby ustawić klasę domeny, aby odwoływać się monikerów identyfikator
Upewnij się, że Klucz Moniker jest jest false dla każdej domeny właściwości klasy i jej klas podstawowych.
W Eksploratorze DSL, rozwiń węzeł Data\ Behavior\Class serializacji Xml< klasa domeny >\Element danych.
Sprawdź, czy Klucz Moniker jest jest false dla każdej właściwości domeny.
Jeśli klasa domeny ma klasy podstawowej, należy powtórzyć procedurę w tej klasie.
Ustaw Szeregować identyfikator = true dla klasy domeny.
Właociwooć tę można znaleźć w Zachowanie serializacji Xml.
Aby ustawić klasę domeny wykorzystanie przez kwalifikowaną monikerów klucza
Ustaw Jest klucz Moniker dla właściwości domeny z klasy istniejącej domeny.Typ właściwości musi być string.
W Eksploratorze DSL, rozwiń węzeł Data\ Behavior\Class serializacji Xml< klasa domeny >\Element danych, a następnie wybierz właściwości domeny.
W oknie dialogowym właściwości ustaw Jest klucz Moniker do true.
- lub -
Tworzenie nowej klasy domeny, za pomocą Klasy domeny o nazwie narzędzia.
Narzędzie to tworzy nową klasę, który ma właściwość domeny o nazwie nazwa.Jest nazwą elementu i Jest klucz Moniker właściwości tej właściwości domeny są inicjowane na true.
- lub -
Tworzenie relacji dziedziczenia z klasy domeny do innej klasy, która ma właściwość klucza monikera.
Unikanie monikerów duplikat
Jeśli używasz kwalifikowaną monikerów klucza, jest możliwe, dwa elementy w modelu użytkownik może mieć taką samą wartość właściwości klucza.Na przykład jeśli modem DSL ma klasy osoba, która ma właściwość Name, użytkownika można ustawić nazwy dwóch elementów w taki sam.Chociaż model może być zapisana w pliku, to byłoby nie zostanie odświeżona poprawnie.
Istnieje kilka metod, które pozwalają uniknąć tej sytuacji:
Ustaw Jest nazwą elementu = true dla właściwości klucza domeny.Wybierz właściwość domeny na diagramie definicji DSL, a następnie ustaw wartość w oknie właściwości.
Gdy użytkownik tworzy nową instancję klasy, ta wartość powoduje, że właściwości domeny, automatycznie przypisywany inną wartość.Domyślne zachowanie dodaje numer do końca nazwy klasy.To nie uniemożliwia użytkownikowi zmianę nazwy w dwóch egzemplarzach, ale pomaga w przypadku, gdy użytkownik nie ustawiać wartości przed zapisaniem modelu.
Włączanie sprawdzania poprawności dla modemu DSL.W Eksploratorze DSL, zaznacz Editor\Validation i ustaw używa... właściwości, aby true.
Istnieje metoda generowane automatycznie sprawdzania poprawności, który sprawdza, czy dla niejasności.Metoda jest w Load sprawdzania poprawności kategorii.To sprawia, że użytkownik będzie wyświetlane ostrzeżenie że może nie być możliwe ponowne otwarcie pliku.
Aby uzyskać więcej informacji, zobacz Sprawdzanie poprawności w języku specyficzne dla domeny.
Kwalifikatory i ścieżki monikera.
Kwalifikowaną moniker klucza kończy się klucz moniker i jest prefiksem moniker nadrzędnego w drzewie osadzania.Na przykład, jeśli jest moniker Album:
<albumMoniker title="/My Favorites/Jazz after Teatime" />
Następnie utwory muzyczne z tego albumu może być:
<songMoniker title="/My Favorites/Jazz after Teatime/Hot tea" />
Jednakże jeśli albumy odwołuje się identyfikator zamiast, następnie monikerów byłoby w następujący sposób:
<albumMoniker Id="77472c3a-9bf9-4085-976a-d97a4745237c" />
<songMoniker title="/77472c3a-9bf9-4085-976a-d97a4745237c/Hot tea" />
Należy zauważyć, że ponieważ identyfikator GUID jest unikatowa, to nigdy nie poprzedza moniker jego obiektu nadrzędnego.
Jeśli wiadomo, że właściwości określonej domeny zawsze będą mieć unikatową wartość w modelu, można ustawić Kwalifikator Moniker jest do true dla tej właściwości.Spowoduje on być użyty jako kwalifikator, bez korzystania z monikera obiektu nadrzędnego.Na przykład, jeżeli wartość Kwalifikator Moniker jest i Jest klucz Moniker dla właściwości domeny nazwa klasy Album, nazwa lub identyfikator modelu nie jest używany w monikerów dla albumu i jego osadzony dzieci:
<albumMoniker name="Jazz after Teatime" />
<songMoniker title="/Jazz after Teatime/Hot tea" />
Dostosowywanie struktury XML
Aby wykonać następujące dostosowania, rozwiń węzeł Zachowanie serializacji Xml węzeł w Eksploratorze DSL.W obszarze klasy domeny rozwiń węzeł Element danych, aby zobaczyć listę właściwości i relacji, które są zatrudniani na tej klasy.Wybierz relację i dopasować jego opcje w oknie dialogowym właściwości.
Ustaw Pominąć Element do PRAWDA, aby pominąć węzeł rolę źródła, pozostawiając tylko na liście elementów docelowych.Nie należy Ustaw tę opcję, jeśli istnieje więcej niż jedną relację między klasami źródłowej i docelowej.
<familyTreeModel ...> <!-- The following node is omitted by using Omit Element: --> <!-- <people> --> <person name="Henry VIII" .../> <person name="Elizabeth I" .../> <!-- </people> --> </familyTreeModel>
Ustaw Użyj pełnej formy do osadzenia węzłów docelowych w węzłach reprezentacji wystąpień relacji.Ta opcja jest ustawiana automatycznie podczas dodawania właściwości domeny do domeny relacji.
<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>
Ustaw reprezentację = elementu do właściwości domeny, zapisane jako element, a nie jako wartość atrybutu.
<person name="Elizabeth I" birthYear="1533"> <deathYear>1603</deathYear> </person>
Aby zmienić kolejność szeregowane atrybutów i relacji, kliknij prawym przyciskiem myszy element w obszarze elementu danych i użyj Przenieś w górę lub Przenieś w dół polecenia menu.
Dostosowywanie głównych przy użyciu kodu programu
Można zastąpić część lub całość algorytmy serializacji.
Zaleca się, że badanie jest kod w Dsl\Generated Code\Serializer.cs i SerializationHelper.cs.
Aby dostosować serializacji danej klasy
Ustaw Jest niestandardowa w węźle dla tej klasy, pod Zachowanie serializacji Xml.
Przekształć wszystkie szablony, tworzenie rozwiązania i zbadać powstałych błędów kompilacji.Uwagi w pobliżu każdego błędu wyjaśnić, jaki jest numer kierunkowy muszą dostarczyć.
Aby zapewnić własne serializacji dla całego modelu.
- Zastąpić metody w Dsl\GeneratedCode\SerializationHelper.cs
Opcje w zachowaniu serializacji Xml
W Eksploratorze DSL węzeł zachowanie serializacji Xml zawiera węzeł podrzędny dla każdego klasy domen, relacja, kształt, łącznika i diagram klasy.W obszarze każdego z tych węzłów jest lista właściwości i powierzając jej ich konserwację, w tym element relacje.Relacje są reprezentowane, zarówno we własnym, jak i w klasach ich źródła.
W poniższej tabeli zestawiono opcje, które można ustawić w tej sekcji definicji DSL.W każdym przypadku zaznacz element w Eksploratorze DSL i ustaw opcje w oknie dialogowym właściwości.
Dane XML, klasa
Te elementy znajdują się w Eksploratorze DSL, pod Dane Behavior\Class serializacji Xml.
Właściwość |
Opis |
Ma niestandardowy Element schematu |
Jeśli wartość True, wskazuje, że klasa domeny ma schemat niestandardowy element |
Jest niestandardowy |
Ustaw to PRAWDA, jeśli chcesz napisać własny kod serializacji i deserializacji dla tej klasy domeny. Tworzenie rozwiązania i zbadaj błędy odnajdowanie szczegółowe instrukcje. |
Klasa domeny |
Klasa domeny, do którego stosuje się ten węzeł danych klasy.Tylko do odczytu. |
Nazwa elementu |
Nazwa węzła XML dla elementów tej klasy.Wartością domyślną jest małą wersję Nazwa klasy domeny. |
Nazwa atrybutu monikera. |
Nazwa atrybutu, wykorzystywane w elementach moniker zawierają odniesienia.Jeśli pole pozostanie puste, nazwa właściwości klucza lub identyfikator jest używany. W tym przykładzie jest to, "nazwa":<personMoniker name="/Mike Nash"/> |
Nazwa elementu monikera. |
Nazwa elementu xml używany do monikerów, które odwołują się do elementów tej klasy. Wartością domyślną jest mała wersja Nazwa klasy zakończonymi na "Monikera".Na przykład personMoniker. |
Nazwa typu monikera. |
Nazwa typu xsd generowane dla monikerów elementów tej klasy.Znajduje się w pliku XSDDsl\Generated Code\*Schema.xsd |
Szeregować identyfikator |
Jeśli True, element identyfikator GUID jest zawarty w pliku.Musi to być wartość true, jeśli nie istnieje żadna właściwość, która jest oznaczona jako Jest klucz Moniker i modem DSL określa relacje odniesienie do tej klasy. |
Wpisz nazwę |
Nazwa typu xml generowane w xsd z klasy wyznaczonych domeny. |
Notatki |
Nieformalne notatek skojarzonych z tego elementu |
Dane XML, właściwość
Węzły właściwości XML znajdują się pod węzłami klasy.
Właściwość |
Opis |
Właściwości domeny |
Właściwość, którego dotyczy dane konfiguracyjne serializacji xml.Tylko do odczytu. |
Moniker klucza |
Jeśli wartość True, jest używana jako klucz do tworzenia monikerów odwołujące się do wystąpienia tej klasy domeny. |
Jest kwalifikator monikera. |
Jeśli wartość True, jest używana do tworzenia monikerów kwalifikatora.Jeśli ma wartość FAŁSZ i SerializeId nie jest prawdziwe dla tej klasy domeny, jest kwalifikowana monikerów moniker elementu nadrzędnego w drzewie osadzania. |
Reprezentacja |
Jeżeli atrybut, właściwość jest seryjny jako atrybut xml; Jeśli Element jest zaszeregowani elementu; Jeśli Ignoruj, nie jest seryjny. |
Nazwa XML |
Nazwa atrybutu xml lub reprezentujących właściwość elementu.Domyślnie jest to małą wersję nazwa właściwości domeny. |
Notatki |
Nieformalne notatek skojarzonych z tego elementu |
Dane XML roli
Rolę węzłów danych znajdują się w węzłach klasy źródła.
Właściwość |
Opis |
---|---|
Ma niestandardowe monikera. |
Set to true, jeśli użytkownik chce dostarczyć kodzie do generowania i rozpoznawania monikerów, które przy przechodzeniu przez folder tej relacji. Szczegółowe instrukcje zbudować roztworu, a następnie kliknij dwukrotnie komunikaty o błędach. |
Relacja domeny |
Określa relację, do których stosuje się te opcje.Tylko do odczytu. |
Pominąć Element |
Jeśli wartość true, węzeł XML, który odpowiada rolę źródła została pominięta ze schematu. Jeśli istnieje więcej niż jedną relację między klasami źródłowa i docelowa, ten węzeł roli rozróżnia łącza, które należą do dwóch relacje.Dlatego zaleca się nie ustawienie tej opcji w tym przypadku. |
Nazwa elementu roli |
Określa nazwę elementu XML, który jest pochodną rolę źródła.Wartością domyślną jest nazwa właściwości roli. |
Użyj pełnej formy |
Jeśli ma wartość true, każdy element docelowy lub moniker jest ujęty w węźle XML reprezentującą stosunek.Powinien być ustawiony na true, jeśli relacja ma swoje właściwości domeny. |
Zobacz też
Koncepcje
Przeglądanie i aktualizowanie modelu w kod programu