LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2971|回复: 11

求教 一个文档管理系统的结构可不可以用文件系统树的形式?

[复制链接]
发表于 2005-4-10 18:21:27 | 显示全部楼层 |阅读模式
在 fedora 版面讨论 了一阵子, 但是毕竟懒猫老兄很忙, 我又是门外汉, 所以来这里讨论一下

使用 xml 描述只为了结构化, 描述方便, 将来实用的系统也许会大大简化

<知识点>
<名称>/usr/bin/fcitx</名称>
<说明>XXX中文输入法</说明>
<相关链接>
<适合发行版>Fedora Core</适合发行版>
<适合发行版>Mandriva Linux</适合发行版>
<标题>如何安装?</标题>
<URL> http://fedora.linuxsir.cn/usr/bin/fcitx/article20050408001.html </URL>
</相关链接>
<相关链接>
<适合发行版>Fedora Core</适合发行版>
<适合发行版>Debian</适合发行版>
<适合发行版>Mandriva Linux</适合发行版>
<标题>和SCIM的取舍?</标题>
<URL> http://fedora.linuxsir.cn/usr/bin/fcitx/article20050408024.html </URL>
</相关链接>
<相关链接>
<适合发行版>Debian</适合发行版>
<适合发行版>Mandriva Linux</适合发行版>
<标题>如何卸载?</标题>
<URL> http://fedora.linuxsir.cn/usr/bin/fcitx/article20050323454.html </URL>
</相关链接>
</知识点>

<知识点>
<名称>/usr/bin/scim</名称>
<说明>SCIM中文输入法</说明>
<相关链接>
<适合发行版>Fedora Core</适合发行版>
<适合发行版>Mandriva Linux</适合发行版>
<标题>如何安装?</标题>
<URL> http://fedora.linuxsir.cn/usr/bin/fcitx/article20050412001.html </URL>
</相关链接>
<相关链接>
<适合发行版>Fedora Core</适合发行版>
<适合发行版>Debian</适合发行版>
<适合发行版>Mandriva Linux</适合发行版>
<标题>和 fcitx 的取舍?</标题>
<URL> http://fedora.linuxsir.cn/usr/bin/fcitx/article20050408024.html </URL>
</相关链接>
<相关链接>
<适合发行版>Gentoo</适合发行版>
<适合发行版>Magic Linux</适合发行版>
<标题>如何卸载?</标题>
<URL> http://fedora.linuxsir.cn/usr/bin/fcitx/article20050706004.html </URL>
</相关链接>
</知识点>



文件系统的结构定义
<filesystem>
        <inode type='dentry'>

             <inode type='file'>
                   <object src='xxxxxx'>link to a external file</object>
             </inode>

             <inode type='symbol-link'>
                   <ref>... </ref>
             </inode>

              <!-- recursive -->
             <inode type='dentry'>... </inode>
            
             <inode type='dentry' src='xxxxxx'>mount another filesystem?</inode>

        </inode>
<filesystem>


示例
<filesystem>
     <inode type='dentry' name='/'>
        <inode type='dentry' name='bin' />
        <inode type='dentry' name='etc'>
                  <inode type='file' name='fstab' /> <!-- 如何定位与它有关的数据文件呢 -->
        </inode>
        <inode type='dentry' name='usr'>
                  <inode type='dentry' name='share'>
                            <inode type='dentry' name='doc'>
                                      <inode type=.....>
                                                   ....
         </inode></inode></inode>
         </inode>
     </inode>
</filesystem>


<file>
           <!-- 一个结点可以包含多篇文章 -->
          <article>
                    <section>
                             <author></author>
                             <publisher></publisher>
                             <license />
                             <platform-version />
                             <content>... </content>
                             <text>... </text>
                     </section>
          </article>

          <links type='url'>
            <!-- 到外部的引用列表 -->
                  <url>... </url>
          </links>

          <links type='file'>
            <!-- 文件系统内部的参考引用列表 -->
                  <file-ref>... </file-ref>
          </links>
</file>



因为几种想法都不成熟, 所以需要继续研究. 目标是可以容易地定位, 搜索, 合并不同的文件树, 包括类似于 ln -s 的效果, 类似于 mount 的效果, 类似于 unionfs 的效果等等

//bow
发表于 2005-4-10 20:57:37 | 显示全部楼层
这里的人感觉比FC版还少。。。

你又说的太抽像,反正我是看不明白怎么回事。

网上常见的文章系统的网站如果说结构的话应该都是树形结构的呀
回复 支持 反对

使用道具 举报

发表于 2005-4-10 21:42:04 | 显示全部楼层
<filesystem>
<inode type='dentry' name='/'>
<inode type='dentry' name='bin' />
<inode type='dentry' name='etc'>
<inode type='file' name='fstab' /> <!-- 如何定位与它有关的数据文件呢 -->
</inode>
<inode type='dentry' name='usr'>
<inode type='dentry' name='share'>
<inode type='dentry' name='doc'>
<inode type=.....>
....
</inode></inode></inode>
</inode>
</inode>
</filesystem>


您太谦虚了

刚才洗澡的时候想了一下你这个结构,我有个疑问:是不是有需要用到 inode 来标识XML节点呢?

我说一下自己最近的一些想法:

最有可能用到的脚本或文档类型
XML,XSLT,Javascript,PHP

数据库支持
估计需要MySQL或者任何一种关系数据库

服务器文件夹安排(可能的举例)
假设根目录为: http://fedora.linuxsir.cn/ 那么:
/usr/bin/fcitx 旗下的文章被存放于 http://fedora.linuxsir.cn/usr/bin/fcitx/ 里面

参考
XSL语法:
http://www.phpx.com/cma2229.html

以下是未经测试的XML文档局部

我还是不大习惯用属性的写法,关键是我不会在XSLT里转换

类FHS树

  1. <root>
  2.         <folder>
  3.                 <name>bin</name>
  4.                 <folder>
  5.                         <name>etc</name>
  6.                         <knowledge>
  7.                                 <name>fstab</name>
  8.                                 <url>/bin/etc/fstab/index.xml</url>
  9.                         </knowledge>
  10.                         <knowledge>
  11.                                 <name>aaaaa</name>
  12.                                 <url>/bin/etc/aaaaa/index.xml</url>
  13.                         </knowledge>
  14.                         <knowledge>
  15.                                 <name>cccccc</name>
  16.                                 <url>/bin/etc/ccccc/index.xml</url>
  17.                         </knowledge>
  18.                 </folder>
  19.                 <knowledge>
  20.                         <name>zzz</name>
  21.                         <url>/bin/zzz/index.xml</url>
  22.                 </knowledge>
  23.                 <knowledge>
  24.                         <name>yyy</name>
  25.                         <url>/bin/yyy/index.xml</url>
  26.                 </knowledge>
  27.         </folder>
  28.         <folder>
  29.                 <name>usr</name>
  30.                 <folder>
  31.                         <name>share</name>
  32.                         <knowledge>
  33.                                 <name>doc</name>
  34.                                 <url>/usr/share/doc/index.xml</url>
  35.                         </knowledge>
  36.                         <knowledge>
  37.                                 <name>aaa</name>
  38.                                 <url>/usr/share/aaa/index.xml</url>
  39.                         </knowledge>
  40.                         <knowledge>
  41.                                 <name>bbb</name>
  42.                                 <url>/usr/share/bbb/index.xml</url>
  43.                         </knowledge>
  44.                 </folder>
  45.                 <folder>
  46.                         <name>bin</name>
  47.                         <knowledge>
  48.                                 <name>fcitx</name>
  49.                                 <url>/usr/bin/fcitx/index.xml</url>
  50.                         </knowledge>
  51.                         <knowledge>
  52.                                 <name>d4x</name>
  53.                                 <url>/usr/bin/d4x/index.xml</url>
  54.                         </knowledge>
  55.                 </folder>
  56.                 <knowledge>
  57.                         <name>mmm</name>
  58.                         <url>/usr/mmm/index.xml</url>
  59.                 </knowledge>
  60.                 <knowledge>
  61.                         <name>nnn</name>
  62.                         <url>/usr/nnn/index.xml</url>
  63.                 </knowledge>
  64.         </folder>
  65. </root>
复制代码


对FHS树进行转换的XSL局部
这部分实际可以完全不需要使用XML而在PHP里直接实现,不过用PHP生成树效果是在服务端运算,而用XSLT生成树效果是在客户端运算。还有,低版本浏览器可能不支持XSLT,我也只知道可以在IE里正确使用XSLT,至于Mozilla、Firefox及Linux里众多的浏览器就不清楚了。

  1. <xsl:template match="/">
  2.         <xsl:apply-templates select="root/folder">
  3.         </xsl:apply-templates>
  4. </xsl:template>

  5. <xsl:template match="folder">
  6.         <!-- 这里需要按照层级加入一些空格以形成树状效果,可能需要为此而增加一两个属性 -->
  7.         <font color="blue"><xsl:value-of select="name" /></font>
  8.         <br />
  9.         <xsl:apply-templates select="folder">
  10.                 <!-- 其实我不知道这样递归的写法行不行,
  11.                 不行的话简单点,folder/name里把整个“/usr/bin/”写出来,少一点逻辑上的东西,
  12.                 也有一些显而易见的缺点。不过简单点的方法似乎使用普通的PHP资讯发布系统已经可以实现,
  13.                 不需要另写系统。
  14.                 -->
  15.         </xsl:apply-templates>
  16.         <!-- 这里需要按照层级加入一些空格以形成树状效果,可能需要为此而增加一两个属性 -->
  17.         <xsl:apply-templates select="knowledge">
  18.         </xsl:apply-templates>
  19. </xsl:template>

  20. <xsl:template match="knowledge">
  21.         <!-- 这个href属性的值,我习惯于使用发布系统的发布时刻生成完整的URL,即使有分成路径和文件名
  22.         两部分的需要,也是分别放进两个字段,在生成XML文档的时候合并输出成完整的URL。
  23.         -->
  24.         <xsl:element name="a">
  25.                 <xsl:attribute name="href">/usr/bin/index.xml</xsl:attribute>
  26.                 <font color="green"><xsl:value-of select="name" /></font>
  27.         </xsl:element>
  28.         <br />
  29. </xsl:template>
复制代码


文章内容的显示
略,原来设计的已经基本趋于完善了。

如何显示每个知识点的文章标题(链接)列表
我猜想可能会这样
(1)按照上述的结构
弹出或转到一个新的浏览器窗口或者标签,将会在index.xml中显示这类文章的标题链接列表。因为我猜您只是希望达到上面两段CODE结合后的效果。

(2)修改上述结构(玩客户端脚本技巧
把<a href="/usr/bin/index.xml">xxx</a>的效果改为<a href="#" onclick=".......">xxx</a>以及隐藏(style="display:none")的一个iframe或者隐藏的一个表格,在点击链接的时候改隐藏为显示(style="display:"),以使整个页面不会太长。
这种方法实现起来可能有点难度,也可以考虑改为其他布局方式“曲线救国”。

但这两种方法始终不利于针对FHS树的文本式搜索(脱离数据库的离线搜索),即在FHS树里找不到需要的文章标题,因为已经被分离到别的XML文档(index.xml)里了。但若坚持需要针对FHS树的文本式搜索,又可能需要把所有知识文章的标题(不是内容)集成到这个FHS树的网页文档里,发送到客户端的网页数据包可能会很大,而且,不知道非IE的浏览器的XML解释器是否支持对XML结点的遍历和搜索?

最后
我看上面的代码眼都花了,是不是想得太复杂了?
回复 支持 反对

使用道具 举报

发表于 2005-4-10 21:46:33 | 显示全部楼层
Post by gufei
这里的人感觉比FC版还少。。。

网上常见的文章系统的网站如果说结构的话应该都是树形结构的呀


呵呵,同意啊

其实bbbush现在只要解决这个子站首页那个FHS树显示的问题就可以了,其他问题都可以用普通的常见的文章系统解决。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-11 10:19:34 | 显示全部楼层
我也觉得是
想得太多,功力又不够, 不容易实现啊. 要不是前几天刚开始看 xsl 恐怕我还像看天书呢
先拿现在的那个子站的 drupal 试一试, 看看能不能建立层次的目录
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-13 23:29:29 | 显示全部楼层
想了两天, 发现问题很简单
只要开通一个不许添加/删除页面的 wiki, 只允许部分用户修改内容就可以了
用一个 xml 或者类似的文件例如 ls-lR 来表示文档树
然后用一个脚本来为这个文件里涉及的目录和文件都建立一个 wiki 页面
就可以了
其他内容都使用已有的
层次性表现在对 http request 的解析中

^_^ 是不是太简化了呢
回复 支持 反对

使用道具 举报

发表于 2005-4-14 11:07:45 | 显示全部楼层
先建好了版(栏目,可以理解为你所说的文件和目录),然后再考虑怎么表示吧。本来就是个很简单的问题啊

说实话我还没用过与Sir里类似的wiki系统。我知道的习惯做法是:
1)建版动作 -> 入库 -> 自动生成文件夹 -> 用脚本调出形成版面列表(任意形式,输出为XML就可以使用XSLT任意改变表示形式)
2)发布动作 -> 入库 -> 自动生成静态网页(同样,用XML的话可以任意改变显示模板) -> 自动更新本版内标题列表的JS脚本
3)在版面列表里使用JS脚本显示各版面标题列表(没有动作,全自动)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-19 17:20:01 | 显示全部楼层
用什么 wiki 好一点?drupal 自带 wiki 吗?freeway 用的 wiki 怎么样?media wiki 看起来不错似的
可惜 msdn 那个站点没有源代码 呵呵 不过即使有代码我怕我也看不懂玩不转
回复 支持 反对

使用道具 举报

发表于 2005-4-20 08:21:08 | 显示全部楼层
这三种wiki哪里有下载?我down下来试试看看?

我把msdn介绍给你只是想告诉你就是大概这样的表现形式。他那个列表是XML,所以可以在没有任何源代码的情况下用任何服务端脚本语言都可以生成,only 抄 idea
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-20 18:58:41 | 显示全部楼层
这些要问北南老大, 决定 freeway 采用什么 wiki 的时候, 究竟是怎么讨论的, 有什么考虑

ft 死了, 在 cosoft 申请项目, 成功了但是什么服务都没有。 壮着胆子去 sf 申请, 被驳回了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表