狠狠撸

狠狠撸Share a Scribd company logo
Socrates 动态建模工具

March Liu <march.liu@gmail.com>

    理论及 Python + PostgreSQL 实现


          July 15, 2011




                            .    .   .   .   .   .
什么是 Socrates?




          .   .   .   .   .   .
动态建模设计




         .   .   .   .   .   .
用一套数据库结构自适应任意数据结构




             .   .   .   .   .   .
可扩展,可适应未知类型




          .   .   .   .   .   .
自解读,不需要额外的辅助信息,可以从数据库中得到完整的信
           息内容和结构。




                  .   .   .   .   .   .
三元结构



  ?   Socrates 的原子结构称为 subject(条目/主语)。这是一个
      map 数据结构




                              .   .   .   .   .   .
三元结构



  ?   Socrates 的原子结构称为 subject(条目/主语)。这是一个
      map 数据结构
  ?   每个 subject 有内部的精细结构,由一组三元短语描述,称
      为 segment




                              .   .   .   .   .   .
三元结构



  ?   Socrates 的原子结构称为 subject(条目/主语)。这是一个
      map 数据结构
  ?   每个 subject 有内部的精细结构,由一组三元短语描述,称
      为 segment
  ?   三元短语结构为 (subject, predicate, object)




                                      .   .   .   .   .   .
三元结构



  ?   Socrates 的原子结构称为 subject(条目/主语)。这是一个
      map 数据结构
  ?   每个 subject 有内部的精细结构,由一组三元短语描述,称
      为 segment
  ?   三元短语结构为 (subject, predicate, object)
  ?   predicate ,即谓词,表示 subject 的内部结构,即字典的
      key




                                      .   .   .   .   .   .
三元结构



  ?   Socrates 的原子结构称为 subject(条目/主语)。这是一个
      map 数据结构
  ?   每个 subject 有内部的精细结构,由一组三元短语描述,称
      为 segment
  ?   三元短语结构为 (subject, predicate, object)
  ?   predicate ,即谓词,表示 subject 的内部结构,即字典的
      key
  ?   object,即宾语,指 subject 由谓词表达的值,即字典的
      value




                                      .   .   .   .   .   .
主语 Subject




  在语义上,主语 subject 表示一组相关子句的集合。在实现上,
  subject 是一个匿名的字典。存储于数据库中的时候,由数据库
  维护其 id,但是通常用户并不需要直接关心其 id,而是在应用层
  通过变量使用它。




                        .   .   .   .   .   .
谓语 Predicate




  谓词在应用层取出的 subject 中,就是字典的 key。在数据库
  中,它表示 subject 所具有的内部结构。每个 predicate 必须有
  自己的名字,需要标的自己的宾语类型,即 obType。根据
  objType,可以得到宾语存储的位置。(未来可能改变)




                            .   .   .   .   .   .
宾语 object




  宾语是实际的值,它可能有任何类型,Socrates 只要求最少实
  现三种类型: 基本的 string 和 subject(实际上是 integer 或
  string),和 integer(如果不考虑 array 支持,可以不包含
  integer)。




                               .   .   .   .   .   .
语义设计




       .   .   .   .   .   .
META SEGMENTS I
  为了实现自解释,Socrates 系统包含一组元语义:
   ?   subject is type
   ?   predicate is subject
   ?   is is predicate
   ?   is objType subject
   ?   objType is predicate
   ?   objType objType subject
   ?   type is subject
   ?   string is type
   ?   name is predicate
   ?   name objType string
   ?   storage is predicate
   ?   storage objType string
   ?   uri is predicate
   ?   uri objType string
                                 .   .   .   .   .   .
示例




 通过前面的元语定义,我们可以做到信息自解释。例如,一个人
 员信息条目可能是:
             ?
             ?username, "MarchLiu"
             ?
    subject = mail,     "march.liu@gmail.com"
             ?
             ?
               ...




                              .   .   .   .   .   .
user name




  其中 username 谓词:
                      ?
                      ?is,
                      ?           predicate
            username = name,      "username"
                      ?
                      ?
                       objType,   "string"




                                     .   .     .   .   .   .
mail




   mail 谓词:
                    ?
                    ?is,
                    ?            predicate
              mail = name,       "mail"
                    ?
                    ?
                      objType,   string




                                      .      .   .   .   .   .
Predicate 也是 subject




  这里两次出现的 (objType, string),是一条 segment,说明
  predicate 的宾语类型。类型 string 本身也是一个 subject
                      {
                        name,    "string"
             string =
                        stroage, "segments tring"
  至此,已经完全进入到了原语定义范畴,不需要再递归解释了。




                                    .   .   .   .   .   .
已实现的功能




     .   .   .   .   .   .
Python + SQLAlchemy




              .   .   .   .   .   .
SQLite + PostgreSQL




                      .   .   .   .   .   .
罢顿顿,测试即文档




            .   .   .   .   .   .
通过所有测试 (暂时不包括 array)




                .   .   .   .   .   .
初级的 dsl 表达式支持




            .   .   .   .   .   .
postgreSQL plpgsql




              .   .   .   .   .   .
初步的 segment 读写




                 .   .   .   .   .   .
一些常用的谓词操作




            .   .   .   .   .   .
缺陷、构想和待实现的功能




        .   .   .   .   .   .
DSL 和 Script




               .   .   .   .   .   .
性能优化




       .   .   .   .   .   .
动态类型




       .   .   .   .   .   .
其它语言的实现




          .   .   .   .   .   .
基于 PostgreSQL 的可持久化 Socrates 环境。




                       .   .   .   .   .   .
正在实现




       基于 objective c 和 sqlite 的定制 ios 嵌入版




                                 .   .   .   .   .   .
谢谢大家,再见!
          ? Power By LTEX
                     A




      .   .   .   .   .     .

More Related Content

Socrates Used PostgreSQL and SQLAlchemy