创新元数据的设计、实施和最佳实践

DCMI DCSV

标题:

DCMI DCSV:用于在文本字符串中写入一列已标记值的语法

创造者:
创造者:
发行日期:
2000-07-11
标识符:
替换:
取而代之的是:
最新版本:
文档的状态:
这是一个DCMI建议
描述文档: 我们描述了一种在文本字符串中记录已标记值列表的方法,称为Dublin Core™Structured values,标签为DCSV。这种表示法用于标记语言(如HTML和XML)中属性值中的结构化信息。在基于合格的Dublin Core模型的元数据系统中记录复杂的元素值时,这可能很有用。
实现者通知:
本文档中包含的语法示例是临时的,目前正在作为DCMI为HTML、XML和RDF推荐协调语法建议工作的一部分进行审查。这些建议和对本文件的微小编辑修改可望在不久的将来进行。

表的内容

  • 简介
  • 结构化值——DCSV方案
  • 解析DCSV
  • 例子
  • 解析DCSV编码值的示例代码
  • 致谢
  • 参考文献

简介

非常希望能够编码或连载纯文本字符串中的结构化值。一些泛型方法是常用的。从自然语言继承约定,逗号(,)和分号(;)经常被用作列表分隔符。类似地,逗号分隔值(CSV)和制表符分隔值(TSV)是来自电子表格和数据库软件的常见导出格式换行分隔行或元组。点(.)和破折号(-)有时被用来暗示层次结构,特别是在同义词库应用程序中。可扩展标记语言[XML]提供了一种通用的解决方案,使用包含在尖括号(<,>)中的标记来表示结构。

许多命名编码方案在文本字符串中使用标点字符来指示特定的组件。例如,冒号(:)终止协议标签,斜杠(/)、问号(?)、与字符(&)和散列(#)用于分隔标识符中编码为URI的[URI]的其他字段。根据vCard [vCard]的常见实现,在一个字段中,用冒号(:)分隔指定的标签和值,用分号(;)分隔个人描述中的字段。根据ISO8601 [W3C- dtf]的W3C配置文件,连字符用于分隔日期中的字段。对于某些方案(例如vCard和W3C-DTF),标点符号表示值的一种非常正式的结构,并有望被自动解析。

元素属性在标记语言中,例如HTML [HTML4]和XML [XML],为记录数据提供了一个位置。对于一些“空”元素—例如<IMG>和<HTML中的>元素——属性是保存数据的惟一位置。在其他情况下,可能有很好的理由将数据存储在元素属性而不是元素内容中。例如,XML片段可以包含在<一个HTML文档的>,并且会被大多数客户端软件(如浏览器)安全地忽略。前提是元素没有内容.这种语法技巧可以用来将XML-RDF编码的数据安全地嵌入到当前版本的HTML中。

HTML的未来版本有望通过允许包含一般的XML文档来克服这些限制[XHTML]。然而,人们对使用HTML <有浓厚的兴趣。>元素以比通常纯文本字符串隐含的更多的结构记录数据,特别是根据合格的Dublin Core™模型[Q-DC-HTML]记录元数据。

但是,使用元素属性存储数据有一些技术限制:

  1. 属性只能出现一次
  2. 值被限制为一组类型,在某些上下文中限制了允许的字符串[HTML4]。使用XML的尖括号分隔符(<,>)和各种其他标点字符只在某些情况下有效(例如,当内容类型为CDATA时),并且通常只使用转义机制可靠(例如字符实体).通常,包含这些字符的字符串很容易被一些用户代理(例如浏览器)误解。

注意,没有内在的方法来指示HTML元素属性值中的结构。

我们在这一建议中的意图是为内容类型CDATA的HTML属性值定义一种紧凑的人类可读的数据结构方法,避免某些标点字符,这些字符在某些编码环境中容易造成困难。通常情况下,只有在没有其他合适的方案时才应该使用这种表示法。它基于在其他地方使用并发现成功的方法,但比之前的标准更一般化。它可以用作概要文件的基础,设计用来编码特定的数据类型[概要文件]。

结构化值——DCSV方案

允许通用的录音结构化的值,我们推出Dublin Core™结构化价值(DCSV)计划。

我们区分两种类型的子字符串标签而且,其中标签是值类型的名称,值是数据本身。此外,我们允许将一个完整值分解为集合组件,每一种都有自己的标签和价值。以这种方式组成的值称为结构化的价值

标点符号用于记录结构化值,如下所示:

  • 冒号(:)将结构化值组件的纯文本标签与值本身分开
  • 分号(;)分隔列表中的(可选标记)值组件
  • 如果需要,点(.)表示标签中的层次结构。

标签和组件值本身都由一个文本字符串组成。这样做的目的是,标签将是一个单词或代码,与值组件的名称相对应。标签可能不存在,在这种情况下,由分号(;)分隔的整个子字符串或字符串的结尾包含一个组件值。

下面的模式展示了如何使用DCSV将结构化值记录在字符串中:

“u1;u2乐队;u3”
“cA: v1”
“cA: v1;cB.part1: v2;cB.part2: v3”
“cA: v1;u2乐队;u3”,其中u1、u2、u3为未标记组件,cA、cB为结构化值组件的标签,part1、part2为子组件,v1、v2、v3为组件的值。

在DCSV编码值中使用特定的标点字符意味着,如果这些字符要直接在组成组件内容(标签或值)的字符串中使用,则必须小心。因此,对于DCSV,当冒号(:)或分号(;)在值中是必需的,字符使用反斜杠进行转义,出现为:;,反斜杠本身也进行类似的转义\。对于字符串中的点、句号或句点(.)不应该有歧义:当它是标签的一部分时,点表示某种层次结构;当它是值的一部分时,它对上下文具有传统意义。这种转义特殊字符的方法在很大程度上保持了可读性,并且可以在需要时使用文本编辑器轻松输入DCSV编码的元数据值。用于处理DCSV编码值的软件必须进行必要的替换。

注意,在HTML中,如果用单引号(')分隔整个字符串,那么可以在CDATA属性值中直接使用双引号(")字符,但在XML中,双引号必须编码为元素属性中的字符实体。

由于没有显式的分组机制,DCSV只能用于记录列表。DCSV只打算用于相对简单的结构值,可能是一种临时方法,等待更通用的语法支持,比如XML,它允许记录更复杂的层次结构。但是,它比等价的XML更紧凑,而且在一些常见上下文中(比如在HTML中)更容易阅读和构造元素。

解析DCSV

可以使用一种简单的方法来解析根据DCSV方案记录的元数据值。对于使用DCSV方案记录的单个值:

  1. 将文本字符串拆分为任何未转义分号上的子字符串列表(;);
    如果没有分号,则只有一个子字符串
  2. 将每个子字符串拆分为它的(标签,值)在任何未转义的冒号(:);
    如果没有冒号,则标签为空
  3. 在每个值中,将转义字符替换为实际需要的字符。

本建议的末尾包含一个执行此解析操作的简短Perl程序。

例子

“name.given:雷纳托;name.family: Iannella;雇主:DSTC;联系方式:7级,格尔曼实验室,昆士兰大学,Qld. 4072,澳大利亚
行:200;关口:450”

DCSV不支持使用更完整的表示法(如XML)提供的完整结构,但是相对丰富的信息可以存储在DCSV中,然后在适当的时候迁移到完全结构化的表示法中。DCSV模式为HTML中元数据元素的复杂值表示提供了有用的支持,同时与所有常用工具(浏览器、编辑器、元数据采集器)保持完全兼容。以这种方式使用时,“DCSV”或其衍生品之一的名称可以作为的值计划的属性HTML < META >元素,如以下合格的Dublin Core™元数据示例所示:

< META NAME = "。创造者”计划= " DCSV "
内容= " name.given:西蒙;name.family:考克斯;雇主:CSIRO;身高:177厘米”>
< META NAME = "。贡献者" SCHEME="vCard" CONTENT="fn:Eric Miller;org: OCLC”>
< META NAME = " DC.Format。程度”计划= " DCSV”内容= "行:200;关口:450 " >
< META NAME = " DC.Coverage。空间"方案="BOX"内容="名称:西澳;northlimit: -13.5;southlimit: -35.5;westlimit: 112.5;eastlimit: 129 " >
< META NAME = " DC.Coverage。空间"方案="POINT"内容="名称:英国什罗普郡布里奇北;东:372000;北:293000;单位:米;投影:英国国家电网“>
< META NAME = "。日期"方案="期间"内容="名称:珀斯国际艺术节,2000;开始:2000-01-26;结束:2000-02-20;" >

解析DCSV编码值的示例代码

下面的Perl程序读取在stdin上输入的DCSV编码字符串,并打印结构化结果的格式化版本。提供此代码仅用于演示目的,不包含错误检查。

# !/usr/local/bin/perl

打印"Enter string to be parsed:\n";

我的$string = join(", );

打印“\nString要解析的是[$string]\n”;

首转义%字符

$ string = ~ s / % /“%”.unpack (C ',"%")."%"/ 如;

下一步更改\转义字符为%d%,其中d是字符的ascii码

$ = ~ s字符串 /\(.)/"%". 解压缩(' C ', 1美元)。“%”/如;

打印“\ n转义字符串是[$string]\n”;

现在将字符串拆分为多个组件

My @components = split(/;/, $string);

打印“\ nComponents: \ n”;
$component (@components) {
My ($name, $value) = split(/:/, $component, 2);

如果没有:$value为空,那么将$name复制到$value中,并为空$name

如果(! $值){
美元价值= $名称;
$ name = ";

从名称字符串中去掉空白

$ name = ~ s / ^ \ s * (\ s +) \ s * $ / $ 1 /;

将转义字符转换回值字符串

美元价值= ~ s / % (\ d +) % /包(' C ', 1美元)/如;

打印“Name [$ Name] has value [$value]\n”;

致谢

John Kunze鼓励我们把这个提案正式写下来。Kim Covil编写了perl代码。Eric Miller就与XML的重叠问题喋喋不休。

参考文献

DCMI
Dublin Core™元数据计划OCLC,都柏林,俄亥俄州。
//www.voudr.com/

HTML4
Dave Raggett, Arnaud Le Hors, Ian Jacobs, 1999,HTML 4.01规范
http://www.w3.org/TR/html4/

配置文件
DCMI Box -一个地方的空间限制的规范,以及将其编码到文本字符串中的方法
//www.voudr.com/specifications/dublin-core/dcmi-box/2000-07-11/

DCMI点——空间中的点位置,以及将其编码到文本字符串中的方法
//www.voudr.com/specifications/dublin-core/dcmi-point/2000-07-11/
DCMI周期——时间间隔限制的规范,以及将其编码到文本字符串中的方法
//www.voudr.com/specifications/dublin-core/dcmi-period/2000-07-11/
Q-DC-HTML
2000年美国考克斯,在HTML中记录合格的Dublin Core™元数据
//www.voudr.com/specifications/dublin-core/dcq-html/

RDF-in-HTML
这使用了最紧凑的XML-RDF [RDF-syntax]形式,其中所有数据都作为属性值出现。在这种形式中,有几个重要的功能是不可用的,比如多个(重复的)值。例如,参见S.J.D. Cox和K.D. Covil的图5,“使用元数据的基于网络的地质信息系统”第三届IEEE META-DATA会议,http://computer.org/conferen/proceed/meta/1999/papers/7/cox_covil.html
(URI
Berners-Lee, R. Fielding, L Masinter, 1998统一资源标识符(URI):通用语法RFC2396
http://www.ieft.org/rfc/rfc2396.txt

T. Berners-Lee, L. Masinter和M. McCahill, 1994统一资源定位器,RFC1738
http://www.ieft.org/rfc/rfc1738.txt
T. Berners-Lee, 1994《WWW中的通用资源标识符:全球网络中对象名称和地址表达式的统一语法》,RFC1630
http://www.ieft.org/rfc/rfc1630.txt
电子名片
F.道森,T.豪斯,vCard MIME目录配置文件RFC2426
http://www.ieft.org/rfc/rfc1630.txt
W3C-DTF
M. Wolf, C. Wicksteed, 1997,日期和时间格式
http://www.w3.org/TR/NOTE-datetime

XHTML
Steven Pemberton等人,1999 XHTML 1.0:可扩展超文本标记语言
http://www.w3.org/TR/xhtml1/

参见Dave Raggett,超文本标记语言活动语句
http://www.w3.org/MarkUp/Activity.html

XML
可扩展标记语言
http://www.w3.org/XML/