本文使用统一建模语言(Unified Modeling Language,UML)来描述计时本体的抽象模型,使用Web本体语言(Web Ontology Language, OWL)来构建计时本体。计时本体主要包括时制 (TimeSystem)、计时表示(TimeRepresentation)、时间参照系(TimeReferneceSystem)、附加(Additional)和转换(Convertion)五个顶层包。时制的层次分类、计时表示中的元素设计主要是为符合古代计时制度多样的特点,而各种模块中的实例是根据古代计时概念内涵动态变化的特点而设置,如漏刻制包含有多个实例,具有不同的“刻数”“昏旦时刻”等属性,反映不同历史时间漏刻制的变化。附加模块中的类,为其他核心类的实例、属性进行注释,体现出来自不同学者的多种观点。各个模块核心类的结构关系如图1所示。
(1)时制:用于描述中国古代各种计时制度,并通过层次分类的方法进行组织。陈家梦将汉代时制分为时刻、时辰、时分三类,宋镇豪进一步指出古代的时制可分为漏刻之制、时辰之制和分段计时之制,另有专用于夜间的更点制。本研究参照这些总结,并结合具体应用及本体设计的角度,将中国古代时制分为五大类型,各大类及其包含的子类如表1所示。其中,漏刻制以漏刻刻数计时,“时辰”与天文、方位相应,“时分”以自然现象或人类活动等为计时依据;另将十二时辰与漏刻相配合形成的辰刻制单独划类,再将专用于夜间计时的五夜(鼓)制和更点制归为一类。每个时制子类有一个或多个时制实例,分别针对不同的应用场合。每个时制子类关联着指定的计时表示元素,详见2.2节。
(2)计时表示:主要包含单形元素(SingleElement)、复形元素(ComplexElement)和表达式(Expression)三类计时表示元素。每个元素可关联一个时间参照系,关联一个或多个时制类和转换类,详见2.2节。
(3)时间参照系:用于描述时间域中的值所处的时间位置,本文的时间参照系包括《ISO19108 Geographic information—Temporal schema》(《ISO 19108地理信息—时间模式》)标准定义的日历、时间坐标、顺序时间三种,以及针对中国古代计时特点而扩展出的循环参照系、模糊坐标参照系。ISO19108标准定义的时间参照系主要表达的是时间的线性结构,用于公历、当地时间和协调世界时(Coordinated Universal Time,CUT)之间进行信息交换。而不同的应用需要不同的时间参照系,如COX基于ISO19108的时间参考模型构建分层参照系对地质年代进行建模。
时间的连续性不仅表现为线性,也表现出循环性,时间的循环性也被广泛反映在各种时间数据可视化中。在人类早期的文化生活中,常见的循环时间观点似乎成为与它密切关联的自然以及自然节奏的一种反映,中国古人对时间“周而复始”的认知即体现出这样的观点。例如中国古代纪时中最常用的“六十甲子”,由十天干和十二地支配对组成60对干支,这些干支组合用于纪日时,每日用一对干支表示,60天一个周期,循环往复;干支纪日在中国连续使用了2600多年,是一种重要的纪时方法。另外,《中国古代纪时考》在分析古代时制的计时元素关系时,也主要以循环图的形式呈现。由此可见,时间的循环性在中国古代是一种重要的对于时间的认知。但是日历、时间坐标、顺序时间和分层参照系的设计思路都没有关注到时间的循环性,无法描述这类纪时方法的特点。所以,本研究提供循环参照系来描述时间循环性,但考虑到循环关系中的各元素并不存在绝对的前后顺序,所以通过设置起点及循环方向、循环次数来实现元素间相对的前后位置关系。
另外,针对某些情况下古代计时的模糊性,如使用漏刻制和更点制的计时需要通过年、月、日来确定昏旦时刻,但又无法在计时文本上下文中获悉具体的年、月、日,因而不能直接在已有的坐标参照系中进行准确定位,本研究另设有模糊坐标参照系,将原本需要准确定义的数值类时间参照点用文本值代替,详见后文。
(4)附加:主要用于描述注释相关类的属性及关系的来源依据,做到有迹可寻,包括Annotation类、Citation类和CitationContext类。Annotation类是依据参考来源对指定的资源所作的注释,资源可以是本体中的各类实例,参考来源则以Citation类来描述。Citation类参考《ISO19115.3-2018 Geographic information-Metadata Part 3》标准中的引用和负责单位信息模型设计,用于描述引用文献的名称、日期、负责人、表达形式等基本信息。而CitationContext类用于描述所引用的内容,如引用文本。Annotation类、Citation类和CitationContext类三者的关系如图2所示。Annotation类包含两层的引用类实例,ci属性关联的是被注释对象所依据的直接来源,cci属性则是该直接来源中所引证的来源。如图3的注释实例ant1,其属性ci代表该实例所依据的直接来源(华同旭《中国漏刻》),cci代表ci来源中所引用的来源(汉代巨野铜漏文物),即解释为“lktrsfA设置为汉代浮箭漏的依据来自华同旭《中国漏刻》著作中对汉代巨野铜漏文物的考证”。
(5)转换:主要实现不同时制的时间之间的转换,如古代时制中的计时元素与现代hms制的时间值转换。针对不同的时制有不同的转换方法,详见2.3节。
图3为计时本体对古籍中时间文本作标注的示例,以计时元素为中心关联各个模块中的类。计时元素lkeA的原始文本出自中华书局1962年版《汉书》点校本卷六十三“夜漏未尽一刻,以火发书”句(见第2764页),该实例属于百刻制的计时元素。百刻制是漏刻制的一种,分为昼漏和夜漏。昼漏、夜漏所占的刻数随季节而变,两者的分界点要经过具体测定,不同时代的历法记载有不同节气时昼漏、夜漏及日出、日入的时刻。图中lkeA是漏刻元素类的一个实例,要全面解读它在所属语境中的语义,需要从它的表示、转换及所属的时制、参照系等多方面进行理解。实现漏刻制与现代hms制的转换,除了需要知道这两种计时制中单位的等价关系,还需要知道漏刻制中日出、日入的时刻所对应的现代hms时间。由于实例lkeA所出之原文本没有记录相关日期,而无法从对应历法中推知昼刻起点的具体时间,所以本例使用的是模糊参照系,即以“日出前”文本来表示起点。实例lkeA有三个相关联的实例,分别是参照系实例lktrsfA、时制实例bkzA和转换实例lk2hmsA。这三个相关实例都有对应的注释实例作为来源依据。ant1的文献对汉代所用的漏刻工具及文本表示进行了考证,明确漏刻仪器为浮箭漏;漏刻计时表示“夜漏未尽”是以日出作为参照点,“夜漏未尽X刻”类似于现代人们常说的“天亮前两小时”表达。ant2的文献则指出汉时所行的百刻制是将一日划分为100刻,由此可知1刻等于现代hms制中的14.4分。ant3文献提供了转换方法,并指出跨两日的夜漏表示“夜漏未尽”是相对于日出而言,所指为第二日,这也间接支持了ant1的文献的观点;同时指出,日出距夜漏尽昼漏起的时间点尚有二刻半的差距,故“夜漏未尽X刻”距日出的时间应为(x+2.5)刻。由lkeA实例与bkzA、lktrsfA和lk2hmsA提供的属性值及其关系,通过语义网规则语言(Semantic Web Rule Language,SWRL)规则(见图3)可推出“夜漏未尽一刻”相当于现代hms制的时间为“日出前50.4分”。对此文本也存在其他解释,如将“夜漏未尽”的参照点设置在日入点上,从而认为“夜漏未尽一刻”指的是“初夜”,而本研究是以天文学者提供的有关漏刻计时的多方面资料来解释该文本,并提供参考来源作为证据支撑。
图3 “夜漏未尽一刻”计时元素实例
注:矩形代表实例;圆形代表类,类名下方的括号内为中译;“→”表示实例间的连接。为简化图示,省略部分实例名,只显示本案例的重点属性值,如ant1的对象属性ci值是实例a,实例a的对象属性crp值是实例b,实例b的对象属性individual关联的实例c的数据属性name值是“华同旭”,省略掉实例a、实例b和实例c的名称,以“→”表示连接,即“ci→crp→individual.name:华同旭”。
2.2 计时表示元素
计时表示元素是计时本体的核心,是时制类在计时应用上的具体体现,也是计时应用过程中的主要操作对象。计时表示元素的类图结构如图1所示。本研究设计单形元素、复形元素和表达式三类计时表示元素,以满足各类时制及其运用的表示。其中,单形元素作为最小的计时表示元素,不可再分,如时辰元素、漏刻元素、时分元素、更元素、点元素等;大部分计时表示元素可对应至一种时制,如时辰元素对应十二时辰制、漏刻元素对应漏刻制等。复形元素则由多个单形元素聚合而成,如辰刻元素由时辰元素与漏刻元素构成,更点元素由更元素与点元素构成。表达式可由单形元素和复形元素聚合而成。表达式和复形元素都是聚合类,但复形元素的成员元素间的关系较为紧密,一般可聚合表示一种时制,如辰刻元素表示辰刻制;而表达式的聚合主要是为各类计时应用而设计,元素成员间关系相对比较灵活,还可扩展至日期(年月日)的组合,如在天象记录中的表示“元嘉十一年七月十六日望四更二唱丑初”。
具体来讲,计时表示元素间的关系可分为以下三类。
(1)对应关系:当不同时制中的两个元素具有相同的时长或等价的名称时,两者可建立对应关系。如十二辰制的时辰元素实例“子”与十二时制的“夜半”。
(2)层次关系:多个不同元素实例集合之间具有层次关系,常常表现在不同时制实例的一系列元素之间存在一对一、一对二或一对多的关系。简单的层次关系,如“子”至“亥”的12个时辰元素实例与“子初”至“亥正”的24个时辰元素实例,表现出一对二的关系。复杂的层次关系可通过多层递归来表示,如ZHANG本体模型所表示的时辰、时分、现代hms制的三层结构。
(3)位置关系:主要用于表达在某一时间参照系中一系列元素间的关系。同一时制内的不同元素,如同 OWL-Time本体中表示时间位置的TemporalPosition类一样,需要放到一个参考坐标中才能知道它们之间的关系,OWL-Time本体可通过指定时间位置对象的TRS(TimeReferenceSystem)属性来关联所需的时间参照系。
2.3 古代时制与现代hms制之间的转换
古代时制与现代hms制之间的转换可分为直接映射、单位转换及语境转换三种类型。
(1)直接映射:指古代计时元素能够与现代计时元素形成一对一的直接对应关系,它们之间的转换只需通过添加对应关系便可实现,如时辰制中的“子时”元素对应于现代hms制的“23时”和“0时”。
(2)单位转换:指古代元素单位与现代hms制单位之间存在数值倍数关系,可通过设置转换关系中的转换乘数来实现换算。如漏刻制中“夜漏二十刻”转换为现代hms制时,是利用“刻 ”单位与“分”单位的转换乘数来实现换算。
(3)语境转换:指转换过程中需要结合计时表达式所处的语境(地点、季节)才能准确进行换算。以下以更点制为例进行说明。
更点制是以日入、日出为基准的计时制,其中,日入后到日出前——包括昏(蒙影)、扣除“晓”(蒙影)的这段时间为“夜”, 将其分为五等份,每份为一“更次”;又将每个更次的时间分为五等份, 每份为一“筹(点)”。前述ZHANG的时间本体对夜间五更的建模,是将五更与十二时辰中的5个时辰固定搭配,进而对应至现代hms制的时间段。但更点制依据的是“夜”的时刻划分,而“夜”的长短会随着季节而变化,可知每更点的时刻并不是固定的,故ZHANG提出的方法只是一种粗略的转换方法,不能满足需要更精确换算时间的场合。陈久金使用历法中的昏旦表来进行更点制与现代hms时制的换算(方法1),王立兴和张培瑜则基于地理纬度进行换算(方法2),这两种方法较于ZHANG的方法要更加精确。鉴于此,本研究采用本体技术实现这两种方法,作为中国历史计时本体中更点制与现代hms制的换算方法。
方法1根据历法记载的昏旦时刻来制作三种历法(景初历、元嘉历、戊寅历)的更点时刻表,以及根据皇祐漏刻制度制作皇祐更点时刻表。表内有公历日期、节气、夜漏刻(或夜漏半)、昏、旦、每更时刻、每点时刻七列内容,其中的时刻均以现代时制的时分表示。在进行具体换算时,先根据所涉朝代所运行的历法选择对应的更时刻表,其次根据日期范围选择指定的行,获得昏时及每更、每点对应的现代hms的时分,最后推算出最终结果。
方法2根据各朝代都城的地理纬度和现行的《天文年历》编制了“日出钟点列线图”和不同类型的“更点图”(“常规更点图”“宋代内中更点图”“清代更点图”),使用者可以通过日出钟点(横坐标)和具体更点(列线表示)直观地获得具体更点对应的现代时刻(纵坐标)。
方法1和方法2虽然流程不完全相同,但都直接或间接地体现了具体时空(不同季节、不同纬度)对时间换算的影响,并且都以获得所涉朝代和对应公历年月日的信息作为查询的前提条件。本质上,这两种方法是把换算过程变成了查表或查图的过程,但有些步骤对于计算机程序执行而言显得多余,本研究在使用计算机实现这两种算法时进行了精简及优化,主要有以下方面。
(1)精简参数及流程。例如,方法1的更点时刻表中的“昼漏”“更点时刻”列之下的现代“时”“分”小列只用合计后的“分”表示;将方法2的更点图转换为表格形式,取消查图流程。
(2)内置外部数据。如各朝代都城的地理纬度、现代《天文年历》的日出日入表等均集成至本体库中。
(3)补充资料。根据《中国古代的漏箭制度》中《东汉四分历》《大衍历》的“定气白昼漏刻长度表”制作其各自的更点时刻表。
图4以中华书局1989年版《四部备要》第40册《通鉴目录》卷十三的月食记录(见第116页)为示例。可看出,根据不同学者的研究成果实现的换算方法,在对同一个文本中的时间进行解释时,其结果并不完全相同,基于方法1和基于方法2换算出的月食时间的分别是22:09和22:15。
本研究使用SHACL(Shapes Constraint Language,结构性约束语言)高级功能的SHACL函数来实现方法1的换算功能,自定义SHACL函数GengDian2HMS的部分SPARQL代码如下:
SELECT ((?huh*60+?hum+(?arg3-1)*?gf+(?arg4*?df)) as ?hmsm)
? gdskchto:hasJieQi ? jq.
? jqchto:hasDianFen ? dianfen.
? jqchto:hasGengFen ? gengfen.
? jqchto:hasHunShiKe ? hunshike.
? hunshiketime:hour ? huh.
? hunshiketime:minute ? hum.
? gengfentime:minutes ? gf.
? dianfentime:minutes ? df.
FILTER (REGEX(? ilf,? arg1) && REGEX(? ijq,? arg2))
其中,“? arg1”代表更点时刻表对应的历法名称,可由“朝代”与“公历年月日”求得(不能仅用朝代来求对应历法名称,因为一个朝代可能使用过几种历法。如图4中的南朝宋“元嘉十四年”,当时所行用的历法是《景初历》,而不是元嘉二十二年才行用的《元嘉历》);“? arg2”代表节气名,由公历日期求出(该功能在自建的中西历本体库实现);“? arg3”代表“更”数;“? arg4”代表“点”数。返回的结果——“? hmsm”是以现代hms制的“分”为单位的数值。
方法2本质上是在常规更点的基础上,将各个日出时刻的更点值转换为现代hms时间,然后再以列图形式表示,便于学者按图查找。但对于计算机而言,这样的图形查找反而增加了求解步骤,本研究将方法2提供的常规更点图中的25个更点时刻及45个日出钟点对应的现代hms时间转换成本体实例后,即实现了直接使用SPARQL进行查询。
当前,Web架构的古籍数据库已经成为主流。本研究通过编写谷歌浏览器插件,实现了在此类古籍数据库平台上对古代计时文本进行语义标注。该插件首先解析原文中的计时关键词,通过调用服务器端的RESTfull接口,从本体库中获取该关键词的语义信息(所属时制、不同时制中的时间换算、文献依据等),并将返回的语义信息以“嵌入”或“浮动”方式呈现在原始文本中。该插件应用在中国社会科学网的“中国经典库”的具体示例参见图5,并且仍以图3所举文本为例。该插件也适用于基于Web架构的各个古籍数据库,如“中国基本古籍库”“雕龙中日古籍全文资料库”等。
图5 古代计时标注插件v1.0应用示例
注:矩形代表实例;圆形代表类,类名下方的括号内为中译;“→”表示实例间的连接。为简化图示,省略部分实例名,只显示本案例
中国古代时制系统的多样性与动态性使得构建细粒度的中国历史计时本体面临一定挑战。本研究尝试回归历史语境,融合多样化的计时表达方式,从动态性着手构建中国历史计时本体:设计出时制、计时表示、时间参照系、附加和转换五个顶层包;将时制类别梳理为漏刻、时辰、时分、夜间计时和辰刻制五大类;区分单形元素、复形元素和表达式三类计时表示元素,划分出对应、层次和位置三类计时表示元素间的关系;设定日历、时间坐标、顺序时间、循环与模糊坐标五类参照系;构建了古代时制与现代hms制的直接映射、单位转换及语境转换三类关系。在应用层面,通过编写谷歌浏览器插件,实现了Web构架的古籍数据库平台中古代计时文本的语义标注。笔者此后将从以下两个方面进一步推进研究。
(1)词汇整理。从语言学角度来看,古籍文本中存在大量与计时有关的词和短语,这些计时词语被广泛应用,且大多具有模糊性。整理这方面的词汇,将其纳入计时本体,可以进一步丰富计算机对古代时间的识别。
(2)拓展应用。在更大量的古籍文本(如《资治通鉴》、二十五史等)中应用本文所设计的计时本体,提供日内时间本体标注,并关联至相关人物、事件,实现计时与人物、事件的关联统计与分析,进一步丰富知识图谱的构建。
《数字人文研究》2021年第2期目录及摘要