2016-11-02 3 views
1

Ich fand diese Freeware-App, lybtrinth, vor drei Jahren (obwohl es zuletzt 2005 aktualisiert worden war). Es erlaubte den Autoren, Charaktere und andere Elemente ihrer Geschichten zu organisieren. Man würde Elemente erstellen und sie dann auf ein Fenster ziehen, wo man die verschiedenen Elemente mit Pfeilen verbinden könnte, um Informationen über die Art der Beziehungen hinzuzufügen.Wie man eine XML-Datei visualisiert

Mein Computer ist vor kurzem abgestürzt und, während ich keine Dateien verloren habe, weil alles ordentlich gesichert wurde, hatte ich keine Kopie der App selbst. Die Website, von der ich sie übernommen habe (habitualdindolence.net), ist weg (wie der hilfreiche Benutzer von Writers für mich herausgefunden hat), und obwohl ich immer noch versuche, jemanden zu erreichen, der sie noch besitzt, sind meine Hoffnungen nicht hoch.

Trotzdem habe ich die Dateien (Plt-Erweiterung); Jetzt muss ich sie nur noch visualisieren. Nach dem Rat der Benutzer von Writers öffnete ich die Datei mit Notepad, die mir einen lesbaren Code gab. Jemand schlug vor, dass es Python sein könnte, aber ein Online-Python-Visualisierer gab Syntaxfehler. Ein anderer Benutzer erwähnte, dass es sich um eine XML-Datei handelt.

Kann jemand eine Möglichkeit empfehlen, den Code zu visualisieren? Hier sind die ersten paar Zeilen. Wenn Sie einen längeren Auszug benötigen, lassen Sie es mich bitte wissen.

Einführungssegment:

<?xml version="1.0" encoding="utf-8"?> 
<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <SaveFormat>3.5</SaveFormat> 
    <Name>TheNewWorld_01_AmbitiousPrince</Name> 

Segment für den Teil, in dem die Zeichen aufgeführt sind:

 <Elements> 
     <Element> 
      <ID>f9434e21-d471-466f-948b-107f9da58905</ID> 
      <Name>*Nyan Cleaner</Name> 
      <Type>Character</Type> 
      <Annotations> 
      <TextAnnotation> 
       <ID>dad71ecc-d38a-45e2-a695-d6ad0d679f57</ID> 
       <Title>Physical Description</Title> 
       <Content>Long, brown hair 
    brown eyes 
    lightly tanned skin 
    </Content> 
       <RTF>{\rtf1\ansi\ansicpg1252\deff0\deflang2070{\fonttbl{\f0 \fnil\fcharset0 Tahoma;}} 
    \viewkind4\uc1\pard\f0\fs17 Long, brown hair\par 
    brown eyes\par 
    lightly tanned skin\par 
    \par 
    } 
    </RTF> 

Segment mit dem Tag 'Strukturen', die alle Diagramme auflistet, wobei jedes Diagramm ("-Struktur 'tag) wird innerhalb des Tags' structures 'verschachtelt.

<Structures> 
    <Structure> 
     <ID>dc1f9607-32d7-42ac-abcd-8b27e066eca2</ID> 
     <Name>Nyan_Connections</Name> 

Der Block ‚Struktur‘ wird dann mit den Positionen der ‚Knoten‘ zusammengesetzt (zu den Boxen beziehen mit dem Namen der Zeichen). (Beachten Sie, dass das folgende Segment zeigt sich unmittelbar nach dem vorherigen Segment)

<Nodes> 
     <Node> 
      <ElementID>43a45855-529d-48d6-ad33-3602abd5e57c</ElementID> 
      <Position> 
      <X>0.8034632</X> 
      <Y>0.221544713</Y> 
      </Position> 
     </Node> 
     <Node> 
      <ElementID>aa94de7a-2241-4e41-a383-eadb070354d0</ElementID> 
      <Position> 
      <X>0.219047621</X> 
      <Y>0.8678862</Y> 
      </Position> 

Noch innerhalb des Tags ‚Struktur‘, Sie haben das Tag ‚Links‘ immediatelly nach ‚Knoten‘ geschlossen ist. Diese beziehen sich auf die Pfeile, die die verschiedenen darüber liegenden Knoten verbinden.

<Links> 
     <Link> 
      <ID>4eb83f93-2d47-4afc-bc46-dfa83a4f1f96</ID> 
      <Description>Lovers</Description> 
      <LHS>f9434e21-d471-466f-948b-107f9da58905</LHS> 
      <RHS>c2b3f24d-c9f2-4832-b488-e1f3eca84b04</RHS> 
      <Direction>Double</Direction> 
     </Link> 
     <Link> 
      <ID>272dac28-a5f9-400c-a514-3aa9b971240f</ID> 
      <Description>Friend</Description> 
      <LHS>19f460ea-5ff9-4690-9adf-4b556489083e</LHS> 
      <RHS>f9434e21-d471-466f-948b-107f9da58905</RHS> 
      <Direction>Double</Direction> 
     </Link> 

Sobald die ‚Strukturen‘ Tag geschlossen ist, haben wir den Abschnitt Zeitrahmen (wo die Grundstücke aufgetragen sind, in einer Tabelle, mit Zeichen auf der vertikalen, die Zeitpunkte, oder Kapitel in der horizontalen und der Text der Handlung an anderer Stelle).

<Timelines> 
    <Timeline> 
     <ID>531b95f1-a07d-4aa8-ad2e-86576322f41b</ID> 
     <Name>1-Ambitious_Ch02</Name> 

Dieser Teil ist nicht so intuitiv zu lesen (zumindest für mich). Sie enthält die Tags für die Zeichen (ElementIDs), die Kapitel (Points) und dann die geplotteten Ereignisse und gibt an, was jedes Zeichen in jedem Kapitel vorhat (TimelinePoint).

 <ElementIDs> 
     <guid>f9434e21-d471-466f-948b-107f9da58905</guid> 
     <guid>19f460ea-5ff9-4690-9adf-4b556489083e</guid> 
     <guid>1ea36ec3-10e6-451d-a251-a139a51a6cfc</guid> 
     <guid>c2b3f24d-c9f2-4832-b488-e1f3eca84b04</guid> 
     </ElementIDs> 
     <Points> 
     <TimelinePoint> 
      <ID>9699cb8e-367d-4119-936a-b43c3cf403e2</ID> 
      <Name>scene1</Name> 
      <UseSchedule>None</UseSchedule> 
      <Schedule>0001-01-01T00:00:00</Schedule> 
      <Items> 
      <TimelineItem> 
       <ID>63ca24bf-b278-4df3-a88f-4984cabc8404</ID> 
       <ElementID>f9434e21-d471-466f-948b-107f9da58905</ElementID> 
       <Annotation> 
       <ID>c21bc9bb-7857-4099-97f4-14ef5b20b4f7</ID> 
       <Title>Arrives to work</Title> 
       <Content>She's late.</Content> 
       <RTF>{\rtf1\ansi\ansicpg1252\deff0\deflang2070{\fonttbl{\f0\fnil\fcharset0 Tahoma;}} 
\viewkind4\uc1\pard\f0\fs17 She's late.\par 
} 
</RTF> 
       </Annotation> 
      </TimelineItem> 

Und ja, ich nehme ich das alles drucken können, um die Zeichen der elementIDs übereinstimmen wird, um Figur, die Zeichen verbunden, welche und manuell ‚übersetzen‘ sie alle, aber ... Hunderte von IDs? Es muss schneller einen Weg finden, es zu visualisieren.

Nicht zu erwähnen, dass diese Codierung wirklich intuitiv und HTML-ähnlich scheint; Ich fange an mich zu fragen, ob ich nicht einfach das Silbernes von meiner nahen Katastrophe sehen und es als eine Motivation benutzen soll, XML aufzuheben?

EDIT (als Antwort auf Philipps Kommentar)

habe ich die App, die Charaktere und Handlung für eine Fantasy-Geschichte Spanning 5 Bücher zu organisieren. Ich habe die ersten 4 komplett geplant und die Beziehungen der Charaktere kommentiert. Ich muss einen Weg finden, diese Informationen zu erhalten. Natürlich kann ich den Code durchlesen, um die Textinformationen (Zeichenliste usw.) zu erhalten, aber die Beziehungen zwischen den Charakteren sind wichtig, deshalb muss ich sie visualisieren. Hier ein Beispiel:

enter image description here

+0

Was Sie fragen, erfordert einige Programmierkenntnisse. Ich bin mir nicht sicher, wonach du genau suchst, hast du ein Bild oder etwas in der Art, um zu zeigen, wonach du suchst? Wenn Sie alles in ' [...]' kopieren, fügen Sie es in einen Texteditor ein und speichern Sie es als RTF-Datei, können Sie es in Word oder Libre Office öffnen ... – philipp

+0

Ich weiß, ich weiß nichts über Codierung, aber Wenn ich HTML und komplexe Excel-Formeln ganz alleine gelernt habe (und natürlich im Internet surfe), bin ich sicher, dass ich die Grundlagen verstehen kann, um sie lesbar zu machen. Ich meine, es ist nicht so, als müsste ich den Code wirklich erstellen, es ist alles in der Datei ... richtig? –

+0

In Ihrem Code ist noch keine Beziehung vorhanden. – jhinghaus

Antwort

2

Ok, nachdem ich wieder über das Problem nachgedacht habe, habe ich einen anderen Ansatz für dich. Die XSLT-Sache könnte hart werden mit all diesen IDs zu verfolgen.

Ich versuchte es mit einem Python-Skript und Graphviz. Von Ihrem Beispiele machte ich eine anomized Beispieldatei wie folgt aus:

<?xml version="1.0" encoding="utf-8"?> 
<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <SaveFormat>3.5</SaveFormat> 
    <Name>TheNewWorld_01_AmbitiousPrince</Name> 

    <Elements> 
    <Element> 
     <ID>f9434e21-d471-466f-948b-107f9da58905</ID> 
     <Name>*Some One</Name> 
     <Type>Character</Type> 
    </Element> 

    <Element> 
     <ID>f9434e21-d471-466f-948b-107f9da58906</ID> 
     <Name>*Some Other</Name> 
     <Type>Character</Type> 
    </Element> 

    <Element> 
     <ID>f9434e21-d471-466f-948b-107f9da58907</ID> 
     <Name>A Third</Name> 
     <Type>Character</Type> 
    </Element> 
    </Elements> 

    <Structures> 
    <Structure> 
     <ID>dc1f9607-32d7-42ac-abcd-8b27e066eca2</ID> 
     <Name>Some_Connections</Name> 


    <Nodes> 
     <Node> 
      <ElementID>f9434e21-d471-466f-948b-107f9da58905</ElementID> 
      <Position> 
      <X>0.8034632</X> 
      <Y>0.221544713</Y> 
      </Position> 
     </Node> 
     <Node> 
      <ElementID>f9434e21-d471-466f-948b-107f9da58906</ElementID> 
      <Position> 
      <X>0.219047621</X> 
      <Y>0.8678862</Y> 
      </Position> 
     </Node> 
     <Node> 
      <ElementID>f9434e21-d471-466f-948b-107f9da58907</ElementID> 
      <Position> 
      <X>0.219047621</X> 
      <Y>0.8678862</Y> 
      </Position> 
     </Node> 
    </Nodes> 
    <Links> 
     <Link> 
      <ID>4eb83f93-2d47-4afc-bc46-dfa83a4f1f96</ID> 
      <Description>Lovers</Description> 
      <LHS>f9434e21-d471-466f-948b-107f9da58905</LHS> 
      <RHS>f9434e21-d471-466f-948b-107f9da58906</RHS> 
      <Direction>Double</Direction> 
     </Link> 
     <Link> 
      <ID>4eb83f93-2d47-4afc-bc46-dfa83a4f1f97</ID> 
      <Description>Knows</Description> 
      <LHS>f9434e21-d471-466f-948b-107f9da58905</LHS> 
      <RHS>f9434e21-d471-466f-948b-107f9da58907</RHS> 
      <Direction>Single</Direction> 
     </Link> 
    </Links> 
    </Structure> 
    </Structures> 
</Project> 

Diese Datei in SVG durch diese Zeilen Python übersetzt werden kann:

import xml.etree.ElementTree 
import graphviz 

tree = xml.etree.ElementTree.parse('example.xml') 
root = tree.getroot() 

# read all the structures 
for structure in root.findall('.//Structures/Structure'): 
    structure_name = structure.findtext('./Name') 
    graph = graphviz.Digraph(format='svg',comment='structure_name') 

    # read the nodes of the structure 
    for node in structure.findall('.//Nodes/Node'): 
     node_element_id = node.findtext('./ElementID') 
     # find the name 
     element_name = root.findtext(".//Elements/Element[ID='{}']/Name".format(node_element_id)) 
     graph.node(node_element_id, element_name) 

    # read the links 
    for link in structure.findall('.//Links/Link'): 
     id_1 = link.findtext('./LHS') 
     id_2 = link.findtext('./RHS') 
     description = link.findtext('./Description') 
     direction = link.findtext('./Direction') 
     graph.edge(id_1, id_2, label=description) 
     if direction=='Double': 
      graph.edge(id_2, id_1, label=description) 

    graph.render(filename=structure_name) 

Dadurch entsteht ein SVG mit dem Namen der Struktur sah so aus.

Result

Es könnte besser aussehen durch mehr Aufwand in den graphviz Teil stülpen.

Die Zeitachse wäre eine andere Sache.

+0

Ich schätze den Vorschlag und das Beispiel. Es hat mir geholfen, zu entscheiden, welche Sprache ich wählen soll: Python. Es wird Zeit brauchen, aber jetzt zu wissen, dass die Information nicht verloren ist, reicht. Das und das Studium der Codierung beginnen. Das hat mich immer fasziniert, ich hatte einfach nie die richtige Motivation, mich dazu zu bringen. –

1

Apps wie die, die Sie verwendet werden, haben ihre eigenen XML-Schemata. Das bedeutet, dass die App nur die Bedeutung der Tags versteht. Das Interpretieren von XML in einem Diagramm ist eine benutzerdefinierte Implementierung in der App.

Die App verwendet diese <SaveFormat>3.5</SaveFormat>, um zu wissen, was mit den Daten zu tun ist.

Aber wie es XML ist, könnten wir XSLT verwenden, um die benutzerdefinierte XML in eine XML umzuwandeln, die von einer anderen App verstanden wird. Dafür ist XSLT gemacht.

Klingt möglich für mich.

Wir brauchen eine Zielanwendung und würden es Schritt für Schritt machen, damit die Elemente dort den Rest ignorieren.

+0

Ich habe ein wenig über XML und XSLT gelesen. Es hört sich interessant und vertraut an (ich habe mir 2005 selbst HTML beigebracht und ich habe auch JavaScript studiert, wenn auch nur auf einer Einführungsebene und vor langer Zeit), also muss ich mich hinsetzen und sehen, was lohnender ist: Investieren Sie in Lernen Sie XML und XSLT oder verfolgen Sie die Links manuell von den IDs. Wenn es nur ein Tisch wäre, wäre es einfacher (so scheint es mir), dass es in einem Browser funktioniert; aber das Pfeil-Bit und die "schwimmenden" Knoten lassen mich fühlen, dass die Aufgabe zu zeitaufwendig ist. Ich werde beide Ansätze sorgfältig prüfen müssen. –

Verwandte Themen