String 如何对RDFn-Triples字符串文本进行编码?

String 如何对RDFn-Triples字符串文本进行编码?,string,encoding,rdf,literals,n-triples,String,Encoding,Rdf,Literals,N Triples,的规范规定必须对字符串文字进行编码 这个“编码”是否有一个名称,我可以在我的编程语言中使用它?如果没有,在实践中它意味着什么?您需要的语法产品就在您链接到的文档中: [9] STRING_LITERAL_QUOTE ::= '"' ([^#x22#x5C#xA#xD] | ECHAR | UCHAR)* '"' [141s] BLANK_NODE_LABEL ::= '_:' (PN_CHARS_U | [0-9]) ((PN_CHARS | '.')* PN_CHARS)? [

的规范规定必须对字符串文字进行编码


这个“编码”是否有一个名称,我可以在我的编程语言中使用它?如果没有,在实践中它意味着什么?

您需要的语法产品就在您链接到的文档中:

[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之外的任何字符。我不知道它们是什么,但我假设它们是转义符中包含的空格字符
  • 一个unicode字符,表示为\u后跟四个十六进制数字,或\u后跟八个十六进制数字;或
  • 转义字符,后跟表示各种字符的t、b、n、r、f、“、”和\

  • 除了Josh的回答之外。将unicode数据规范化为NFC几乎总是一个好主意,例如,在Java中,您可以使用以下例程

    java.text.Normalizer.normalize("rdf literal", Normalizer.Form.NFKC);
    
    有关更多信息,请参阅:

    什么是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形式的函数可以缩写为toNFC(S),而测试S是否在NFC中的函数可以缩写为isNFC(S)

    你可以用

    e、 g

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