Docbook / ID / IDREF的XML限制

时间:2018-08-19 13:59:13

标签: xml docbook

在我(生成的)文档文件中,我获得了一个以数字开头的ID / IDREF对(例如,015_code具有xml:id / linkend属性,因此发出了警告(在这种情况下为XMLMind):

bad value for attribute "id" from namespace "http://www.w3.org/XML/1998/namespace"

在《简而言之XML》一书中,我读到:

  

ID号很棘手,因为数字不是XML名称,因此   不是合法的XML ID。普通解决方案在值之前加上一个   下划线或普通字母。

此解决方案对我有用,但是在查看示例015_code时,这不是一个数字,所以我的问题是

  • 我的解释/报价不正确,是因为ID / IDREF不能以数字开头
  • 这可能是XMLMind中的错误

1 个答案:

答案 0 :(得分:1)

您的第一个要点是正确的; ID / IDREF不能以数字开头。该值必须是有效的Name ...

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)*
[6]   Names         ::=   Name (#x20 Name)*
[7]   Nmtoken       ::=   (NameChar)+
[8]   Nmtokens      ::=   Nmtoken (#x20 Nmtoken)*

来自https://www.w3.org/TR/REC-xml/#sec-attribute-types ...

  

有效期约束:ID

     

ID类型的值必须与Name产生的匹配。 Name不能   在XML文档中多次出现这种类型的值;   也就是说,ID值必须唯一标识承载它们的元素。

  

有效期约束:IDREF

     

IDREF类型的值必须与Name产生的值匹配,并且   类型IDREFS必须与名称匹配;每个名称必须与ID的值匹配   XML文档中某些元素的属性;即IDREF值必须   匹配某些ID属性的值。