【问题标题】:ENTITIES type in XML specXML 规范中的 ENTITIES 类型
【发布时间】:2017-07-23 00:09:47
【问题描述】:

当我阅读 XML 规范 here 时,我遇到了一些对我来说没有任何意义的东西:

作为已声明为 ENTITY 类型的属性的值出现,或作为已声明为 类型的属性值中的空格分隔标记之一出现实体

来自此部分:https://www.w3.org/TR/REC-xml/#entproc

名称在实体引用中标识实体,或者在未解析实体的情况下,在 ENTITYENTITIES 属性的值中标识实体

来自此部分:https://www.w3.org/TR/REC-xml/#sec-entity-decl

我很清楚如何使用<!ENTITY ...> 语法声明实体,但是我从未见过包含<!ENTITIES ...> 的DTD 结构。此外,我查看了常见 XML 解析器/处理器的源代码,但它们似乎无法处理这种情况。最后,XML spec for entities 本身甚至没有定义构造语法。

我是否读错了文档? ENTITIES 不是一个东西吗?如果是这样,为什么在规范中将其作为单独的类型提及?

【问题讨论】:

    标签: xml


    【解决方案1】:

    编辑:虽然有这个

    https://github.com/libexpat/libexpat/blob/5f1f1f1d98fef39ef885d4271029b4c3fd814a2d/expat/tests/runtests.c#L993

    START_TEST(test_attr_whitespace_normalization)
    {
        const char *text =
            "<!DOCTYPE doc [\n"
            "  <!ATTLIST doc\n"
            "            attr NMTOKENS #REQUIRED\n"
            "            ents ENTITIES #REQUIRED\n"
            "            refs IDREFS   #REQUIRED>\n"
            "]>\n"
            "<doc attr='    a  b c\t\td\te\t' refs=' id-1   \t  id-2\t\t'  \n"
            "     ents=' ent-1   \t\r\n"
            "            ent-2  ' >\n"
            "  <e id='id-1'/>\n"
            "  <e id='id-2'/>\n"
    "</doc>";
    

    (编辑前...)

    规范不清楚,我能找到的对 ENTITIES 的唯一参考是公共标识符的 RFC3151 URN 描述,格式为“-//{owner}//{class} {description}//”;这来自 OASIS 而不是 W3,iirc。

    但你可能已经想通了..

    例子

    /etc/xml/docbook-xml.xml

    <delegatePublic publicIdStartString="-//OASIS//ENTITIES DocBook Notations V4.4//EN"
      catalog="file:///usr/share/xml/docbook/schema/dtd/4.4/catalog.xml"/>
    <delegatePublic publicIdStartString="-//OASIS//ELEMENTS DocBook Document Hierarchy V4.2//EN"
      catalog="file:///usr/share/xml/docbook/schema/dtd/4.2/catalog.xml"/>
    

    /usr/share/xml/docbook/schema/dtd/4.4/catalog.xml

    <public publicId="-//OASIS//ENTITIES DocBook Notations V4.4//EN"
      uri="dbnotnx.mod"/>
    <public publicId="-//OASIS//ENTITIES DocBook Character Entities V4.4//EN"
      uri="dbcentx.mod"/>
    

    dbcentx.mod

    <![%sgml.features;[
        <!ENTITY % ISOamsa.module "INCLUDE">
        <![ %ISOamsa.module; [
            <!ENTITY % ISOamsa PUBLIC "ISO 8879:1986//ENTITIES Added Math Symbols: Arrow Relations//EN">
        ]]>
        <!ENTITY % ISOamsb.module "INCLUDE">
        <![ %ISOamsb.module; [
            <!ENTITY % ISOamsb PUBLIC "ISO 8879:1986//ENTITIES Added Math Symbols: Binary Operators//EN">
        ]]>
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-12
    • 2014-10-03
    相关资源
    最近更新 更多