AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Wann Element <> Attribut ?

Ein Thema von jfheins · begonnen am 21. Nov 2009 · letzter Beitrag vom 22. Nov 2009
Antwort Antwort
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#1

Wann Element <> Attribut ?

  Alt 21. Nov 2009, 22:29
Erstmal Sorry für den bescheidenen Titel

Ich bin gerade dabei, einen Graphen in XMl zu speichern. Das sieht im Moment so ähnlich aus:
XML-Code:
<graph name="Hauptgraph">
    <node id="0" />
    <node id="1" />
    <node id="2" />
    <node id="3" />
    <node id="4" />
    <node id="5" />
    <node id="6" />
    <edge>
      <source_id>0</source_id>
      <target_id>1</target_id>
    </edge>
    <edge>
      <source_id>1</source_id>
      <target_id>3</target_id>
    </edge>
....
Wie man sieht haben die Knoten je eine id und jede Kante bekommt 2 Node-ID's
Und jetzt die Frage: Wann verwendet man Attribute und wann Elemente? Gibt es da eine Richtlinie, best practices oder sowas an der Art? Oder ist das komplett egal und einem selbst überlassen?

Grüße,
Julius
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.641 Beiträge
 
#2

Re: Wann Element <> Attribut ?

  Alt 21. Nov 2009, 22:36
Wenn die beiden Angaben Pflicht sind, spricht nichts dagegen, sie als Attribute anzugeben. Ich würde Elemente eher dann verwenden, wenn die Anzahl unreguliert ist. Bei nur zwei Werten die sowieso immer Pflicht sind reichen Attribute vollkommen aus.

Edith sagt: Ausserdem wäre das in Deinem Fall nur Konsequent. Eine Kante wird genau durch die zwei Punkte definiert. Diese beiden Punkte in verbindung sind wie die ID des einzelnen Knotens ein eineindeutiger Schlüssel und deshalb als Attribut prädestiniert.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

Re: Wann Element <> Attribut ?

  Alt 21. Nov 2009, 22:38
Im Prinzip ist es egal und dir überlassen.

Es kommt auch darauf an, ob jemand mal in den XML-Code reinsieht, bzw reingucken MUß,
denn dann ist es besser, wenn eine übersichtlichere Variante genommen wird.

Man kann auch etwas die Dateigröße damit beeinflußen.

Zuviele Attribute können auch wieder unübersichtlich wirken.

Und man kann über die Wahl Attribut<>Element auch die Art/Stärke der Bindung angeben.
z.B. wenn man verschachtelte Elemente (einen Baum/Tree) hat, dann machen sich Eigenschaften als Attribute besser, da sie so mehr zum Element gehören und sich nicht mit den SubElementen vermischen.

ist doch schon handlicher?
XML-Code:
<graph name="Hauptgraph">
    <node id="0" />
    <node id="1" />
    <node id="2" />
    <node id="3" />
    <node id="4" />
    <node id="5" />
    <node id="6" />
    <edge source_id="0" target_id="1" />
    <edge source_id="1" target_id="3" />
Wenn man unbedingt eine Regel haben will:
> wenn der "Text" zu groß/lang sein kann, dann nicht als Attribut
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von arbu man
arbu man

Registriert seit: 3. Nov 2004
Ort: Krefeld
1.108 Beiträge
 
Delphi 7 Professional
 
#4

Re: Wann Element <> Attribut ?

  Alt 21. Nov 2009, 22:47
Verwende die Lösung als Attribute, dann bist du näher an GraphML, bzw. es wäre dann schon fast GraphML.
Ich würde dir raten den Graph mit GraphML Format zu speichern, das hätte den Vorteil es gibt schon Programm mit dennen man sich den Graphen angucken könnte etc.

GraphML
http://www.inf.uni-konstanz.de/algo/...g/GraphML.html
Björn
>> http://bsnx.net <<
Virtual DP Stammtisch v1.0"iw" am 19.09.2007 - ich war dabei!
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#5

Re: Wann Element <> Attribut ?

  Alt 21. Nov 2009, 23:17
Okay, danke schonmal - dann werde ich meinem Betreuer mal vorschlagen die source und target ID als Attribute zu definieren ...

Das mit GraphML hörte sich zwar im ersten Moment gut an - aber es gibt einen kleinen Pfredefuß: Hierarchische Graphen werden zwar unterstützt, aber nur über die Knoten und nicht über die Kanten ...

Ich zeig' euch einfach mal ein komplettes Dokument (wie es im Moment ist)
XML-Code:
<?xml version="1.0" encoding="utf-8"?>
<graph>
  <subgraph id="0" name="Graph Nr. 0">
    <node id="0" />
    <node id="1" />
    <node id="2" />
    <edge isgraph="false">
      <source_id>0</source_id>
      <target_id>1</target_id>
    </edge>
    <edge isgraph="true">
      <source_id>1</source_id>
      <target_id>2</target_id>
      <subgraph_id>1</subgraph_id>
    </edge>
  </subgraph>
  <subgraph id="1" name="Graph Nr. 1">
    <node id="0" />
    <node id="1" />
    <node id="2" />
    <node id="3" />
    <edge isgraph="false">
      <source_id>0</source_id>
      <target_id>1</target_id>
    </edge>
    <edge isgraph="false">
      <source_id>1</source_id>
      <target_id>3</target_id>
    </edge>
    <edge isgraph="false">
      <source_id>0</source_id>
      <target_id>2</target_id>
    </edge>
    <edge isgraph="false">
      <source_id>2</source_id>
      <target_id>3</target_id>
    </edge>
  </subgraph>
</graph>
Dazu kommt noch, dass
1. Jede Kante, die keinen Subgraph hat muss eine Task-Element haben. (Auch umgekehrt)
2. Jeder Knoten hat noch eine Liste von Teilen

@himi: Du siehst, "kompakt" wird das nicht

P.S.: Wenn ihr euch darunter nocht nichts vorstellen könnt, kann ich euch auch ein Bild machen, aber die Frage ist erstmal beantwortet
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

Re: Wann Element <> Attribut ?

  Alt 21. Nov 2009, 23:31
für geile Bilder haben wir doch immer was übrig

ansonsten gibt es tausende Lösungen
XML-Code:
<?xml version="1.0" encoding="utf-8"?>
<graph>
  <subgraph id="0" name="Graph Nr. 0">
    <node id="0" />
    <node id="1" />
    <node id="2" />
    <edge isgraph="false" source_id="0" target_id="1" />
    <edge isgraph="true" source_id="1" target_id="2">
      <subgraph_id>1</subgraph_id>
    </edge>
  </subgraph>
  <subgraph id="1" name="Graph Nr. 1">
    <node id="0" />
    <node id="1" />
    <node id="2" />
    <node id="3" />
    <edge isgraph="false" source_id="0" target_id="1" />
    <edge isgraph="false" source_id="1" target_id="3" />
    <edge isgraph="false" source_id="0" target_id="2" />
    <edge isgraph="false" source_id="2" target_id="3" />
  </subgraph>
</graph>
XML-Code:
<?xml version="1.0" encoding="utf-8"?>
<graph>
  <subgraph id="0" name="Graph Nr. 0">
    <node id="0" />
    <node id="1" />
    <node id="2" />
    <edge isgraph="false" source_id="0" target_id="1" />
    <edge isgraph="true" source_id="1" target_id="2" subgraph_id="1" />
  </subgraph>
  <subgraph id="1" name="Graph Nr. 1">
...
wenn ein subgraph immer nur einem edge zugeordnet ist oder Keinem, dann ginge es auch so
XML-Code:
<?xml version="1.0" encoding="utf-8"?>
<graph>
  <subgraph id="0" name="Graph Nr. 0">
    <node id="0" />
    <node id="1" />
    <node id="2" />
    <edge isgraph="false" source_id="0" target_id="1" />
    <edge isgraph="true" source_id="1" target_id="2">
      <subgraph id="1" name="Graph Nr. 1">
        <node id="0" />
        <node id="1" />
        <node id="2" />
        <node id="3" />
        <edge isgraph="false" source_id="0" target_id="1" />
        <edge isgraph="false" source_id="1" target_id="3" />
        <edge isgraph="false" source_id="0" target_id="2" />
        <edge isgraph="false" source_id="2" target_id="3" />
      </subgraph>
    </edge>
  </subgraph>
</graph>
Wobei man isgraph= doch garnicht benötigt?
Dieses erkennt man ja auch an subgraph_id, bzw. dem untergeordnetem subgraph.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#7

Re: Wann Element <> Attribut ?

  Alt 22. Nov 2009, 00:03
Nagut, extra für dich ein Bild von dem oben geposteten Graphen
(Die gestrichelte Kante bedeutet, dass diese Kante einen Subgraph repräsentiert)

Zitat:
wenn ein subgraph immer nur einem edge zugeordnet ist oder Keinem, dann ginge es auch so
Ist nicht der Fall

Mit dem "weniger Platzverbrauch"-Argument könnte ich sogar was bewirken - bei ein paar zigtausend Knoten (im Extremfall) .... wobei dann eh der kürzeste-Pfad-Algorithmus (der auf den ganzen Graphen losgelassen wird) der Flaschenhals sein dürfte - zum Glück nicht meine Baustelle
Miniaturansicht angehängter Grafiken
demo_161.png  
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz