射频识别(RFID)技术

URI 记录类型定义技术规范

译者:陈广 日期:2020-3-6


概览

URI 服务 RTD(记录类型描述)是一个 NFC RTD,它描述一条记录,该记录将与 NFC 数据交换格式(NDEF)一起使用,以检索存储在 NFC 标签中的 URI,或将 URI 从一个 NFC 设备传输到另一个 NFC 设备。

URI(可以是 URN,也可以是 URL)还提供了在其他 NFC 元素内存储 URI 的方法,如智能海报(请参考智能海报 RTD 获取更多信息)。

目标

RTD 通过 NDEF 记录映射定义 NDEF 的使用。

目标

任务说明和目标

URI RTD 的目的是提供一个“原语”,以紧凑的方式包含 RFC 3986 定义的 URI。

本节剩余略

URI 服务

本文档定义了数据模型的 URI 服务,描述了简单智能海报应用的应用场景,NFC 设备或标签上的 URI 定位的结构,以及提供了示例。

URI 记录类型还要用作其它 RTD 的一部分,在这种情况下,它不意味着特定的操作。这方面的一个典型例子可能是开发人员希望构建包含多个 URL 的自己的记录类型的情况。在这种情况下,不可能自动判断每个 URL 的含义,所以它被留给应用程序来处理开发人员自己的类型。

设备不需要实现任意特定 URI 协议。

NDEF 消息序列

无特定消息序列。

依赖项

智能海报 RTD[SMARTPOSTER]以被认为是 URI RTD 的扩展版本。它使用辅助记录向 URI 添加元数据。

NDEF 结构

消息传递序列

无任何的消息传递序列。

记录映射

URI 记录类型

URI 记录的知名类型是“U”(NDEF 二进制表示为 0x55)。URI 记录的结构如下所示。

表 2:URI 记录内容

名称 偏移 尺寸 描述
标识码 0 1 字节 URI 标识码 URI 标识码,在表 3 中指定
URI 字段 1 N UTF-8 字符串 部分或整个 URI(如果标识码为 0x00)

URI 标识码

为了缩短 URI,记录数据的第一个字节描述了 URI 的协议字段。下表必须用于对 URI 进行编码和解码,尽管应用程序可以使用 0x00 值来表示编码时没有前缀,而不管是否实际上有合适的缩写代码。

有关不同协议的解释,请参阅协议文档本身。 不需要 NFC 设备来支持任何特定的协议。

表3:缩写表

十进制 十六进制 协议
0 0x00 N/A。没有预先准备,URI 字段包含未删节的 URI。
1 0X01 http://www.
2 0x02 https://www.
3 0x03 http://
4 0x04 https://
5 0x05 tel:
6 0x06 mailto:
7 0x07 ftp://anonymous:anonymous@
8 0x08 ftp://ftp.
9 0x09 ftps://
10 0x0A sftp://
11 0x0B smb://
12 0x0C nfs://
13 0x0D ftp://
14 0x0E dav://
15 0x0F news:
16 0x10 telnet://
17 0x11 imap:
18 0x12 rtsp://
19 0x13 urn:
20 0x14 pop:
21 0x15 sip:
22 0x16 sips:
23 0x17 tftp:
24 0x18 btspp://
25 0x19 btl2cap://
26 0x1A btgoep://
27 0x1B tcpobex://
28 0x1C irdaobex://
29 0x1D file://
30 0x1E urn:epc:id:
31 0x1F urn:epc:tag:
32 0x20 urn:epc:pat:
33 0x21 urn:epc: raw:
34 0x22 urn:epc:
35 0x23 urn:nfc:
36..255 0x24..0xFF RFU

例如:如果此字段的值是 0x02,并且 URI 字段的内容读为 “nfc-forum.org”,则 URI 结果为 “https://www.nfc-forum.org”。

如果此字段的值为零(0x00),则不应进行预处理。

所有被标记为 RFU 的字段应当被当成零值处理(无预处理)。兼容的系统不能产生标记为 RFU 的值。

URI 字段

该字段根据 RFC 3987[RFC 3987] 提供 URI (因此它实际上是一个 IRI,或国际化的资源标识符,但由于遗留原因,我们使用了 URI 这个词)。正如前面所解释的,这个 IRI 可以是 URL 或 URN。使用的编码必须是UTF-8,除非 URI 方案指定了一些特定的编码。

IRI 的长度可以通过载荷长度进行计算,将协议缩写代码的字节减 1。以长度以字节为单位,不是字符(因为 UTF-8 字符可能会超过一个字节)。

URI 只在 7-bit US-ASCII 空间中定义。因此,兼容程序应该通过将 127 以上的代码点更改为适当的编码,以将 UTF-8 IRI 字符串转换为 7 位 US-ASCII 字符串。此编码已在 RFC 3987 [RFC 3987] 和 IDN [RFC 3492] 文档中定义。对于不同的架构,其编码也不同。

例如,如果 URI(URI 类型字段经预处理之后)包含以下字符串:“http://www.hääyö.com/”,在对它进行操作之前,根据 IDN[RFC 3492] 规则,它会被转换为 “http://www.xn--hy-viaa5g.com”。大多数现代应用程序已经支持这种新的国际化资源标识符(IRI)方案。建议实现包括对 IRI 的支持,以人类可读的形式显示 URI。

澄清:是的,URI 可以包含 UTF-8 字符。但是,Internet 无法处理它们,因引,URI 在使用前需要进行转换。对于大多数设备而言,此转换由应用程序处理。

URI 中任意在 0 至 31(包括)之间的字符值应当被报告为错误,URI 记录应当丢弃它们。所有无效的 UTF-8 序列应当被当成错误,整个 URI 记录都应当被丢弃。

处理指南

URI RTD 没有定义任何设备需要执行的任意指定操作,它们留给实施。

请参考智能海报 RTD[SMARTPOSTER]获取如何在你的应用程序中使用 URI RTD 的示例。

附录 A:示例

这些示例在 URI RTD 中省略了MBME标志,并假设为短记录格式。参考 NDEF 规范[NDEF]获取更多信息。

无替换的简单 URL

使用 NDEF 协议将 http://www.nfc.com 放入 URL,添加以下字节序列。总长度:12 字节。

表 4:无替换的简单 URL

偏移 内容 解释
0 0xD1 SR = 1,TNF = 0x01(NFC 论坛知名类型),ME = 1,MB = 1
1 0X01 记录类型的长度(1 字节)
2 0x08 载荷长度(8 字节)
3 0x55 URI 记录类型(“U”)
4 0x01 URI 标识符(“http://www.”)
5 0x6e 0x66 0x63 0x2e 0x63 0x6f 0x6d UTF-8 格式字符串“nfc.com”

存储电话号码

要存储一个电话号码(例如,用手机拔打这个号码),使用以下字节序列。号码为‘+385-9-1234567’。总长度为 17 字节。

表 5:存储电话号码

偏移 内容 解释
0 0xD1 SR = 1,TNF = 0x01(NFC 论坛知名类型),ME = 1,MB = 1
1 0X01 记录类型的长度(1 字节)
2 0x0D 载荷长度(13 字节)
3 0x55 记录名称(“U”)
4 0x05 “tel:”的缩写
5 0x2b 0x33 0x35 0x38 0x39 0x31 0x32 0x33 0x34 0x35 0x36 0x37 UTF-8 格式字符串“+35891234567”

在标签上存储专有 URI

你可以使用以下字节序列存储专有 URI。本例 URI 为:“mms://example.com/download.wmv”。总长度为 35 字节。

表 6:在标签上存储专有 URI

偏移 内容 解释
0 0xD1 SR = 1,TNF = 0x01(NFC 论坛知名类型),ME = 1,MB = 1
1 0X01 记录类型的长度(1 字节)
2 0x1F 载荷长度(31 字节)
3 0x55 记录名称(“U”)
4 0x00 无缩写
5 0x6d 0x6d 0x73 0x3a 0x2f 0x2f 0x65 0x78 0x61 0x6d 0x70 0x6c 0x65 0x2e 0x63 0x6f 0x6d 0x2f 0x64 0x6f 0x77 0x6e 0x6c 0x6f 0x61 0x64 0x2e 0x77 0x6d 0x76 字符串“mms://example.com/download.wmv”
;

© 2018 - IOT小分队文章发布系统 v0.3