2010-09-03 54 views
0

简单和常见的树状数据结构中创建,显示和查询数据结构简单

数据结构例子

Animated Cartoons have 4 extremities (arm, leg,limb..) 
Human have 4 ext. 
Insects have 6 ext. 
Arachnids have 6 ext. 

Animated Cartoons have 4 by extremity 
Human have 5 by ext. 
Insects have 1 by ext. 
Arachnids have 1 by ext. 

实现的一些类

Level/Table0 
       Quantity, Item 
Level/Table1 
       ItemName, Kingdom  
Level/Table2 
       Kingdom, NumberOfExtremities  
Level/Table3 
       ExtremityName, NumberOfFingers 

例数据集

1辛普森,1拉尔夫·维古姆,2个乔恩 飞碟,3原子蚂蚁,2尸罗(蜘蛛)

查询.. “指的根数”

总数= 1 * 4 * 4 + 1 * 4 * 4 + 1 * 4 * 5 + 3 * 6 * 1 + 2 * 6 * 1 = 82周的手指(或让乔恩是人类)


我不知道是否有任何定义它的工具可解析自动创建继承的数据,并提请这种树,(同时使这种数据访问,如果加在那里更多钞票。)

它可以得出手动与例如FreeMind,但AFAIK它不让你自动定义数据类型或结构为创建项目的继承分支,所以它真的很烦人,必须通过复制(以及有错误的风险)重复和重复一个结构。对重复数据重复工作(人类运行重复代码),这是一个错误的功能。

所以我想在这让我重用 查询和可视化,如果所有的数据都是在XML或Java类,或在一个数据库文件等正确的语言写的数据。有是查看树并进行查询的一些工具?

PD:在文件系统创建嵌套的文件夹,并在树视图中使用诺顿指挥官,是不是一种选择,我希望(只是因为它必须手工建造)

回答

2

你的回答大多要依靠什么您已经拥有的编程技能以及您愿意获得的技能。我可以告诉你我将如何处理我所知道的事情。

我认为对于绘制树,你需要一个像qtree这样的LaTeX包。如果你不喜欢这个,那里有一堆其他人。如果我正确地理解了你的意图,你必须用你最喜欢的脚本语言来编写一个脚本来解析你的输入到LaTeX代码中来生成树,但是在大多数语言中这可以用少于100行的线来完成。我肯定会推荐使用像Ruby的REXML这样的库来存储XML格式的数据,或者你最喜欢的脚本语言。

如果您希望生成更多交互式树木,请查看Adobe Flex Framework。再说一遍,如果你不喜欢这个特定的框架,那里有其他一些其他的(我推荐博客FlowingData)。

希望这可以帮助,我没有悲观地误解你的问题。

+0

1因为你的理解是正确的,那么你的答案是以第一种语言创建数据结构(可能是为回答查询做好准备),然后用第二语言创建一个脚本来构建LaTeX代码输出(第三种语言),这是一条长路径,但可以工作 – 2010-09-03 16:34:47

+0

我发现这一个http://www.graphviz.org/,它不是一个完整的解决方案,但将是一个选项LaTeX – 2010-09-07 17:06:38

1

数据结构。看看Exist XML database,如果我可以这么说,它是最完整的XML数据库。它配备了许多工具,让您快速入门!如管理http界面中的XQuery Sandbox选项。

实施例数据集 1辛普森,1拉尔夫·维古姆,2乔恩斯基特,3原子蚂蚁,2尸罗(蜘蛛)

我假设有2个实例的jon skeet,的3个实例的Shelob

这里Atomic ant和2实例是XQuery示例:

let $doc := 
<root> 
    <definition> 
     <AnimatedCartoons> 
      <extremities>4</extremities> 
      <fingers_per_ext>4</fingers_per_ext> 
     </AnimatedCartoons> 
     <Human> 
      <extremities>4</extremities> 
      <fingers_per_ext>5</fingers_per_ext> 
     </Human> 
     <Insects> 
      <extremities>6</extremities> 
      <fingers_per_ext>1</fingers_per_ext> 
     </Insects> 
     <Arachnids> 
      <extremities>6</extremities> 
      <fingers_per_ext>1</fingers_per_ext> 
     </Arachnids> 
    </definition> 

    <subject><name>Homer Simpson</name><kind>AnimatedCartoons</kind></subject> 
    <subject><name>Ralph Wiggum</name><kind>AnimatedCartoons</kind></subject> 
    <subject><name>jon skeet</name><kind>Human</kind></subject> 
    <subject><name>jon skeet</name><kind>Human</kind></subject> 
    <subject><name>Atomic ant</name><kind>Insects</kind></subject> 
    <subject><name>Atomic ant</name><kind>Insects</kind></subject> 
    <subject><name>Atomic ant</name><kind>Insects</kind></subject> 
    <subject><name>Shelob</name><kind>Arachnids</kind></subject> 
    <subject><name>Shelob</name><kind>Arachnids</kind></subject> 
</root> 
let $definitions := $doc/definition/* 
let $subjects := $doc/subject 

(: here goes some query logic :) 
let $fingers := fn:sum( 
    for $subject in $subjects 
    return (
     for $x in $definitions 
     where fn:name($x) = $subject/kind 
     return $x/extremities * $x/fingers_per_ext 
     ) 
    ) 
return $fingers 
+0

我看到XML是路径,数据的层次更多XML比关系数据库,但我正在寻找一个编辑/可视化工具,让我然后做查询。还有一点,在我的例子中有四个或至少三个表格,你只用了两个表格,但是很好的解释是为了简化你的代码,无论如何都是为了贡献! – 2010-09-10 12:44:56

+0

正确的XML看起来更像: guigui42 2010-09-13 13:10:57