xml - ID / IDREF 的 Docbook / 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 中的错误吗
解决方案
您的第一个要点是正确的;ID/IDREF 不能以数字开头。该值必须是有效的名称...
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 类型的值必须与名称产生式相匹配。一个名称在 XML 文档中不能多次作为这种类型的值出现;即,ID 值必须唯一标识承载它们的元素。
和
有效性约束:IDREF
IDREF 类型的值必须与 Name 产生式匹配, IDREFS 类型的值必须与 Names 匹配;每个 Name 必须匹配 XML 文档中某个元素的 ID 属性值;即 IDREF 值必须与某些 ID 属性的值匹配。
推荐阅读
- python - 根据python3.x中另一个列表中的子字符串列表删除列表中的项目
- c# - 通过减少量将 x 分成 y 部分
- c# - Oracle INNER JOIN 不起作用,但 CARTESIAN 联接有效
- postgresql - 在这种情况下如何正确安装“psycopg2”
- node.js - 在使用 puppeteer 的电子应用程序中使用 webworker
- python - Pycharm - 进程以退出代码 134 完成(被信号 6 中断:SIGABRT)错误
- azure - 具有不同标题的文件以复制 azure dwh 表中的数据
- ruby-on-rails - 在设计注册表单中使用参数
- php - 如何在 android 中使用 MySql 服务器(在桌面上下载)?
- java - getYesterdayDate_yyyy_MM_dd() 这个方法返回类型为 java.sql.date