如何编码RDF N-Triples字符串文字



rdf n-triples的规范指出必须编码字符串文字。

https://www.w3.org/tr/n-triples/#grammar-production-string_literal_quote

这个"编码"是否有一个可以在编程语言中使用的名称?如果不是,那么在实践中意味着什么?

您需要的语法作品在您链接到的文档中正确:

[9] STRING_LITERAL_QUOTE    ::= '"' ([^#x22#x5C#xA#xD] | ECHAR | UCHAR)* '"'
[141s]  BLANK_NODE_LABEL    ::= '_:' (PN_CHARS_U | [0-9]) ((PN_CHARS | '.')* PN_CHARS)?
[10]    UCHAR   ::= 'u' HEX HEX HEX HEX | 'U' HEX HEX HEX HEX HEX HEX HEX HEX
[153s]  ECHAR   ::= '' [tbnrf"']

这意味着字符串字面的开始并以双引号(")。在双引号内部,您可以拥有:

  • 任何字符除外:#x22,#x5c,#xa,#xd。副手,我不知道每个是什么,但是我认为它们是逃逸中涵盖的太空字符;
  • 一个用 u代表的Unicode字符,然后是四个十六进制数字,或一个 u,然后是八个十六进制数字;或
  • 一个逃生角色,其次是t,b,n,r,f,'和的任何一个代表各种字符的t,b,n,r,f,'和。

您可以使用文字#n3()

,例如

# pip install rdflib
>>> from rdflib import Literal
>>> lit = Literal('This "Literal" needs escaping!')
>>> s = lit.n3()
>>> print(s)
"This "Literal" needs escaping!"

除了乔什的答案。将Unicode数据标准化为NFC几乎总是一个好主意,例如。在Java中,您可以使用以下例程

java.text.Normalizer.normalize("rdf literal", Normalizer.Form.NFKC);

有关更多信息,请参见:http://www.macchiato.com/unicode/nfc-faq

什么是NFC?

由于各种原因,Unicode有时具有同一特征的多个表示。例如,以下每个序列(前两个是单字符序列)代表相同的字符:

U+00C5 ( Å ) LATIN CAPITAL LETTER A WITH RING ABOVE
U+212B ( Å ) ANGSTROM SIGN
U+0041 ( A ) LATIN CAPITAL LETTER A + U+030A ( ̊ ) COMBINING RING ABOVE

这些序列在规范上等效。这些形式中的第一种称为NFC-对于C归一化c,其中c用于堆肥。有关这些信息的更多信息,请参见UAX#15的引入:Unicode归一化形式。将字符串s转换为NFC形式的功能可以缩写为Tonfc(S),而测试S中是否在NFC中的函数缩写为ISNFC(S)。

相关内容

  • 没有找到相关文章

最新更新