OpenSP - 将 SGML 转换为 XML 声明 html 实体

问题描述 投票:0回答:1

在 Windows 10 上,我使用 OpenSP 中的 osx.exe 将 SGML 文件转换为 XML。 在 SGML 中,有 html 实体,如

 
–
é
等等。

解析器强迫我声明它们:

对无法生成系统标识符的实体“ndash”的引用

因此,在我的 DTD 中,我尝试将它们声明如下:

<!ENTITY ndash "&#8211;"> 

但是后来我得到了这个错误:

“8211”不是文档字符集中的字符编号

最后,我测试了添加角色本身:

<!ENTITY ndash "–"> 

我得到了这些错误:

非 SGML 字符数 226

非 SGML 字符号 8364 非 SGML

字符数8220

如何处理 SGMl-> XML 转换中的那些 HTML 实体?

xml html-entities sgml
1个回答
0
投票

很难判断何时不包含

osx
抱怨的 SGML,但您收到的这些错误消息是因为
osx
假设了不正确的文档字符集。最有可能的是,
osx
被告知在文件开头采用所谓的 SGML 声明SGML 声明引用 假定文档字符集,尽管理论上
osx
可能采用另一个默认字符集在您的特定语言环境中,Windows 计算机会被赋予类似 Windows 的字节顺序标记,或者通过目录解析规则导出 SGML 声明。

或者至少,当使用以下具有隐式 SGML 声明默认值的测试文档运行时,

osx
在我的 Unix 机器上不会抱怨:

<!DOCTYPE test [
  <!ENTITY ndash "&#8211;">
  <!ELEMENT test - - (#PCDATA)>
]>
<test>&ndash;</test>

有关 SGML 声明的详细说明,请参见示例。 https://sgmljs.net/docs/sgmlrefman.html#sgml-declaration。注意 sgmljs.net SGML 支持 ISO 8879 附件 K(又名 WebSGML),并在 SGML 声明中使用 HTML 的预定义实体,如 https://sgmljs.net/docs/w3c-html51-sgmldecl.html 中所述,但是对于 OpenSP 的

osx
,它不(完全)支持 WebSGML,您需要将它们声明为 DTD 中的实体,就像您已经做的那样。偶尔,您可以通过将它们声明为
SDATA
实体来回避问题,以使错误消息消失;也就是说,通过将它们声明为

<!ENTITY ndash SDATA "&#8211;">

如果这不起作用,或者生成的输出文件引起问题,您可以包含以下取自 https://sgmljs.net/docs/sgmlrefman.html#sgml-declaration-for-html5 的 SGML 声明作为SGML 中的第一件事。重要的部分是

160 55136 160
(描述的字符集)部分中的
DECSCET
行,告诉 SGML 解析器文档中允许使用 UCS 代码点 160 到 55136。请注意,假定
BASESET
为 UTF-8,它可能与您的文档数据匹配,也可能不匹配;此外,此 SGML 声明会启用标签推断、属性名称省略和其他适用于 HTML 但不一定是您的 SGML 的选项;我无从得知。

<!SGML "ISO 8879:1986 (WWW)"
CHARSET
         BASESET   "ISO Registration Number 177//CHARSET
                    ISO/IEC 10646-1:1993 UCS-4 with
                    implementation level 3//ESC 2/5 2/15 4/6"
         DESCSET 0       9       UNUSED
                 9       2       9
                 11      2       UNUSED
                 13      1       13
                 14      18      UNUSED
                 32      95      32
                 127     1       UNUSED
                 128     32      UNUSED
                 160     55136   160
                 55296   2048    UNUSED  -- SURROGATES --
                 57344   1056768 57344

CAPACITY        SGMLREF
                TOTALCAP        150000
                GRPCAP          150000
                ENTCAP          150000

SCOPE    DOCUMENT
SYNTAX
         SHUNCHAR CONTROLS 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
               17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 127
         BASESET  "ISO 646IRV:1991//CHARSET
                   International Reference Version
                   (IRV)//ESC 2/8 4/2"
         DESCSET  0 128 0

         FUNCTION
                  RE            13
                  RS            10
                  SPACE         32
                  TAB SEPCHAR    9

         NAMING   LCNMSTRT ""
                  UCNMSTRT ""
                  LCNMCHAR ".-_:"    
                  UCNMCHAR ".-_:"
                  NAMECASE GENERAL YES
                           ENTITY  NO
         DELIM    GENERAL  SGMLREF
                  HCRO     "&#38;#x" -- ampersand --
                  NESTC    "/"
                  NET      ">"
                  SHORTREF SGMLREF
         NAMES    SGMLREF
         QUANTITY SGMLREF
                  ATTCNT   120     -- increased for HTML 5 --
                  ATTSPLEN 65536   -- These are the largest values --
                  LITLEN   65536   -- permitted in the declaration --
                  NAMELEN  65536   -- Avoid fixed limits in actual --
                  PILEN    65536   -- implementations of HTML UA's --
                  TAGLVL   100
                  TAGLEN   65536
                  GRPGTCNT 150
                  GRPCNT   150     -- increased for HTML 5 --

FEATURES
        MINIMIZE DATATAG  NO
                 OMITTAG  YES
                 RANK     NO
                 SHORTTAG
                          STARTTAG EMPTY    NO
                                   UNCLOSED NO
                                   NETENABL IMMEDNET
                          ENDTAG   EMPTY    NO
                                   UNCLOSED NO
                          ATTRIB   DEFAULT  YES
                                   OMITNAME YES
                                   VALUE    YES
                 EMPTYNRM YES
                 IMPLYDEF ATTLIST  YES
                          DOCTYPE  NO
                          ELEMENT  YES
                          ENTITY   NO
                          NOTATION NO
         LINK
                 SIMPLE   NO
                 IMPLICIT NO
                 EXPLICIT NO
         OTHER
                 CONCUR   NO
                 SUBDOC   NO
                 FORMAL   NO
                 URN      NO
                 KEEPRSRE YES
                 VALIDITY NOASSERT
                 ENTITIES
                          REF      ANY
                          INTEGRAL NO
APPINFO NONE
>
<!-- your instance document following here eg.: -->
<!DOCTYPE test [
    <!ENTITY ndash "&#8211;">
    <!ELEMENT test - - (#PCDATA)>
]>
<test>&ndash;</test>
© www.soinside.com 2019 - 2024. All rights reserved.