国家图书馆10万部/件古籍资源无需登录即可网上阅览?

栏目:古籍资讯发布:2023-08-05浏览:6收藏

国家图书馆10万部/件古籍资源无需登录即可网上阅览?,第1张

11月30日,国家图书馆发布公告,已通过“中华古籍资源库”累计发布各类古籍资源总量达10万部/件,包括馆藏善本古籍、普通古籍、甲骨、敦煌文献、碑帖拓片、西夏文献、赵城金藏、地方志、家谱、年画、老照片等,以及馆外、海外征集古籍资源,读者无需登录即可访问阅览。

其中,“数字古籍”数据库通过全彩影像数字化和缩微胶卷转化影像方式建设,发布国家图书馆藏善本古籍和普通古籍,从2016年9月28日起陆续上线,目前已发布馆藏古籍2万余部;“数字方志”数据库中的地方志文献为我国所特有,也是国家图书馆独具特色的馆藏之一,所存文献数量与品质很高,该数据库以国家图书馆藏地方志文献建设,目前发布馆藏方志资源6528种。

在“中华古籍资源库”主页面,读者可使用高级检索,各子库组合检索,还可选择书名、著者、索书号等精确和组合检索。通过点击检索结果中的题名,可进入全文阅览界面;点击需要阅读的册次,可阅览整册全文影像。同时,使用页面各种阅览工具,可实现页面切换、放大阅览等功能。

教务老师了解到,读者可通过多种形式进入“中华古籍资源库”,包括登录国家图书馆主页,点击“中华古籍资源库”进入主检索界面,或在“特色资源”栏目中点击“数字古籍”等各子库;或在国家图书馆主页面,选择“资源”选项,点击“古籍”, 进入古籍资源列表,点击“中华古籍资源库”,进入检索主页面。

文/北青-北京头条教务老师 张知依

自考/成考有疑问、不知道自考/成考考点内容、不清楚当地自考/成考政策,点击底部咨询官网老师,免费领取复习资料:https://www87dhcom/xl/

古籍的数字化最早是从计算机技术发达的美国开始的。20 世纪 70 年代末,OCLC 和RLIN 先后推出了《朱熹大学章句索引》、 《王阳明传习录索引》、《戴震原善索引》等数据库,到 20 世纪 80 年代以后,中国的台湾、香港和大陆才相继开始了中文古籍数字化项目。 从 20 世纪 80 年代起,大陆地区开始出现了古籍数字化的工作,但是研究和成果少。直至进入 90 年代以后,随着我国计算机的普及网络技术的介入,才有了古籍数字化的雏形。90 年代中期以后,国家图书馆制订了一个庞大的古籍特藏文献数字化计划 ,如碑砧菁华、西夏碎金、敦煌遗珍、数字方志以及甲骨文、永乐大典等。北京大学《中国基本古籍光盘库》,计划收录古籍1万种 。迪志文化出版有限公司、上海人民出版社推出了文渊阁《四库全书》全文检索版。书同文数字化技术有限公司推出了《四部丛刊》的全文检索版。国学公司推出了《国学宝典》等系列产品。截止 2004 年底,网上可见的中文古籍数据库约 70 多个。北京大学主持的 CALIS 项目及南京大学图书馆 CANAL项目古籍子项目已取得阶段性成果。

Connectorphp负责与数据库通信,增删改读(CRUD)

首先, 建一个Connector类, 并且设置属性

<php

class Connector {

// 数据库地址前缀,常见的有mysql,slqlsrv,odbc等等等

private $driver = 'mysql';

// 数据库地址

private $host = 'localhost';

// 数据库默认名称, 设置为静态是因为有切换数据库的需求

private static $db = 'sakila';

// 数据库用户名

private $username = 'root';

// 数据库密码

private $password = '';

// 当前数据库连接

protected $connection;

// 数据库连接箱,切换已存在的数据库连接不需要重新通信,从这里取即可

protected static $container = [];

// PDO默认属性配置,具体请自行查看文档

protected $options = [

PDO::ATTR_CASE => PDO::CASE_NATURAL,

PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,

PDO::ATTR_ORACLE_NULLS => PDO::NULL_NATURAL,

PDO::ATTR_STRINGIFY_FETCHES => false,

];

}以上代码配合注释应该可以理解了所以不多解释了,直接进入函数

buildConnectString - 就是生成DSN连接串, 非常直白

protected function buildConnectString() {

return "$this->driver:host=$this->host;dbname="self::$db;

}

// "mysql:host=localhost;dbname=sakila;"connect - 连接数据库

public function connect() {

try {

// 连接数据库,生成pdo实例, 将之赋予$connection,并存入$container之中

self::$container[self::$db] = $this->connection = new PDO($this->buildConnectString(), $this->username, $this->password, $this->options);

// 返回数据库连接

return $this->connection;

} catch (Exception $e) {

// 若是失败, 返回原因

// 还记得dd()吗这个辅助函数还会一直用上

dd($e->getMessage());

}

}setDatabase - 切换数据库

public function setDatabase($db) {

self::$db = $db;

return $this;

}_construct - 生成实例后第一步要干嘛

function construct() {

// 如果从未连接过该数据库, 那就新建连接

if(empty(self::$container[self::$db])) $this->connect();

// 反之, 从$container中提取, 无需再次通信

$this->connection = self::$container[self::$db];

}接下来两个函数式配合着用的,单看可能会懵逼, 配合例子单步调试

$a = new Connector();

$bindValues = [

'PENELOPE',

'GUINESS'

];

dd($a->read('select from actor where first_name = and last_name = ', $bindValues));返回值

array (size=1)

0 =>

object(stdClass)[4]

public 'actor_id' => string '1' (length=1)

public 'first_name' => string 'PENELOPE' (length=8)

public 'last_name' => string 'GUINESS' (length=7)

public 'last_update' => string '2006-02-15 04:34:33' (length=19)read - 读取数据

public function read($sql, $bindings) {

// 将sql语句放入预处理函数

// $sql = select from actor where first_name = and last_name =

$statement = $this->connection->prepare($sql);

// 将附带参数带入pdo实例

// $bindings = ['PENELOPE', 'GUINESS']

$this->bindValues($statement, $bindings);

// 执行

$statement->execute();

// 返回所有合法数据, 以Object对象为数据类型

return $statement->fetchAll(PDO::FETCH_OBJ);

}bindValues - 将附带参数带入pdo实例

// 从例子中可以看出, 我用在预处理的变量为, 这是因为pdo的局限性, 有兴趣可以在评论区讨论这个问题

public function bindValues($statement, $bindings) {

// $bindings = ['PENELOPE', 'GUINESS']

// 依次循环每一个参数

foreach ($bindings as $key => $value) {

// $key = 0/1

// $value = 'PENELOPE'/'GUINESS'

$statement->bindValue(

// 如果是字符串类型, 那就直接使用, 反之是数字, 将其+1

// 这里是数值, 因此返回1/2

is_string($key) $key : $key + 1,

// 直接放入值

// 'PENELOPE'/'GUINESS'

$value,

// 这里直白不多说

// PDO::PARAM_STR/PDO::PARAM_STR

is_int($value) PDO::PARAM_INT : PDO::PARAM_STR

);

}

}所以懂了吗_( :3」∠)

update - 改写数据

// 与read不同的地方在于, read返回数据, update返回boolean(true/false)

public function update($sql, $bindings) {

$statement = $this->connection->prepare($sql);

$this->bindValues($statement, $bindings);

return $statement->execute();

}delete - 删除数据

// 与update一样, 分开是因为方便日后维护制定

public function delete($sql, $bindings) {

$statement = $this->connection->prepare($sql);

$this->bindValues($statement, $bindings);

return $statement->execute();

}create - 增加数据

// 返回最新的自增ID, 如果有

public function create($sql, $bindings) {

$statement = $this->connection->prepare($sql);

$this->bindValues($statement, $bindings);

$statement->execute();

return $this->lastInsertId();

}lastInsertId - 返回新增id, 如果有

// pdo自带,只是稍微封装

public function lastInsertId() {

$id = $this->connection->lastInsertId();

return empty($id) null : $id;

}过于高级复杂的SQL语句可能无法封装, 因此准备了可直接用RAW query通信数据库的两个函数

exec - 适用于增删改

public function exec($sql) {

return $this->connection->exec($sql);

}query - 适用于读

public function query($sql) {

$q = $this->connection->query($sql);

return $q->fetchAll(PDO::FETCH_OBJ);

}将数据库事务相关的函数封装起来, 直白所以没有注释

public function beginTransaction() {

$this->connection->beginTransaction();

return $this;

}

public function rollBack() {

$this->connection->rollBack();

return $this;

}

public function commit() {

$this->connection->commit();

return $this;

}

public function inTransaction() {

return $this->connection->inTransaction();

}完整代码<php

class Connector {

// 数据库地址前缀,常见的有mysql,slqlsrv,odbc等等等

private $driver = 'mysql';

// 数据库地址

private $host = 'localhost';

// 数据库默认名称, 设置为静态是因为有切换数据库的需求

private static $db = 'sakila';

// 数据库用户名

private $username = 'root';

// 数据库密码

private $password = '';

// 当前数据库连接

protected $connection;

// 数据库连接箱,切换已存在的数据库连接不需要重新通信,从这里取即可

protected static $container = [];

// PDO默认属性配置,具体请自行查看文档

protected $options = [

PDO::ATTR_CASE => PDO::CASE_NATURAL,

PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,

PDO::ATTR_ORACLE_NULLS => PDO::NULL_NATURAL,

PDO::ATTR_STRINGIFY_FETCHES => false,

];

function construct() {

// 如果从未连接过该数据库, 那就新建连接

if(empty(self::$container[self::$db])) $this->connect();

// 反之, 从$container中提取, 无需再次通信

$this->connection = self::$container[self::$db];

}

// 生成DSN连接串

protected function buildConnectString() {

return "$this->driver:host=$this->host;dbname="self::$db;

}

// 连接数据库

public function connect() {

try {

// 连接数据库,生成pdo实例, 将之赋予$connection,并存入$container之中

self::$container[self::$db] = $this->connection = new PDO($this->buildConnectString(), $this->username, $this->password, $this->options);

// 返回数据库连接

return $this->connection;

} catch (Exception $e) {

// 若是失败, 返回原因

dd($e->getMessage());

}

}

// 切换数据库

public function setDatabase($db) {

self::$db = $db;

return $this;

}

// 读取数据

public function read($sql, $bindings) {

// 将sql语句放入预处理函数

$statement = $this->connection->prepare($sql);

// 将附带参数带入pdo实例

$this->bindValues($statement, $bindings);

// 执行

$statement->execute();

// 返回所有合法数据, 以Object对象为数据类型

return $statement->fetchAll(PDO::FETCH_OBJ);

}

// 将附带参数带入pdo实例

public function bindValues($statement, $bindings) {

// 依次循环每一个参数

foreach ($bindings as $key => $value) {

$statement->bindValue(

// 如果是字符串类型, 那就直接使用, 反之是数字, 将其+1

is_string($key) $key : $key + 1,

// 直接放入值

$value,

// 这里直白不多说

is_int($value) PDO::PARAM_INT : PDO::PARAM_STR

);

}

}

// 改写数据

public function update($sql, $bindings) {

// 与read不同的地方在于, read返回数据, update返回boolean(true/false)

$statement = $this->connection->prepare($sql);

$this->bindValues($statement, $bindings);

return $statement->execute();

}

// 删除数据

public function delete($sql, $bindings) {

$statement = $this->connection->prepare($sql);

$this->bindValues($statement, $bindings);

return $statement->execute();

}

// 增加数据

public function create($sql, $bindings) {

$statement = $this->connection->prepare($sql);

$this->bindValues($statement, $bindings);

$statement->execute();

return $this->lastInsertId();

}

// 返回新增id, 如果有

public function lastInsertId() {

$id = $this->connection->lastInsertId();

return empty($id) null : $id;

}

// 适用于增删改

public function exec($sql) {

return $this->connection->exec($sql);

}

// 适用于读

public function query($sql) {

$q = $this->connection->query($sql);

return $q->fetchAll(PDO::FETCH_OBJ);

}

public function beginTransaction() {

$this->connection->beginTransaction();

return $this;

}

public function rollBack() {

$this->connection->rollBack();

return $this;

}

public function commit() {

$this->connection->commit();

return $this;

}

public function inTransaction() {

return $this->connection->inTransaction();

}

}本期疑问1) 因为php本身的特性, 默认情况下运行完所有代码类会自行析构,pdo自动断联, 所以我没有disconnect(),让pdo断开连接, 不知这样是不是一种 bad practice

2) 增加和改写数据的两个函数并不支持多组数据一次性加入,只能单次增该, 原因是我之前写了嫌太繁琐所以删了, 有心的童鞋可以提供方案

论文数据库设计需要按照以下数据内容按顺序排列即可。

1、学院数据实体:学院名称、负责人、办公电话、学院编号。

2、学生数据实体:学号、密码、姓名、性别、民族、籍贯、出生日期、身份证号、联系电话、Email、备注、学院编号、所在班级、角色名称、论文编号。

3、教师数据实体:教师编号、密码、学院编号、所在科室、发布选题、教育程度、职称、姓名、性别、政治面貌、联系电话、Email、角色名称、备注。

4、角色数据实体:角色名称、权限名称。权限数据实体:权限名称、角色名称。以上的实体都是基本的数据实体。

由于操作模块的名称对应该权限,在程序初始化时这些数据都应该添加,教师论文管理系统的目的进行论文管理,因此还要包括如下的几个数据实体:

1、论文数据实体:论文编号、学院、作者、刊物名称、论文题目、收录情况、教师编号、学号、影响力、影响因子、引用次数、备注。

2、评审数据实体:教师编号、学号、论文编号、论文题目、评审意见、总分。

将数据概念结构设计转化为SQLSERVER2005数据库系统所支持的实际数据库模型,就是数据库的逻辑结构。在实体以及实体之间的关系基础上,形成数据库中的表格以及各个表格之间的关系。

扩展资料:

论文数据库设计注意事项:

1、标题。标题应鲜明、准确、精练地直接概括所进行的研究实践的主要内容和结果,正标题一般不超过20个字,如需有副标题,副标题一般不超过28个字。

2、内容提要。在主体内容前用200-500字扼要介绍论文的主要内容、采用的方法和得出的主要结论。

3、关键词。按照与论文内容紧密程度,另行依次列出3-5个关键词。

4、英文翻译内容。中文的标题、作者姓名、指导教师姓名、内容提要、关键词应翻译成英文。

参考资料:

-文献数据库

数字化是古籍再生性保护的重要手段;古籍数字化属于古籍整理的范畴,代表着古籍整理的未来方向。

“古籍数字化” 是指利用现代信息技术对古籍文献进行加工处理,使其转化为电子数据形式,通过光盘、网络等介质保存和传播。

我国古籍数字化经历了数据库版、光盘版、网络版三个建设阶段。数据库版古籍包括书目数据库和全文数据库两种形式。光盘版古籍一般有图像版、全文版和图文版三种类型。网络版古籍主要是将数字化的古籍资源在网络上有偿或无偿发布,供互联网用户使用,这是目前古籍数字化的主要目标。

古籍数字化是对古籍或古籍内容的再现和加工,属于古籍整理的范畴,是古籍整理的一部分。

再生性保护>=古籍整理>古籍数字化

个人认为,数字方志馆的建设可从四个方面进行:

1、方志信息资源建设

2、网络建设

3、地情信息法制环境建设

4、人才和队伍建设

其中,最重要的是,首先应该有个资料比较齐全的 数字方志库,尤其是古籍方志,资料越全、使用越 方便越好。现在找古籍书真是太费劲了。

这个只是用于备案而已,不要注重太多的实质性内容,好看即可。如:XX网站建设方案书一、网站建设目的及功能定位XX有限公司网站的建设目标是:建成优秀的设计业内专业网站,展示公司形象,服务于公司日常运营。通过公司网站展示公司服务范围和优秀案例,让客户能够了解本公司,能够对感兴趣的服务作详细了解,并通过网站提交反馈信息。二、网站整体框架规划网站整体为标题型框架设有:关于XX设计服务设计案例最新动态人才招聘联系我们三、网站技术解决方案根据网站的功能确定网站技术解决方案:服务器采用租用XX主机,选用XX操作系统,单月流量8GB,并发连接数150个,能支持PHPv43/v52/v53,HTML,WAP,PERL5,CGI-bin等开发语言:数据库采用:MySQL5148(20M)、SQLitev2814,本参数能够满足本公司的网站正常运行。

写在前头依然在前进的菜鸟一只,错误什么的请轻喷指出

对于数据库连接由于较浅的工作经验所以无法完全覆盖,较复杂的query可能会有意想不到的bug

所以本系列只提供思路,成熟稳定的数据库封装有请自行搜索

编写该系列的初衷就是为了抛砖引玉, 在每一节的后端,我都会提出一些个人疑问(或无),希望能引出大神为我解答迷惑

使用的php版本为70+,该系列并不向下兼容,还在56版本的童鞋们快过来玩呀

数据库封装参考了laravel的源代码, 如有雷同, 不是巧合

最终效果假设我们有一个表,名'Actor', 经过简单设置, 可以直接如下调用

$a = Actor::select('first_name', 'last_name')

->where('first_name', 'NICK')

->where('last_name', 'WAHLBERG')

->first()

var_dump($a);返回格式

object(Actor)[11]

public 'first_name' => string 'NICK' (length=4)

public 'last_name' => string 'WAHLBERG' (length=8)返回的数据依然可操作(update/delete)

$a->update();

$a->delete();常见的数据库连接写法对php有一定了解的人都知道,相比已被淘汰的mysql或取而代之的mysqli, pdo 可以避免SQL注入式攻击, 更安全, 而且面向对象, 所以以下以pdo作为例子

<php

$driver='mysql'; //数据库类型

$host='localhost'; //数据库主机名

$db = 'sakila'; //数据库名称

$username='root'; //数据库连接用户名

$password=''; //数据库密码

$dsn="$driver:host=$host;dbname=$db";

try {

$pdo= new PDO($dsn, $username, $password); //初始化一个PDO对象

$sql = "select from actor";

$res = $pdo->query($sql); // 从actor中获取所有数据

foreach($res as $row) echo $row['first_name']"<br>";

} catch (PDOException $e) {

die($e->getMessage());

}以上例子非常简洁, 当一个项目逐渐成长,日渐复繁的时候,那么我们需要一个封装类来减少代码的重复性, 就像平时自行写的一些辅助函数, 不过封装类略微进阶而已。

基本思路那么,应该怎么写呢?

首先, 平时我们要简略一些代码, 都会自行编写一些辅助函数,比如我个人有个不好的习惯,不喜欢用编辑器的调试功能(画外音:我用的是sublime text 3),那么debug的时候一开始都是这么写的

$a = "is bug";

die(var_dump($a)); // 输出变量并且停止运行之后的代码

/从xdebug得知bug出现在这一行,所以查看上一行的逻辑与数据 /die(var_dump())的出场率略高, 因此我将它们写成了一个辅助函数

function dd($var) {

die(var_dump($var));

}同样道理,在数据库读取的时候,select的出场率极高, 所以简单的包裹一下

function select($pdo, $table, $require, $where = []) {

$w = [];

// 将搜索条件转化为数据库命令能接受的格式

foreach ($where as $key => &$val)

$w[] = "$key = '$val'";

// 有时候并不需要条件,仅仅将所有数据取出,因此$where默认为空

if(!empty($w)) $w = "where "implode(', ', $w);

else $w = "";

// 生成sql query

$sql = "select $require from $table $w";

// 将已生成的query带入pdo实例

$res = $pdo->query($sql);

// 返回结果

return $res->fetchAll();

}例子

select($pdo, 'actor', '', ['first_name'=>'PENELOPE'])

/

生成sql query => select from actor where first_name = 'PENELOPE'

/总结一下, 数据库封装浅显的形容就是将参数带入辅助函数,让其自动生成SQL命令。

数据库封装的架构主要分成四个文件

Connectorphp - 负责与数据库的通信, 请求与返回数据库数据

Modelphp - 入口文件,负责表的设置, 并接受请求, 返回回应

Grammarphp - 将Builder存储的请求转化为SQL语句

Builderphp - 核心文件, 存储Model的请求,调用Grammar以返回SQL语句, 与参数变量一并送往Connector以获取数据库数据,再返还给Model

架构可能解释得不太好,但没关系, 接下来会慢慢一个个的深入解释

大致如此, 如果可以的话点个赞,或在下方评论区讨论, 只有反馈才能推动一个懒癌晚期病患继续前行。

热门文章
    确认删除?
    回到顶部