2011-08-31 56 views
0

我已經搜索並正在尋找一個工具,這將有助於處理XML文件。 我必須瞭解不同的XML結構,當我必須在紙上繪製所有內容或模擬圖時,它會變得非常煩人。XML建模工具

我想知道是否有人有一些工具可以提供哪些有助於找出XML結構?

對於任何人誰不明白爲什麼我需要這個,想象一下:

<parent id="1"> 
<name> ... </name> 
</parent> 
<parent id="2"> 
<name> ... </name> 
</parent> 

<child mother="1" father="2"></child> 

在這種情況下,母親和父親都是由父元素的id設置。

有時我有一個巨大的結構,以這種方式連接到其他節點(使用ID或一些字符串標識符)。它很難處理這個手動,我想知道是否有一些自動的方式來從XML繪製圖表(最小的輸入)。

謝謝

回答

2

我知道你要問的一個工具,您標記與UML你的問題,但也許你會喜歡的Graph::Easy模塊使用Perl,剛剛拿到的第一個大圖你的XML。

下面是示例XML:

<test> 
    <parent id="1"/> 
    <parent id="2"/> 
    <child id="11" mother="1" father="2"/> 
    <child id="10" mother="1" father="2"/> 
</test> 

這裏是小腳本:

#!/usr/bin/perl -w 
use 5.010; 
use strict; 
use warnings; 

use Graph::Easy; 
use IO::All; 
use Path::Class; 
use XML::LibXML; 

my $graph = Graph::Easy->new(timeout => 100); 
my $parser = XML::LibXML->new(); 
my $xmlFile = file('...') # Replace by your path. 

my $dom = $parser->parse_file($xmlFile); 
foreach my $childNode ($dom->findnodes('//child')) 
{ 
    $graph->add_edge 
    (
     $childNode->getAttribute('id'), 
     $childNode->getAttribute('mother'), 
     'has mother' 
    ); 
    $graph->add_edge 
    (
     $childNode->getAttribute('id'), 
     $childNode->getAttribute('father'), 
     'has father' 
    ); 
} 

$graph->as_svg > io("graph.svg"); 

和結果:

enter image description here

這只是一個很簡單的例子,但您可以輕鬆地進一步添加不同類型的線條,顏色等。例如:

enter image description here

+0

這看起來我真的很想找!謝謝:) –

1

也許你正在使用錯誤的工具? XML最適合用於識別存儲爲自頂向下樹結構的數據。您描述的結構具有更復雜的關係(父母可能在某些情況下是頂級元素,在其他情況下是低級元素)......關係數據庫(例如,基於SQL)在描述時會更好。

+0

其實我還沒有使用任何XML工具.. –

+0

XML對於建模很有用,我用它大量描述關係,因爲我沒有看到使用其他任何東西的要點。但是當我不是架構的設計者而是其他人時,問題就出現了。要了解別人的關係很多的結構是一種痛苦:) –

+1

我指的是XML本身作爲工具。 從設計角度來看,查詢關係數據庫以獲取所需的數據集會比較容易,然後嘗試從xml表中提取數據集。數據庫模式本身將描述數據之間的關係,使用MySql Workbench這樣的工具可以很容易地進行可視化。我在一個大量基於XML的項目上工作,一組與SQLite數據庫相匹配的XML解析腳本已成爲分析的寶貴工具。 – 2011-09-01 17:40:16