创建,可视化和查询简单数据结构

时间:2010-09-03 15:56:03

标签: sql data-structures visualization mindmapping

简单而常见的树状数据结构

数据结构示例

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不是一个选项,我希望(因为它必须手动构建)

3 个答案:

答案 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)

带有可视化的XML Schema Editor也许就是我要搜索的内容

http://en.wikipedia.org/wiki/XML_Schema_Editor

检查..