多数大学生出来选择的工作和专业无关
首页 > 专业知识

PHP构建语义WebCRUD操作

时间:2018-04-28 17:29:12 [来源]:郑州PHP培训学校

   PHP构建语义WebCRUD操作

  创建、读、更新和删除(Create/Read/Update/Delete,CRUD)操作是最基本的数据库操作,但是它们也是最重要的操作。CRUD操作通常是使用关系数据库系统中的结构化查询语言(Structured Query Language,SQL)完成的。随着Web 变得更加具有面向数据特性,因此需要从基于SQL的CRUD操作转移到基于语义 Web的CRUD操作。了解如何使用PHP 通过基于语义的Web 执行 CRUD操作。
  常用缩写词
  API — 应用程序编程接口(Application Programming Interface)CRUD — 创建/读/更新/删除(Create/Read/Update/Delete)HTTP — 超文本传输协议(Hypertext Transfer Protocol)MVC — 模式—视图—控制器(Model-View-Controller)OOP — 面向对象的编程(Object-Oriented Programming)RDF — 资源描述框架(Resource Description Framework)SPARQL — 简单协议和RDF 查询语言(Simple Protocol and RDF Query Language)SQL — 结构化查询语言(Structured Query Language)UI —用户界面(User interface)
  W3C — 万维网联盟(World Wide Web Consortium)在开发 Web 应用程序时,为逻辑层和UI 层创建放置服务器端代码的数据库结构是一种标准实践。要连接到数据库,服务器端代码需要执行一些基本的创建、更新、删除和— 最重要的— 读取记录等操作。由于Web 应用程序的后台数据库通常都是关系数据库,因此这些 CRUD操作都是使用众所周知的SQL语言执行的。但是,随着Web开发越来越多地采用面向对象的编程(OOP),模型也随之发生改变。
  资源描述框架(Resource Description Framework,RDF)是描述对象同时保留数据含义的理想方法。简单协议和RDF 查询语言(Simple Protocol and RDF Query Language,SPARQL — 发音为 “sparkle”)是通常用于针对该数据进行查询的语言,因为它在语句构成上匹配 RDF 本身的结构。RDF和SPARQL 都是所谓语义 Web 栈(semantic Web stack)中的技术。
  要彻底地应用语义 Web 理念,您可以使用SPARQL将传统的Web开发技术应用到 RDF 数据中。本文将展示如何使用简化的模式—视图—控制器(Model-View-Controller,MVC)设计模型、PHP 服务器端脚本语言和SPARQL 连接到 RDF — 与使用关系数据库系统中的SQL 相反。
  SQL和SPARQL CRUD操作
  先决条件
  本文假定您基本了解 SQL、PHP和Web 应用程序开发。了解语义 Web 也十分有利。要对基于语义 Web的数据运行 create、update和delete 命令,需要具有支持 SPARQL/Update 规范的语义 Web 数据库。
  在使用SQL和SPARQL 进行开发时,需要查看一下CRUD操作之间的异同。
  清单1 显示了read操作的SQL代码。
  SELECT realname, dob, location
  FROM UserTable
  WHERE realname = "John Smith";
  将这段基于SQL的代码与清单2中所示的基于SPARQL的代码相比较。采用这两个read操作的原因在于它们最易于理解、实现和说明。这对于SQL和SPARQL 来说都是一样的。
  清单 2. read 操作的 SPARQL 代码
  PREFIX foaf:
  PREFIX rdf:
  SELECT ?uri ?name ?dob ?location
  FROM
  WHERE
  { ?uri
  rdf:type foaf:Person ;
  foaf:name "John Smith" ;
  foaf:birthday
  ?dob ;
  foaf:location ?location .
  } ;
  在比较两张清单时,您的第一个想法很可能是SPARQL 版本明显比 SQL 版本长很多。这是事实,但是请不要误以为 SQL 必然更简单而且更干净。根据所运行引擎的不同,SPARQL 可以全部通过称为链接数据结果(linked data effect)的内容进行分发。此外,它允许拥有动态模式,因为它拥有互相链接的面向对象的透视图,与严格的SQL 关系透视图形成对照。如果您想要把关系数据库表分隔为许多数据孤岛,则实际上使用的SQL代码行将比 SPARQL多很多 — 更不必说 SQL中会出现大量令人讨厌的JOIN 描述符。
  SPARQL的前两行是PREFIX声明。根据语义 Web 理论,一切内容 — 无论是对象还是数据图来源(也是一个对象)— 都有统一资源标识符(Uniform. Resource Identifier,URI)。PREFIX行只是将临时标签应用到一些 URI中 —在本例中为 Friend of a Friend和RDF 模式。其中的好处是您以后可以在查询中使用PREFIX声明而不必使用完整的URI。
  SPARQL代码的下一行描述了查询请求。这条语句在本质上与 SQL语句相同,不同之处是对 URI的附加请求。注意问号的使用(?)是为了表示术语是变量。
  FROM语句描述了获取数据的位置。这在SQL和SPARQL中是相同的,只是在SPARQL中,数据源名称是URI,而非表示计算机或网络中某个物理位置的字符串。
  两者的WHERE语句完全不同,因为使用SPARQL,必须指定用于获取数据的模式。同样,如果尝试过使用关系方法执行此操作,则需要花费的代价比普通SQL多得多:需要使用PHP、Java? 编程语言或者一些其他服务器端语言才能执行数据源之间的检查。SPARQL代码行完成的操作比较明了,这包括确保正在检索的数据只属于Person 类型。SPARQL将获取名称和位置,同时执行一些模式匹配以查找正确的John Smith。
  PHP文本型数据库分类排序的实现
  在PHP编程中,如果你使用文本型数据库,也许会为它的分类排序问题感到头痛。下面小阳介绍一下如何运用PHP结合JavaScript脚本实现这个功能:如下图,当用户点击相应的标题类别时,如果该类别与原类别不同,则按相应类别相同的升降序排列;当点击类别与原类别相同,则按该类别与原来相反的顺序排列。(即假如图中把鼠标放至“歌手”标题,将提示“按[歌手][升序]排列”。)例子中文本数据库的格式为:每行的信息都各保存在一个文件下,文件内容格式为“歌曲名称|歌手|大小”。例如文件“找一个字代替.txt”的内容是“找一个字代替|卓依婷|48554”,每个文件都只有一行,且保存在“data”目录下。
  分类排序的思路是:将要排序的该类别所在信息读取到0_array[]数组中,对0_array[]进行排列,得到新排列的下标的数组$key_array[],再按下标的数组依次把文件读出来即可。
  下面我们编写这个PHP文件。
  //给分类排序予默认值:
  if (empty(0ed)) 0ed="musicname"; //排序类别if (empty($dir)) $dir=1; //升降序
  ?>
  sorted=""; //读取地址栏的类别信息
  dir=parseInt(""); //读取地址栏的升降序信息function sortby(obj){ //本函数用于指定点击的标题栏的链接地址,传递分类排序信息sorted==obj.ename ? mydir=-dir : mydir=dir; //如果排序类别就是所点击的类别,则改变升降序obj.href=location.pathname+"?sorted="+obj.ename+"&dir="+mydir; //指定链接地址}
  function tips(obj){ //本函数定义链接和状态栏的提示信息sorted==obj.ename ? mydir=-dir:mydir=dir;obj.href="sortby: 按["+obj.chname+"]["+ (mydir>0?"降序":"升序") +"]排列";obj.title="按["+obj.chname+"]["+ (mydir>0?"降序":"升序") +"]排列";/* 注意上两式的格式。首先第一行中只是只是指定该链接的路径为“sortby: 按……排列”,但状态栏中却没有出现“http://”等字样。
  实际上只要链接以不含空格和特殊字符的英文字串加“:”号,浏览器即认为这不是相对路径,状态栏将按链接路径显示(即使它是不合法的)。
  其次上两式右边都插入了一个三元运算子(“?:”),单独看来括号里的语句是不合JavaScript语法的。这种句式比较少见。
  当然你也可以写成if...else..的格式。
  浅析PHP正则表达式函数库
  本文向你介绍了PHP正则表达式函数库(POSIX 扩展)greedy匹配,我们要注意,在条件子模式以及其它许多 POSIX 扩展正则表达式语法中那些所不被不支持的特性。
  PHP正则表达式函数库学习中的警告:
  本类正则表达式并不能安全用于二进制模式。PCRE 函数库则可以。正则表达式在 PHP 中用来做复杂的字符串操作。支持正则表达式的函数为:
  ereg()
  ereg_replace()
  eregi()
  eregi_replace()
  split()
  spliti()
  这些函数都接受一个正则表达式字符串作为其第一个参数。PHP 使用由 POSIX 1003.3 定义的 POSIX 扩展正则表达式。POSIX 正则表达式完整的描述见包含在 PHP 发行包中 regex 目录下的 man 页面。可以通过类似 man /usr/local/src/regex/regex.7 的命令来阅读。
  需求:无需外部库文件就可以加入本扩展模块的支持。
  安装警告:除非知道自己在做什么,否则不要改变 TYPE。
  要激活 regexp 的支持在配置 PHP 时加上 --with-regex[=TYPE]。TYPE 可以是 system,apache 或 php 之一。默认使用 php。
  PHP的Windows 版本已经内置该扩展模块的支持。您无需加载任何附加的扩展库即可使用这些函数。我们来看看具体的相关操作:
  运行时配置:该扩展模块未定义任何设置指令。
  资源类型:该扩展模块未定义任何资源类型。
  预定义常量:该扩展模块未定义任何常量。
  PHP正则表达式函数的实例:
  // 如果在 $string 中任何地方找到 "abc" 则返回 &true;ereg ("abc", $string);
  // 如果 $string 以 "abc" 开头则返回 &true;ereg ("^abc", $string);
  // 如果 $string 以 "abc" 结尾则返回 &true;ereg ("abc$", $string);
  // 如果用户浏览器是Netscape 2,3或MSIE 3则返回&true;eregi ("(ozilla.[23]|MSIE.3)", $HTTP_USER_AGENT);// 将三个空格分隔的单词放入$regs[1],$regs[2]和$regs[3]中ereg ("([[:alnum:]]+) ([[:alnum:]]+)
  ([[:alnum:]]+)", $string,$regs);
  // 将标记放到 $string 开头
  $string = ereg_replace ("^", "", $string);// 将标记放到 $string 结尾
  $string = ereg_replace ("$", "", $string);// 删除$string中的所有换行符
  $string = ereg_replace ("\n", "", $string);?>
  PHP正则表达式函数相关的介绍就向你介绍到这里,希望对你了解和学习PHP正则表达式函数有所帮助。
 

上一篇:PHP安全基础原则与方法

下一篇:在PHP内创建一个Atom提要