2016-11-02 47 views
1

私はこのフリーウェアアプリ、labytrinthを3年前に見つけました(2005年に最後に更新されましたが)。作者は文字やその他の要素を整理することができました。要素を作成してからウィンドウにドラッグすると、異なる要素を矢印で結び付けて、関係の性質に関する情報を追加することができます。XMLファイルを視覚化する方法

私のコンピュータは最近クラッシュし、すべてがきちんとバックアップされたためファイルを失うことはありませんでしたが、私はそのアプリケーション自体のコピーを持っていませんでした。私がそれを持っていたウェブサイト(habitualindolence.net)は消えています(ライターの役に立つユーザーが私のために見つけたので)。私はまだそれを持っている人に連絡しようとしていますが、私の希望は高くありません。

それにもかかわらず、私はファイル(plt拡張子)を持っています。今私はそれらを視覚化する必要があります。 Writersのユーザーのアドバイスに続いて、私はメモ帳でファイルを開いて、私に読めるコードを与えました。誰かがPythonになる可能性があると示唆しましたが、オンラインのPythonビジュアライザーでは構文エラーが発生しました。もう1人のユーザーがXMLファイルだと言いました。

誰でもコードを視覚化する方法をお勧めしますか?ここに最初の数行があります。あなたがより長い抜粋を必要とする場合は、私に知らせてください。

初級セグメント:文字が記載されている部分の

<?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>*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> 

セグメント( '構造'タグ)が構造タグにネストされています。

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

'構造'ブロックは、位置(文字の名前を持つボックスを参照)で 'ノード'で構成されます。 immediatelly「ノード」の後に「リンク」がクローズされますが、タグを持って、「構造」タグ内にまだ

<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> 

(以下セグメントは前のセグメントの直後に現れることに注意してください)。これらは、上のさまざまなノードを接続する矢印を参照します。横にある時点、または章、;;「構造」タグが閉じられると

<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> 

は、我々は、プロットが垂直に文字で、テーブルに、プロットされているタイムライン(のセクションを持っているし、他の場所のプロットのテキスト)。

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

この部分は(私にとっては)少なくとも直感的なものではありません。これには、文字(ElementID)、章(Points)、プロットされたイベントの各タグが含まれ、各章の各文字(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> 

そして、はい、私はこれに接続されている文字把握し、手動でIDのそれをすべてけど...何百もの「翻訳」するために、文字にelementIDsと一致し、私はこのすべてを印刷することができたと?それを視覚化する方法を見つけるのが速くなければなりません。

このコーディングは本当に直感的でHTMLのように見えることは言うまでもありません。近くの災害の銀色の裏地を見て、それをXMLを取り上げる動機付けとして使うべきではないかと思っています。

EDIT(フィリップさんのコメントに応答して)

私は5冊にまたがるファンタジーの物語のために文字やグラフを整理するためにアプリを使用していました。私は完全に計画された最初の4つのキャラクターの関係に注釈を付けました。私はその情報を取得する方法を見つける必要があります。明らかに、私は文字情報(文字リストなど)を得るためにコードを読むことができますが、文字間の関係は不可欠なので、私はそれを視覚化する必要があります。ここでは例です:あなたが使用したもののような

enter image description here

+0

あなたが求めているのは、あるレベルのコーディングスキルが必要です。あなたが何を正確に探しているのかわからない、後で何を示すためにイメージなどがありますか? ' [...]'の中にすべてをコピーする場合は、テキストエディタに貼り付けてrtfファイルとして保存してください。それを単語で開くか、libre office ... – philipp

+0

私はコーディングについて何も知らない私がHTMLと複雑なエクセルの公式を自分ですべて(そしてネットをサーフィンしていることを明らかに)学んだら、私はそれを読みやすくするための基礎を理解できると確信しています。つまり、コードを実際に作成しなければならないというわけではありません。それはファイル内のすべてです...そうですか? –

+0

あなたのコードにまだ関係はありません。 – jhinghaus

答えて

2

問題についてもう一度考えた後、別の方法があります。 これらのすべてのIDを追跡すると、XSLTの問題が発生する可能性があります。

私はpythonスクリプトとgraphvizを使って試しました。

<?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> 

このファイルのpythonのこれらの行によって、SVGに変換することができます:

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) 

これは、構造体の名前でSVGを作成し、私はこのようなanomizedサンプルファイルが作られ、あなたの例から このように見える。

Result

それはGraphvizの部分に力を入れて良く見ることができます。

タイムラインは別のものです。

+0

私は提案とその例を感謝します。どの言語を使うかを決めるのに役立ちました:Python。時間はかかりますが、情報が失われていないことが分かっていれば十分です。それとコーディングを勉強し始めた。それはいつも私に魅了された、私はちょうど私を押し込むための正しい動機を持っていなかった。 –

1

アプリは、独自のカスタムXML-スキーマを持っています。つまり、タグの意味を理解するのはアプリだけです。 XMLをダイアグラムに解釈することは、アプリケーションのカスタム実装です。

このアプリケーションでは、<SaveFormat>3.5</SaveFormat>を使用して、データの処理方法を確認しています。

しかしXMLであるため、カスタムXMLを別のアプリケーションが理解できるXMLに変換するためにXSLTを使用できます。これがXSLTのためのものです。

私に聞こえる音。

ターゲットアプリケーションが必要で、残りの要素を無視して要素を表示するように段階的に実行します。

+0

私はXMLとXSLTについて少しお読みになりました。興味深いと聞きました(私は2005年に自分自身でHTMLを教えていましたが、導入レベルと長年の間だけJavaScriptを学んでいました)ので、私は座ってより価値のあるものを見なければなりません。 XMLとXSLTを勉強したり、IDから手動でリンクをトレースしたりすることができます。それが単なる表であれば、ブラウザ上で動作させるほうが簡単かもしれません。矢印ビットと「浮動」ノードは、時間がかかり過ぎるということを私に感じさせます。両方のアプローチを慎重に検討する必要があります。 –

関連する問題