简单而常见的树状数据结构
数据结构示例
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 Homer Simpson,1 Ralph Wiggum,2 jon 双向飞碟,3原子蚂蚁,2 Shelob(蜘蛛)
查询..“手指数”
数字= 1 * 4 * 4 + 1 * 4 * 4 + 1 * 4 * 5 + 3 * 6 * 1 + 2 * 6 * 1 = 82个手指(让Jon成为人类)
我想知道是否有任何工具可以定义它 parseable 来自动创建继承的数据,并绘制这种树,(加上这种树)数据访问,如果可能的话......)
可以使用例如FreeMind手动绘制,但是AFAIK它不允许您将数据类型或结构定义为自动创建项目的继承分支,所以它真的很烦人必须通过复制(并有犯错的风险)重复和重复一个结构。重复数据重复工作(人类运行重复代码),这是一个错误的功能。
所以我想用正确的语言编写数据,让我重用它 对于查询和可视化,如果所有数据都是XML,Java类或数据库文件等,那么有一些用于查看树和进行查询的工具?
PD:在文件系统中创建嵌套文件夹并在树视图中使用Norton Commander不是一个选项,我希望(因为它必须手动构建)
答案 0 :(得分:2)
您的答案主要取决于您已有的编程技巧以及您愿意获得的技能。我可以告诉你我会用我所知道的做什么。
我认为在绘制树时你想要一个像qtree这样的LaTeX包。如果你不喜欢这个,那里有很多其他人。您必须编写一个脚本,无论您最喜欢的脚本语言是将您的输入解析为LaTeX代码以生成树,但如果我正确理解您的意图,这可以通过大多数语言中少于100行的方式轻松完成。我肯定会建议使用像Ruby REXML这样的库,或者你喜欢的任何脚本语言,以XML格式存储你的数据。
如果您想要生成更多交互式树,请查看Adobe Flex Framework。同样,如果你不喜欢这个特定的框架,那里有很多其他框架(我推荐博客FlowingData)。
希望这会有所帮助,但我并没有误解你的问题。
答案 1 :(得分:1)
您正在描述的数据结构看起来像xml格式。看看Exist XML database,如果可以这么说它是最完整的xml数据库。它配备了许多工具,可以让您快速入门!喜欢admin http界面中的XQuery Sandbox
选项。
示例数据集 1 Homer Simpson,1 Ralph Wiggum,2 jon双向飞碟,3原子蚂蚁,2 Shelob(蜘蛛)
我假设有jon skeet
的2个实例,Atomic ant
的3个实例和Shelob
的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
答案 2 :(得分:0)