各种 XML 定义的示例

Examples of various XML definitions

在阅读XML spec时,提到了以下定义:

Names and Tokens
[4]     NameStartChar      ::=      ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
[4a]    NameChar           ::=      NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
[5]     Name               ::=      NameStartChar (NameChar)*

Literals
[9]     EntityValue        ::=      '"' ([^%&"] | PEReference | Reference)* '"' |  "'" ([^%&'] | PEReference | Reference)* "'"
[10]    AttValue           ::=      '"' ([^<&"] | Reference)* '"'|  "'" ([^<&'] | Reference)* "'"
[11]    SystemLiteral      ::=      ('"' [^"]* '"') | ("'" [^']* "'")
[12]    PubidLiteral       ::=      '"' PubidChar* '"' | "'" (PubidChar - "'")* "'"
[13]    PubidChar          ::=      #x20 | #xD | #xA | [a-zA-Z0-9] | [-'()+,./:=?;!*#@$_%]

什么是名称与实体与属性与 SystemLiteral 与 Pubid 的示例 (?)

例如下面的例子:

<Item id="123">Hello<Item/>

Item 是名称还是实体值?我会假设 123"123" 将是 Att(ribute)Value。那些都是正确的吗?其他人的例子是什么?

从规范中可以看出:

Literal data is any quoted string not containing the quotation mark used as a delimiter for that string. Literals are used for specifying the content of internal entities (EntityValue), the values of attributes (AttValue), and external identifiers (SystemLiteral).

因此我认为 Item 将是 EntityValue123 将是 AttrValue :那么 PubID 和 SystemLiteral 的例子是什么?最后,为什么 EntityValue 不排除 <> 字符?

你的XML例子解析如下:

<Item id="123">Hello<Item/> 是一个 element:

  • <Item id="123"> 是一个 STag
    • ItemName.
    • id="123" 是一个 Attribute
      • id 是一个 Name;
      • "123" 是一个 AttValue,这是本例中唯一的 Literal
  • Hello 在这个例子中是 content, which is CharData
  • <Item/> 是一个 ETag

您的示例中有 none 个以下结构:

  • EntityValue
    示例:<!ENTITY year "2020">
  • 中的 "2020"
  • PubidLiteral
    示例:"-//W3C//DTD HTML 4.01//EN" in <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> )
  • SystemLiteral
    示例:"../img/logo.gif" in <!ENTITY logo SYSTEM "../img/logo.gif" NDATA gif >

有关如何使用 EntityValuePubidLiteralSystemLiteral 的更多上下文,请参阅第 4.2 Entity Declarations 部分。