RDF N-Triples规范规定必须对字符串文字进行编码。
https://www.w3.org/TR/n-triples/#grammar-production-STRING_LITERAL_QUOTE
这种“编码”是否有一个我可以查找以在我的编程语言中使用它的名称?如果不是,这在实践中意味着什么?
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"'\]
这意味着字符串文字以双引号 (") 开头和结尾。在双引号内,您可以:
你可以使用Literal#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 用于合成。有关这些的更多信息,请参阅 UAX #15: Unicode Normalization Forms 的介绍。将字符串 S 转换为 NFC 形式的函数可以缩写为 toNFC(S),而测试 S 是否在 NFC 中的函数缩写为 isNFC(S)。