如何将 MIME 类型用于 RDF 类型文字

问题描述 投票:0回答:1

RDF 允许使用 typed literals 来指定字符串值的数据类型。这通常用于 XML Schema 数据类型,例如

xsd:integer
xsd:date
,例如

<https://example.org/> dc:created "1999-12-17"^^xsd:date.

RDF 中的类型文字如何用于指定由(或扩展)IANA MIME 类型注册表定义的数据类型?我想做这样的事情:

<https://example.org/>
  dc:description "I love cookies!" ;
  dc:description "I <em>love</em> cookies!"^^<text/html> ;
  dc:description "I *love* cookies!"^^<text/x-markdown> ;
  dc:description "I \\emph{love} cookies!"^^<application/x-tex> .

但是普通 MIME 类型不是有效的数据类型 IRI。是否存在用于 MIME 类型的官方 URI 名称空间并且此类 URI 是否已用于 RDF 类型文字?

rdf mime-types
1个回答
1
投票

没有正式的方法将 MIME 类型用作 RDF(或 XML 模式)数据类型,因为这样的事情意味着什么是模棱两可的——MIME 类型描述了一个 bytes 序列,而 RDF 文字总是一个 Unicode 字符序列.您必须定义一个方法,将词法值转换为字节序列然后进行解释,对于非文本格式,您可能必须从

xsd:base64Binary
xsd:hexBinary
开始。除此之外,你的一些例子只是片段,而不是文档本身有效,所以让我们先看看其他选项:

非 MIME 数据类型

我建议首先为您要支持的格式寻找具体的标识符,但即使那样您也可能有多种选择:

  • rdf:XMLLiteral
    rdf:HTML
    rdf:JSON
    是官方的,应该用于这些语言中的有效文字。
  • 额外类型! 是格式和片段的现有词汇表。对于您的示例,您可以轻松使用
    xtypes:Fragment-HTML
    xtypes:Fragment-Markdown
    xtypes:Fragment-LaTeX
    。可能有点模棱两可的是“片段”在这里的确切含义。我认为这意味着像
    '<tag attr="a">'^^xtypes:Fragment-XML
    这样的东西是有效的,而
    '<tag attr="a">'^^rdf:XMLLiteral
    不是(它必须是独立的,类似于
    application/xml-external-parsed-entity
    )。
  • 所有格式在 DBPedia 中也作为实体存在,因此您可以使用像
    http://dbpedia.org/resource/Markdown
    这样的 URI,但这些没有明确定义为数据类型,因此某些处理器可能很难找到它们的定义。
  • 另一个不错的词汇是来自 W3C 的文件格式的唯一 URIs,但它只包含 RDF 序列化格式,也没有明确地将它们定义为数据类型。
  • 一些数据格式可能有现有的 YAML 标签,它们与 XML Schema 数据类型非常相似,可以使用 URI 表示。然而,除了
    tag:yaml.org,2002:yaml
    的 YAML 之外,我找不到更多的例子。
  • 从用于 SGML 符号的 PUBLIC 标识符派生 URI 的可能性很小。对于 TeX,URI 将是
    urn:publicid:%2B:ISBN+0-201-13448-9;Knuth:NOTATION+The+TeXbook:EN
    ,但这些不再生成(您可以在 here 找到它们的集合)。

我不建议使用除

http(s)
之外的任何其他URI方案,因为至少人类应该能够通过HTTP找出它的含义。

MIME 类型的 URIs

如果你想要 MIME 类型的 URI(但不一定用作数据类型),你可以使用像 uri4uri 这样的东西来获得 MIME 类型的 RDF 描述,例如

https://w3id.org/uri4uri/mime/text/markdown
(但请注意
charset 
Markdown 需要参数,所以应该是
https://w3id.org/uri4uri/mime/text/markdown;charset=utf-8
‒ 也支持参数!)。

您还可以参考 IANA 注册文件,例如 https://www.iana.org/assignments/media-types/text/markdown,但这只是一个文件,并非所有 MIME 类型都有。此 URL 模式也可用于非标准 MIME 类型,例如

https://www.iana.org/assignments/media-types/text/yaml
,但除非正式注册,否则这些将无法解析。

使用语言标签

我可以想到的另一个选择是为此目的(滥用)使用语言标签而不是数据类型,例如

zxx-Latn-x-md
用于 Markdown 或
zxx-Latn-x-tex
用于 TeX。这绝对不是标准化的(除了
zxx
可用于编程源代码,以及
Latn
用于使用拉丁字母表的文本),我不建议将它用于应该解析的文字 – 想想它会影响文本的呈现,例如选择语法荧光笔。

使用
data:
URIs

结合文本和 MIME 类型的唯一标准化方法是使用

data
URI 方案,但您不会得到文字:

<https://example.org/>
  dc:description <data:text/markdown;charset=utf-8,I%20*love*%20cookies!> .

<data:text/markdown;charset=utf-8,I%20*love*%20cookies!>
  a <https://w3id.org/uri4uri/mime/text/markdown;charset=utf-8> ;
  rdf:value "I *love* cookies!" .
© www.soinside.com 2019 - 2024. All rights reserved.