GraphML Primer

Original: http://graphml.graphdrawing.org/primer/graphml-primer.html

 

Redakcja:
Ulrik Brandes ulrik.brandes@uni-konstanz.de,
Markus Eiglsperger eiglsper@web.de,
Jürgen Lerner lerner@inf.uni-konstanz.de

 


Abstrakcyjny

GraphML Primer jest dokument nienormatywne na celu dostarczenie czytelny opis obiektów GraphML, i jest ukierunkowana na szybko zrozumieć, jak tworzyć dokumenty GraphML. Starter ten opisuje funkcje językowe poprzez przykłady, które są uzupełnione odniesieniami do tekstów normatywnych.

Spis treści
1 Wprowadzenie
2 Podstawowe pojęcia
2.1 Proste Wykres
2.2 Nagłówek
2.3 Wykres Tolology
2.3.1 Deklarowanie Graph
2.3.2 Deklarowanie węzła
2.3.3 Deklarowanie Edge
2.4 Atrybuty
2.4.1 GraphMLAtrybuty Przykład
2.4.2 Deklarowanie GraphMLAtrybuty
2.4.4 Definiowanie wartości GraphMLAtrybut
2.5 Informacje o składni
3 Zaawansowane Pojęcia I: Zagnieżdżone Wykresy, Hyperedges & Porty
3.1 Wykresy zagnieżdżony
3.2 Hyperedges
3.3 Porty
4 Zaawansowane Koncepcje II: Rozszerzenie GraphML
4.1 Dodawanie atrybutów XML do GraphML Elements
4.2 Dodawanie typów złożonych


1 Wprowadzenie

Dokument ten GraphML Primer, stanowi opis GraphML i powinny być stosowane wraz z formalnym opisem zawartym w języku specyfikacji GraphML.Grupa docelowa tego dokumentu zawiera twórcom aplikacji, których programy odczytu i zapisu plików GraphML i użytkowników, którzy chcą komunikować się z programów wykorzystujących GraphML import / eksport.Tekst zakłada, że masz podstawową wiedzę na temat języka XML 1.0 oraz XMLprzestrzeni nazw. Podstawowa znajomość XML Schema się także, że w niektórych częściach tego dokumentu. Każda z głównych części gruntu wprowadza nowe funkcje języka, i opisuje te cechy w kontekście konkretnych przykładów.

 Rozdział 2 obejmuje podstawowe mechanizmy GraphML. Opisuje w jaki sposób zadeklarować prosty wykres, definiując jego węzłów i krawędzi, a jak dodać proste dane użytkownika na wykresie.

Rozdział 3 opisuje modele wykresów, które zawierają zagnieżdżone wykresy, hyperedges i porty.

Rozdział 4 opisuje mechanizmy rozszerzenia GraphML przechowywanie danych specyficznych kompleks aplikacji.

Starter jest nonnormatywnego dokumentu, co oznacza, że nie zapewniają ostateczne określenie języka GraphML. Przykłady i inne materiały objaśniające w tym dokumencie, aby pomóc Ci zrozumieć GraphML, ale nie zawsze mogą dostarczyć ostatecznych odpowiedzi. W takich przypadkach, należy odnieść się do specyfikacji GraphML i pomóc to zrobić, oferujemy wiele linki kierujące do odpowiednich części specyfikacji.

2 Podstawowe pojęcia

Celem dokumentu GraphML jest określenie wykresu. Zacznijmy rozważając wykres pokazany na rysunku poniżej. Zawiera 11 węzłów i 12 krawędzi.
Prosty wykres

 

Image of example graph

2.1 Proste Wykres

Wykres jest zawarty w simple.graphml pliku:
Prosty wykres

<?xml version="1.0" encoding="UTF-8"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns
     http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">
  <graph id="G" edgedefault="undirected">
    <node id="n0"/>
    <node id="n1"/>
    <node id="n2"/>
    <node id="n3"/>
    <node id="n4"/>
    <node id="n5"/>
    <node id="n6"/>
    <node id="n7"/>
    <node id="n8"/>
    <node id="n9"/>
    <node id="n10"/>
    <edge source="n0" target="n2"/>
    <edge source="n1" target="n2"/>
    <edge source="n2" target="n3"/>
    <edge source="n3" target="n5"/>
    <edge source="n3" target="n4"/>
    <edge source="n4" target="n6"/>
    <edge source="n6" target="n5"/>
    <edge source="n5" target="n7"/>
    <edge source="n6" target="n8"/>
    <edge source="n8" target="n7"/>
    <edge source="n8" target="n9"/>
    <edge source="n8" target="n10"/>
  </graph>
</graphml>

Dokument GraphML składa się z elementu graphml i różnych podelementy: graph, node, edge. W dalszej części tego rozdziału omówimy te elementy w szczegółach i pokazać, w jaki sposób zdefiniować wykres.

2.2 Nagłówek

W tej części omówimy części dokumentu, które są wspólne dla wszystkich dokumentów GraphML, w zasadzie elementu graphml .
Nagłówek w odniesieniu XML Schema

<?xml version="1.0" encoding="UTF-8"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns 
     http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">

  ...

</graphml>

Pierwsza linia dokumentu jest instrukcja proces XML, która określa, że dokument przylega do XML 1.0 standard i że kodowanie dokumentu jest UTF-8, standard kodowania dla dokumentów XML. Oczywiście inne kodowania mogą być wybrane dla dokumentów GraphML.

Drugi wiersz zawiera element root-elementu dokumentu GraphML: element graphml.Element graphml, podobnie jak wszystkie inne elementy GraphML, należy do przestrzeni nazw http://graphml.graphdrawing.org/xmlns. Z tego powodu możemy zdefiniować ten obszar nazw jako domyślnej przestrzeni nazw w dokumencie, dodając XML Atrybut xmlns = http://graphml.graphdrawing.org/xmlns” do niego. Potrzebne są dwa inne atrybuty XML, aby określić schemat XML dla tego dokumentu. W naszym przykładzie używamy standardowego schematu dla dokumentów GraphML znajdujących się na serwerze graphdrawing.org.Pierwszy atrybut, xmlns: xsi = http://www.w3.org/2001/XMLSchema-instance”, definiuje xsi jako przestrzeni nazw XML Schema.Druga cecha, XSI: schemaLocation = http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd”, określa lokalizację XML Schema dla wszystkich elementów w GraphML nazw.

XML Schema odniesienia nie jest wymagane, ale zapewnia środki do sprawdzania poprawności dokumentu, a zatem jest zdecydowanie zalecane.
Nagłówek bez odniesienia XML Schema

 

2.3 Wykres

Wykres jest, nie jest zaskoczeniem, oznaczony przez element wykresu. Zagnieżdżone wewnątrz elementu wykresu deklaracje węzłów i krawędzi.Węzeł jest zadeklarowana z elementem węzła, a egde z elementem krawędzi.
Określenie wykresu

  <graph id="G" edgedefault="directed">
    <node id="n0"/>
    <node id="n1"/>
    ...
    <node id="n10"/>
    <edge source="n0" target="n2"/>
    <edge source="n1" target="n2"/>
    ...
    <edge source="n8" target="n10"/>
  </graph>

W GraphML nie ma porządek określony dla wyglądu node i edge elementów. Dlatego Poniższy przykład jest całkowicie poprawny fragment GraphML:
Określenie wykresu

  <graph id="G" edgedefault="directed">
    <node id="n0"/>
    <edge source="n0" target="n2"/>
    <node id="n1"/>
    <node id="n2"/>
    ...
  </graph>

 

2.3.1 Deklarowanie Graph

Wykresy na GraphML miesza się, innymi słowy, może zawierać kierowane i nieukierunkowane krawędzie, w tym samym czasie. Jeśli nie jest określona, gdy w kierunku krawędzi jest podana w kierunku domyślnego jest nakładany na krawędź. Kierunek domyślny jest zadeklarowana jako edgedefault XML Atrybut elementu graph .Dwie możliwe wartości dla tego atrybutu XML są kierowane i nieukierunkowana. Zauważ, że domyślny kierunek musi być określona.

Opcjonalnie identyfikator wykresu można określić z identyfikatorem XML Atrybut id.Jest on wykorzystywany, gdy jest to konieczne, aby odwołać się do wykresu.

2.3.2 Deklarowanie węzła
Węzły na wykresie są deklarowane przez element węzła. Każdy węzeł ma identyfikator, który musi być unikatowa w obrębie całego dokumentu, tj, w dokumencie nie może być żadnych dwa węzły z tym samym identyfikatorem.Identyfikator węzła jest określony przez identyfikator atrybutu XML.

2.3.3 Deklarowanie Edge

Krawędzie w grafie są deklarowane przez element krawędzi. Każda krawędź musi zdefiniować swoje dwa punkty końcowe ze źródłem XMLAtrybuty i cel. Jeśli wartości źródłowej, wzgl. target musi być identyfikatorem węzła w tym samym dokumencie.

Krawędzie z tylko jednego punktu końcowego, zwanych także pętle, selfloops lub refleksyjne krawędziach, są zdefiniowane poprzez tę samą wartość dla źródła i przeznaczenia.

XMLAtrybut opcjonalny skierowana oświadcza, jeśli krawędź jest skierowana lub niekierowanego.Wartość prawda deklaruje reżyserii krawędź, wartość false nieukierunkowana krawędź. Jeśli kierunek nie jest jawnie zdefiniowane kierunku domyślnego jest stosowany do tej krawędzi, jak zdefiniowano na wykresie okalającego.

Opcjonalnie identyfikator krawędzi może być określony z identyfikatorem XML atrybutu.Id XMLAtrybut jest stosowany, gdy jest to niezbędne do odniesienia krawędzi.
Krawędź ze wszystkimi atrybutami zdefiniowany XML-

    ...
    <edge id="e1" directed="true" source="n0" target="n2"/>
    ...

 

2.4 GraphMLAtrybuty

W poprzedniej części omówiliśmy jak opisać topologię wykresie w GraphML. Podczas gdy czysty informacje topologiczne może być wystarczająca dla niektórych appications z GraphML, w większości czasu jest potrzebne dodatkowe informacje. Dzięki przedłużeniu GraphMLZalety można określić dodatkowe informacji typu prostego dla elementów wykresu. Proste typu oznacza, że informacje są ograniczone do wartości skalarnych, np wartości liczbowe i łańcuchy.

Jeśli chcesz dodać do wykresu zawartość zorganizowanego elementy należy zastosować mechanizm wewnętrzny klucz / dane z GraphML. Na szczegółowy opis tego mechanizmu można znaleźć w rozdziale 4. GraphMLAtrybuty themselfes wyspecjalizowane danych / Kluczowe rozszerzenia.

GraphMLAtrybuty nie mogą być mylone z XMLatrybutów, które są różne pojęcia.

2.4.1 GraphMLAtrybuty Przykład

W tej części wykresu z kolorowymi węzłów i wag krawędzi będzie naszym systemem przykładem.
Wykres z kolorowych węzłów i wag krawędzi.
Obraz kolorowy przykład wykresu

Image of colored example graph

Użyjemy GraphMLatrybutów do przechowywania dodatkowych danych na temat węzłów i krawędzi.Plik attributes.graphml pokazuje wynik:
Przykład dokumentu GraphML z GraphMLatrybutów

<?xml version="1.0" encoding="UTF-8"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns"  
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns 
        http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">
  <key id="d0" for="node" attr.name="color" attr.type="string">
    <default>yellow</default>
  </key>
  <key id="d1" for="edge" attr.name="weight" attr.type="double"/>
  <graph id="G" edgedefault="undirected">
    <node id="n0">
      <data key="d0">green</data>
    </node>
    <node id="n1"/>
    <node id="n2">
      <data key="d0">blue</data>
    </node>
    <node id="n3">
      <data key="d0">red</data>
    </node>
    <node id="n4"/>
    <node id="n5">
      <data key="d0">turquoise</data>
    </node>
    <edge id="e0" source="n0" target="n2">
      <data key="d1">1.0</data>
    </edge>
    <edge id="e1" source="n0" target="n1">
      <data key="d1">1.0</data>
    </edge>
    <edge id="e2" source="n1" target="n3">
      <data key="d1">2.0</data>
    </edge>
    <edge id="e3" source="n3" target="n2"/>
    <edge id="e4" source="n2" target="n4"/>
    <edge id="e5" source="n3" target="n5"/>
    <edge id="e6" source="n5" target="n4">
      <data key="d1">1.1</data>
    </edge>
  </graph>
</graphml>

2.4.2 Deklarowanie GraphMLAtrybuty

GraphMLAtrybut definiuje się przez kluczowy element, który określa identyfikator, nazwę, typ i domenę atrybutu.

Identyfikator określony przez identyfikator atrybutu XML i jest używany w odniesieniu do GraphML atrybutu wewnątrz dokumentu.

Nazwa GraphMLatrybutów jest określona przez attr.name XML-Atrybut i musi być unikalny wśród wszystkich GraphMLatrybutów zadeklarowanych w dokumencie.Celem aplikacji jest to, że nazwa może określić znaczenie atrybutu. Należy zauważyć, że nazwa GraphML atrybutu nie jest używany wewnątrz dokumentu, identyfikator jest używany do tego celu.

Typ GraphMLatrybutu może być logiczna, int, długo, float, double lub łańcuch. Typy te są zdefiniowane jak odpowiednich typów w Java (TM) języku -Programming.

Domena GraphMLatrybut określa, dla których elementy wykresu GraphMLAtrybut jest zadeklarowana. Możliwe wartości to wykres, węzeł, krawędzi i wszystko.
Deklaracja atrybut GraphML

    ...
    <key id="d1" for="edge" attr.name="weight" attr.type="double"/>
    ...


Możliwe jest określenie wartości domyślnej dla GraphMLatrybutów.Treść tekstu elementu domyślnego określa tę wartość domyślną.
Deklaracja atrybut GraphML z Wartość domyślna

    ...
  <key id="d0" for="node" attr.name="color" attr.type="string">
    <default>yellow</default>
  </key>
    ...


2.4.3 Definiowanie wartości GraphMLAtrybut

Wartość GraphML atrybutu dla elementu wykresu jest utworzony przez element danych zagnieżdżona wewnątrz elementu do elementu wykresu.Element danych ma klucz XML atrybutu, który odnosi się do identyfikatora GraphMLatrybutów.Wartość atrybutu jest GraphML Zawartość tekst elementu danych. Ta wartość musi być typu zadeklarowanego w odpowiedniej definicji klawisza.
Wartości GraphMLAtrybut

 

...
  <key id="d0" for="node" attr.name="color" attr.type="string">
    <default>yellow</default>
  </key>
  <key id="d1" for="edge" attr.name="weight" attr.type="double"/>
  <graph id="G" edgedefault="undirected">
    <node id="n0">
      <data key="d0">green</data>
    </node>
    <node id="n1"/>
    ...
    <edge id="e0" source="n0" target="n2">
      <data key="d1">1.0</data>
    </edge>
    <edge id="e1" source="n0" target="n1">
      <data key="d1">1.0</data>
    </edge>
    <edge id="e2" source="n1" target="n3">
      <data key="d1">2.0</data>
    </edge>
    <edge id="e3" source="n3" target="n2"/>
    ...
  </graph>
  ...

Nie może być elementy wykresu, dla których GraphMLAtrybut jest zdefiniowane, ale wartość nie jest zadeklarowane przez odpowiedni element danych. Jeśli wartość domyślna jest zdefiniowana dla tego GraphML atrybutu, to wartość domyślna jest stosowana do elementu wykresu. W powyższym przykładzie wartość nie jest określona dla węzła z identyfikatora n1 i GraphMLAtrybut o nazwie koloru. Dlatego ten GraphMLAtrybut ma wartość domyślną, żółty dla tego węzła. Jeśli wartość domyślna nie jest określony, co do wagi GraphMLAtrybut w powyższym przykładzie, wartość atrybutu jest GraphML niezdefiniowana dla elementu wykresu. W powyższym przykładzie wartość jest nieokreślona masy GraphMLatrybutu dla krawędzi z identyfikatora e3.

2.5 Informacje o składni

Aby było to możliwe do wykonania zoptymalizowanych analizatory składni dokumentów GraphML meta-dane mogą być dołączone jako XMLatrybuty do niektórych elementów GraphML. Wszystkie XMLAtrybuty oznaczające metadanych są poprzedzone parsowania. Istnieją dwa rodzaje metadanych: Informacje o liczbie elementów i informacji, jak poszczególne dane są zakodowane w dokumencie.

Dla pierwszego rodzaju, informacje o liczbie elementów, następujące XMLAtrybuty dla elementu wykresu są zdefiniowane: W parse.nodes XMLAtrybut oznacza liczbę węzłów na wykresie, liczba parse.edgesthe XMLAtrybut krawędzi ,XMLAtrybut parse.maxindegree oznacza maksymalną indegree węzłów w grafie i XML-Attribute parse.maxoutdegree maksymalnej outdegree. Dla elementu węzła parse.indegree XML-Atrybut oznacza indegree węzła i XML-Attribute parse.outdegree w outdegree.

Do drugiego rodzaju, informacje o kodowaniu elementu następujące XMLAtrybuty dla elementu wykresu są zdefiniowane: Jeśli parse.nodeids XML atrybut posiada wartość kanoniczne, wszystkie węzły mają identyfikatory następujące wzoru NX, gdzie X oznacza numer occurences elementu węzła przed bieżącego elementu. W przeciwnym wypadku wartość atrybutu XML jest bezpłatne.To samo odnosi się do krawędzi na której odpowiednie parse.edgeids atrybutu XML jest określona, z tą tylko różnicą, że identyfikatory na krawędziach mieć strukturę Prz.XMLAtrybut parse.order oznacza kolejność, w której występują elementy węzłów i krawędzi w dokumencie. Za wartość nodesfirst bez elementu węzła może wystąpić po pierwszym występowania elementu krawędziowego. Dla wartości adjacencylist, declariation węzła następuje deklarację sąsiednich krawędzi. Dla wartości uwolnić żadne zlecenie nie są opodatkowane.

Poniższy przykład demonstruje parse informacyjnych metadanych na naszej systemem przykład:
Wykres z dodatkową informacją analizowania atrybutów.

<?xml version="1.0" encoding="UTF-8"?>
<!-- This file was written by the JAVA GraphML Library.-->
<graphml xmlns="http://graphml.graphdrawing.org/xmlns"  
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns 
                                http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">
  <graph id="G" edgedefault="directed" 
            parse.nodes="11" parse.edges="12" 
            parse.maxindegree="2" parse.maxoutdegree="3"
            parse.nodeids="canonical" parse.edgeids="free" 
            parse.order="nodesfirst">
    <node id="n0" parse.indegree="0" parse.outdegree="1"/>
    <node id="n1" parse.indegree="0" parse.outdegree="1"/>
    <node id="n2" parse.indegree="2" parse.outdegree="1"/>
    <node id="n3" parse.indegree="1" parse.outdegree="2"/>
    <node id="n4" parse.indegree="1" parse.outdegree="1"/>
    <node id="n5" parse.indegree="2" parse.outdegree="1"/>
    <node id="n6" parse.indegree="1" parse.outdegree="2"/>
    <node id="n7" parse.indegree="2" parse.outdegree="0"/>
    <node id="n8" parse.indegree="1" parse.outdegree="3"/>
    <node id="n9" parse.indegree="1" parse.outdegree="0"/>
    <node id="n10" parse.indegree="1" parse.outdegree="0"/>
    <edge id="edge0001" source="n0" target="n2"/>
    <edge id="edge0002" source="n1" target="n2"/>
    <edge id="edge0003" source="n2" target="n3"/>
    <edge id="edge0004" source="n3" target="n5"/>
    <edge id="edge0005" source="n3" target="n4"/>
    <edge id="edge0006" source="n4" target="n6"/>
    <edge id="edge0007" source="n6" target="n5"/>
    <edge id="edge0008" source="n5" target="n7"/>
    <edge id="edge0009" source="n6" target="n8"/>
    <edge id="edge0010" source="n8" target="n7"/>
    <edge id="edge0011" source="n8" target="n9"/>
    <edge id="edge0012" source="n8" target="n10"/>
  </graph>
</graphml>

 

3. Zaawansowane Pojęcia I: Zagnieżdżone Wykresy, Hyperedges & Porty

W niektórych zastosowaniach model wykres opisany w poprzednim punkcie jest zbyt restrykcyjne i nie modelować adekwatnie dane aplikacji.

W tej części omówimy zaawansowane modele wykresów, które mogą Model A gniazdowania hierarchii, hyperedges i portów.

3.1 Wykresy zagnieżdżony

GraphML obsługuje zagnieżdżone wykresy, tj, wykresy, w których węzły są hierarchicznie uporządkowane.Hierarchia jest wyrażona przez strukturę dokumentu GraphML.Węzeł w dokumencie GraphML może mieć element wykres, który sam zawiera węzły, które są w hierarchii poniżej węzła. Oto przykład dla zagnieżdżonego wykresu i odpowiedniego dokumentu GraphML. Należy zauważyć, że na rysunku wykres hierarchii jest wyrażany przez zastosowanie obudowy, czyli węzeł znajduje się poniżej węzła B w hierarchii, wtedy i tylko wtedy, gdy graficzna reprezentacja jest całkowicie wewnątrz graficzną reprezentację b.
Zagnieżdżone wykres.

Image of a nested graph.

Obraz zagnieżdżonego wykresie.

Plik nested.graphml przedstawia odpowiedni dokument GraphML:
GraphML Dokument z zagnieżdżonych Wykresy

<?xml version="1.0" encoding="UTF-8"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">
  <graph id="G" edgedefault="undirected">
    <node id="n0"/>
    <node id="n1"/>
    <node id="n2"/>
    <node id="n3"/>
    <node id="n4"/>
    <node id="n5">
        <graph id="n5:" edgedefault="undirected">
          <node id="n5::n0"/>
          <node id="n5::n1"/>
          <node id="n5::n2"/>
          <edge id="e0" source="n5::n0" target="n5::n2"/>
          <edge id="e1" source="n5::n1" target="n5::n2"/>
        </graph>
    </node>
    <node id="n6">
        <graph id="n6:" edgedefault="undirected">
          <node id="n6::n0">
              <graph id="n6::n0:" edgedefault="undirected">
                <node id="n6::n0::n0"/>
               </graph>
          </node>
          <node id="n6::n1"/>
          <node id="n6::n2"/>
          <edge id="e10" source="n6::n1" target="n6::n0::n0"/>
          <edge id="e11" source="n6::n1" target="n6::n2"/>
        </graph>
    </node>
    <edge id="e2" source="n5::n2" target="n0"/>
    <edge id="e3" source="n0" target="n2"/>
    <edge id="e4" source="n0" target="n1"/>
    <edge id="e5" source="n1" target="n3"/>
    <edge id="e6" source="n3" target="n2"/>
    <edge id="e7" source="n2" target="n4"/>
    <edge id="e8" source="n3" target="n6::n1"/>
    <edge id="e9" source="n6::n1" target="n4"/>
  </graph>
</graphml>

Krawędzie pomiędzy dwoma węzłami w zagnieżdżonych wykresie muszą być deklarowane w formie wykresu, który jest przodkiem obu węzłów w hierarchii. Należy pamiętać, że jest to prawda dla naszego przykładu. Deklarowanie krawędzi między węzłem n6 :: N1 i N4 :: n0 węzła :: n0 wewnątrz wykresu n6 :: n0 byłoby źle deklarując go w wykres G byłoby poprawne.Dobra polityka jest umieszczenie krawędzi Przynajmniej wspólnego przodka z węzłów w hierarchii, lub na najwyższym poziomie.

W przypadku aplikacji, które nie obsługują zagnieżdżonych wykresy zachowanie spadek obrońca jest ignorowanie węzłów, które nie są zawarte w wykresie na najwyższym poziomie, a ignorować krawędzie, które mają nie mają oba punkty końcowe na wykresie na najwyższym poziomie.

3.2 Hyperedges
Hyperedges to uogólnienie krawędzi w tym sensie, że nie tylko dotyczą dwóch punktów końcowych do siebie wyrażają związek pomiędzy dowolną liczbę enpoints. Hyperedges są deklarowane przez element hyperedge w GraphML. Dla każdego enpoint z hyperedge ten element hyperedge zawiera element końcowego.Element końcowy musi mieć węzeł XML atrybutu, który zawiera identyfikator węzła w dokumencie.Poniższy przykład zawiera dwa hyperedges i dwie krawędzie. W hyperedges są zilustrowane przez połączenie łuki, krawędzie liniami prostymi. Należy zauważyć, że krawędzie mogą być określone za pomocą elementu krawędziowego lub elementu składającego się z dwóch punktów końcowych hyperedge elementy.
Wykres z hyperedges.

Image of a graph with hyperedges

Obraz wykres z hyperedges

Plik hyper.graphml przedstawia odpowiedni dokument GraphML:
Dokument z Hyperedges GraphML

<?xml version="1.0" encoding="UTF-8"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">
  <graph id="G" edgedefault="undirected">
    <node id="n0"/>
    <node id="n1"/>
    <node id="n2"/>
    <node id="n3"/>
    <node id="n4"/>
    <node id="n5"/>
    <node id="n6"/>
    <hyperedge>
       <endpoint node="n0"/>
       <endpoint node="n1"/>
       <endpoint node="n2"/>
     </hyperedge>
    <hyperedge>
       <endpoint node="n3"/>
       <endpoint node="n4"/>
       <endpoint node="n5"/>
       <endpoint node="n6"/>
     </hyperedge>
    <hyperedge>
       <endpoint node="n1"/>
       <endpoint node="n3"/>
     </hyperedge>
    <edge source="n0" target="n4"/>
  </graph>
</graphml>

 

Podobnie jak krawędzie, hyperedges i enpoints może mieć identyfikator XML atrybutu, który definiuje unikalny identyfikator dla odpowiedniego elementu.

3.3 Porty

Węzeł może określić różne lokalizacje logiczne dla krawędzi i hyperedges się łączą. Logiczne lokalizacje są nazywane “porty”. Jako analogię, myślę wykresu jako płyty głównej, węzłów jak układy scalone i krawędzi jak przewodów łączących. Następnie kołki na układach scalonych odpowiadają portsof węzeł.

Porty w węźle są deklarowane przez elementy portowych jak dzieci w odpowiednich elementów węzła. Należy zauważyć, że elementy portów mogą być zagnieżdżane, to znaczy mogą zawierać same elementy portów. Każdy element portu musi mieć nazwę XML atrybutu, który jest identyfikator dla tego portu.Element krawędź ma opcjonalny XMLAtrybuty sourceport i targetport z którym krawędź może określić port źródła, wzgl. cel, węzeł. Odpowiednio, element końcowy ma opcjonalny port, XML atrybutu.

Port.graphml dokument jest przykładem dokumentu z portów:
GraphML Dokument z portami

<?xml version="1.0" encoding="UTF-8"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">
  <graph id="G" edgedefault="directed">
    <node id="n0">
      <port name="North"/>
      <port name="South"/>
      <port name="East"/>
      <port name="West"/>
    </node>
    <node id="n1">
      <port name="North"/>
      <port name="South"/>
      <port name="East"/>
      <port name="West"/>
    </node>
    <node id="n2">
      <port name="NorthWest"/>
      <port name="SouthEast"/>
    </node>
    <node id="n3">
      <port name="NorthEast"/>
      <port name="SouthWest"/>
    </node>
    <edge source="n0" target="n3" sourceport="North" targetport="NorthEast"/>
    <hyperedge>
       <endpoint node="n0" port="North"/>
       <endpoint node="n1" port="East"/>
       <endpoint node="n2" port="SouthEast"/>
     </hyperedge>
  </graph>
</graphml>

 

4. Zaawansowane Koncepcje II: Rozszerzenie GraphML

GraphML ma być łatwo rozszerzalny. Z GraphML topologia wykresu i atrybutów prostych elementów wykresu może być w odcinkach. Do przechowywania danych aplikacji bardziej złożonych jeden ma rozszerzyć GraphML. W tej części omówimy różne możliwości, aby rozszerzyć GraphML.

Rozszerzenia GraphML powinny zostać określone przez schematu XML.Schemat który określa rozszerzenie można uzyskać formularz dokumenty GraphML schematu za pomocą standardowego mechanizmu podobnego do jednego używanego przez XHTML.

4.1 Dodawanie atrybutów XML do GraphML Elements

W większości przypadków, dodatkowe informacje mogą (i powinny) być dołączone do GraphML elementów poprzez wykorzystanie GraphMLatrybutów. To zapewnia czytelność dla innych analizatorów GraphML. Jednak czasami może to być wygodniejsze w użyciu atrybutów XML. Załóżmy, że parser, który zna atrybut href XLink i interpretuje go poprawnie jako URL. Załóżmy dodatkowo chcesz zapisać wykres, którego węzły modelu WWW strony, w GraphML. Aby powiązać węzeł na stronie modelach piszesz adresu strony w XLink: atrybucie href obrębie węzła-tag:
Elementem węzła wskazując URL

    ...
 <node id="n0" xlink:href="http://graphml.graphdrawing.org"/>
    ...

 

Aby dodać atrybuty GraphML XML elementy trzeba rozszerzyć GraphML. Przedłużenie to może być określone przez schematu XML.Graphml dokument + xlink.xsd pokazuje atrybut sekcję dodano do węzła. (Należy pamiętać, że do tej pory nie ma oficjalnej definicji schematu dla XLink, aby potwierdzić następujący plik, upewnij się, że punkty atrybutów schemaLocation do jakiejś wstępnej wersji, np http://graphml.graphdrawing.org/xmlns/1.0/xlink .XSD.)
Rozszerzenie GraphML: Atrybuty

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema 
   targetNamespace="http://graphml.graphdrawing.org/xmlns"
   xmlns="http://graphml.graphdrawing.org/xmlns"  
   xmlns:xlink="http://www.w3.org/1999/xlink"
   xmlns:xs="http://www.w3.org/2001/XMLSchema"
   elementFormDefault="qualified"
   attributeFormDefault="unqualified"
>

<xs:import namespace="http://www.w3.org/1999/xlink"
           schemaLocation="xlink.xsd"/>

<xs:redefine 
    schemaLocation="http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">
  <xs:attributeGroup name="node.extra.attrib">
    <xs:attributeGroup ref="node.extra.attrib"/>
    <xs:attribute ref="xlink:href" use="optional"/>
  </xs:attributeGroup>
</xs:redefine>

</xs:schema>

Części w powyższym dokumencie mają następujące funkcje: graphml + xlink.xsd ma element schematu jako jego elementu głównego. targetNamespace = “http://graphml.graphdrawing.org/xmlns” mówi, że język zdefiniowane w tym dokumencie jest GraphML. Kolejne trzy linie określenie domyślnej przestrzeni nazw i prefiksów przestrzeni nazw dla XLink i XMLSchema. Atrybuty elementFormDefault i attributeFormDefault nie mają znaczenia dla tego przykładu.
<xs: import namespace = http://www.w3.org/1999/xlink” schemaLocation = xlink.xsd” /> umożliwia dostęp do przestrzeni nazw XLink, znajduje się na xlink.xsd plików.
<xs: przedefiniować schemaLocation = http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd”> określa plik, (część), która jest nowo.Node.extra.attrib grupa atrybut jest atrybutem zawarte w liście węzła. Po redefinicji, grupa ta cecha ma starą treść plus jedna więcej atrybut, a mianowicie XLink: href, które jest opcjonalne.

Poza node.extra.attrib istnieją odpowiednie grupy atrybutów dla wszystkich głównych elementów GraphML.

Attributes.ext.graphml dokument jest przykładem dokumentu, który jest ważny w odniesieniu do graphml  + xlink.xsd.
GraphML dokumentu XML z dodatkowymi atrybutami

<?xml version="1.0" encoding="UTF-8"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns"  
            xmlns:xlink="http://www.w3.org/1999/xlink"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns 
                                graphml+xlink.xsd">
  <graph edgedefault="directed">
    <node id="n0" xlink:href="http://graphml.graphdrawing.org"/>
    <node id="n1" />
    <edge source="n0" target="n1"/>
  </graph>
</graphml>

 

4.2 Dodawanie typów złożonych

Zorganizowany treści można dodać w elemencie danych. Na przykład użytkownik chce przechowywać obrazy dla węzłów, napisanych w SVG.
Elementem węzła i jego graficzna reprezentacja

    ...
 xmlns:svg="http://www.w3.org/2000/svg"
    ...
 <node id="n0" >
   <data key="k0">
     <svg:svg width="4cm" height="8cm" version="1.1">
       <svg:ellipse cx="2cm" cy="4cm" rx="2cm" ry="1cm" />
     </svg:svg>  
   </data>
 </node>
    ...

 

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema 
   targetNamespace="http://graphml.graphdrawing.org/xmlns"
   xmlns="http://graphml.graphdrawing.org/xmlns"  
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns:xs="http://www.w3.org/2001/XMLSchema"
   elementFormDefault="qualified"
   attributeFormDefault="unqualified"
>

<xs:import namespace="http://www.w3.org/2000/svg"
           schemaLocation="svg.xsd"/>

<xs:redefine 
    schemaLocation="http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">
  <xs:complexType name="data-extension.type">
    <xs:complexContent>
      <xs:extension base="data-extension.type">
        <xs:sequence>
          <xs:element ref="svg:svg"/>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
</xs:redefine>

</xs:schema>
Powyższy schemat jest podobny do przykładu w Dodawanie atrybutów: pierwsze niezbędne deklaracje przestrzeni nazw są wykonane.
Następnie nazw SVG jest importowana. Wreszcie danych extension.type złożony typ, który jest podstawą do typu zawartości
elementu danych, przedłuża się elementu SVG svg.

 Ze schematu w graphml+svg.xsd, svg.graphml GraphML Dokument może być potwierdzone:
 GraphML dokumentu w tym svg.graphml

Rozszerzenie GraphML: Structured danych

<?xml version="1.0" encoding="UTF-8"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns"  
            xmlns:svg="http://www.w3.org/2000/svg"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns 
                                graphml+svg.xsd">
  <key id="k0" for="node">
    <default>
      <svg:svg width="5cm" height="4cm" version="1.1">
        <svg:desc>Default graphical representation for nodes
        </svg:desc>
        <svg:rect x="0.5cm" y="0.5cm" width="2cm" height="1cm"/>
      </svg:svg>
    </default>
  </key>  
  <key id="k1" for="edge">
    <desc>Graphical representation for edges
    </desc>
  </key>  
  <graph edgedefault="directed">
    <node id="n0">
      <data key="k0">
        <svg:svg width="4cm" height="8cm" version="1.1">
          <svg:ellipse cx="2cm" cy="4cm" rx="2cm" ry="1cm" />
        </svg:svg>  
      </data>
    </node>
    <node id="n1" />
    <edge source="n0" target="n1">
      <data key="k1">
        <svg:svg width="12cm" height="4cm" viewBox="0 0 1200 400">
          <svg:line x1="100" y1="300" x2="300" y2="100"
           stroke-width="5"  />
        </svg:svg>
      </data>
    </edge>
  </graph>
</graphml>

Należy zauważyć, że węzeł z id n1 przyznaje domyślnej reprezentacji graficznej podane w kluczowych k0.Powyższy przykład pokazuje także przydatność nazw XML: istnieją dwa różne elementy desc jeden w przestrzeni nazw GraphML i jeden w przestrzeni nazw SVG.

Comments are closed.