RDF N-Triples的规范规定必须对字符串文字进行编码。
https://www.w3.org/TR/n-triples/#grammar-production-STRING_LITERAL_QUOTE
这是"编码"有一个名字我可以在我的编程语言中使用它吗?如果没有,那在实践中意味着什么?
答案 0 :(得分:4)
您需要的语法作品正好在您链接到的文档中:
[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"'\]
这意味着字符串文字的开头和结尾都是双引号(")。在双引号内,您可以:
答案 1 :(得分:1)
除了乔希的回答。将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用于组合。有关这些的更多信息,请参阅UAX#15:Unicode规范化表单的介绍。将字符串S转换为NFC形式的功能可以缩写为NFC(S),而测试S是否在NFC中的功能缩写为isNFC(S)。
答案 2 :(得分:1)
您可以使用Literal#n3()
例如
# pip install rdflib
>>> from rdflib import Literal
>>> lit = Literal('This "Literal" needs escaping!')
>>> s = lit.n3()
>>> print(s)
"This \"Literal\" needs escaping!"