XML建模工具

时间:2011-08-31 21:44:53

标签: xml uml diagram

我已经搜索过并且正在寻找一种在处理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 个答案:

答案 0 :(得分:2)

我知道你要求一个工具,并且你用UML标记你的问题,但也许你会喜欢Perl的Graph::Easy模块,只是为了获得你的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

答案 1 :(得分:1)

也许你使用的是错误的工具? XML最适合识别存储为自上而下树结构的数据。您描述的结构具有更复杂的关系(父级可能在某些情况下是顶级元素,在其他情况下是低级元素)...关系数据库(例如,基于SQL)在描述时会更好。