XML代码混乱。不断收到“'('需要启动 ATTLIST 枚举”不知道如何解决

XML code confusion. Keep getting " '(' required to start ATTLIST enumeration " Not sure how to fix

我是一名大学生,我在使用这个代码文件时遇到了问题。我会问老师或其他同学,但似乎没有人回应我在黑板上的代码问题。所以我希望这里的任何人都可以提供帮助!

指令状态 "For the versionDate element, an optional surveyDate attribute containing the date of the survey"。我不完全确定这是什么意思,但我尝试了“<!ATTLIST versionDate surveyDate #IMPLIED>”,但出现了上面的错误代码。唯一包含“surveyDate”的文本行是这一行:

<versionDate surveyDate=">1849"<1968/versionDate>

我试图删除该行以查看它是否是我编写的方式,但后来我收到错误代码“ATTLIST: no name for Attribute”,我相信我的所有代码都有一个名称。有人可以帮忙吗?

如果对整个element和attlist有帮助代码如下:

<!DOCTYPE products
[
    <!ELEMENT product (product+)>

    <!ELEMENT product (name, versionDate, desc, isbn?, price?)>

    <!ELEMENT name (#PCDATA)>
    <!ATTLIST name pid ID #REQUIRED>
    <!ATTLIST name category (historical |state |parks ) #REQUIRED>


    <!ELEMENT versionDate (#PCDATA)>


    <!ELEMENT desc (#PCDATA)>
    <!ELEMENT isbn (#PCDATA)>

    <!ELEMENT price (#PCDATA)>
    <!ATTLIST price format (flat |raised ) "flat" #IMPLIED> <!-- format default is flat. -->
    <!ATTLIST price media (paper | electronic)>
]>

我看到 3 个问题:

  1. 您已声明 product 两次。根据 doctype 声明,第一个元素声明应为 products(复数)。
  2. price 元素的 format 属性的属性声明中,您有一个 enumeration 的值 "flat" 和 "raised" 以及一个默认值 "flat"。如果您有默认值,您还有 #IMPLIED 无效。您应该删除 #IMPLIED.
  3. price 元素的 media 属性的属性声明中,您有一个枚举但没有默认值,#IMPLIED,或 #REQUIRED.执行以下 一个 操作:
    • 添加默认值(匹配枚举中的值)
    • 添加#IMPLIED
    • 添加#REQUIRED

此外,您可以组合元素的 ATTLIST 声明。它使它更容易阅读。

最后一件事,如果这是一个外部 DTD,您可能不需要 DTD 文件中的文档类型声明。文档类型应该在引用 DTD 的 XML 实例中。如果 XML 和 DTD 都在一个文件中,请忽略此注释。 (This section of the spec 可能有助于理解文档类型声明和 DTD(序言)。)

示例...

<!DOCTYPE products [
<!ELEMENT products (product+)>

<!ELEMENT product (name, versionDate, desc, isbn?, price?)>

<!ELEMENT name (#PCDATA)>
<!ATTLIST name 
    pid ID #REQUIRED
    category (historical|state|parks) #REQUIRED>

<!ELEMENT versionDate (#PCDATA)>
<!ATTLIST versionDate 
    surveyDate CDATA #IMPLIED>

<!ELEMENT desc (#PCDATA)>
<!ELEMENT isbn (#PCDATA)>

<!ELEMENT price (#PCDATA)>
<!ATTLIST price 
    format (flat|raised) "flat"
    media  (paper|electronic) #REQUIRED>
]>

编辑: 我还在 versionDate 元素上添加了 surveyDate 属性的属性声明。这缺少属性类型。 (See here 了解更多信息。)

您的 XML 示例中的 versionDate 元素也不正确;这不是 well-formed。它应该看起来像这样:

<versionDate surveyDate="1849">1968</versionDate>