欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

PHP 构建语义 Web CRUD 操作

程序员文章站 2022-05-03 19:33:36
...
  创建、读、更新和删除(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, locationFROM UserTable WHERE realname = "John Smith";

  将这段基于 SQL 的代码与清单 2 中所示的基于 SPARQL 的代码相比较。采用这两个 read 操作的原因在于它们最易于理解、实现和说明。这对于 SQL 和 SPARQL 来说都是一样的。

  PREFIX foaf:

  在比较两张清单时,您的第一个想法很可能是 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。

  创建

  SPARQL 中的 CRUD 操作通常比 read 操作更神秘。但是,可以完成这些操作。首先,create 操作将把新记录或对象插入到表或图表中。

  INSERT INTO UserTable (realname, dob, location) VALUES ("John Smith", "1985-01-01", "Bristol, UK");

  现在,比较清单 3 中基于 SQL 的代码与清单 4 中基于 SPARQL 的代码中的 create 操作。

  PREFIX foaf:

  同样,注意 PREFIX 行与用 SPARQL 在 read 操作中执行的操作完全相同。INSERT INTO 的工作原理类似于 SQL,但是同样,这是基于 URI 的,而非基于字符串、基于表和基于名称的,这允许使用 HTTP 完成操作。您必须再次指定模式。在这里,比在 read 操作中了解起来略微简单一些,因为您几乎可以拥有任何属性,只要它与模式兼容。这就是 RDF 所提供的分布式动态可扩展对象的优点。

  删除

  从某一程度来说,如果要创建,那很可能需要进行删除。例如,用户可能想要删除他们在您站点中的帐户(这显然是件遗憾的事情,他们想要离开,但是他们可能有正当的理由)。清单 5 提供了典型 delete 操作的 SQL 代码。

  DELETE FROM UserTable WHERE realname = "John Smith"

  现在,比较清单 5 中基于 SQL 的代码与清单 6 中基于 SPARQL 的代码。