Xml 为给定代码生成DTD

Xml 为给定代码生成DTD,xml,dtd,Xml,Dtd,给定的代码是: <?xml version="1.0" encoding="UTF-8"?> <student id="12C042"> <fName>John</fName> <lName>Nelson</lName> <plan> <courses year="3"> <course> <name> Exte

给定的代码是:

<?xml version="1.0" encoding="UTF-8"?>
<student id="12C042">

  <fName>John</fName>

  <lName>Nelson</lName>

  <plan>
    <courses year="3">
        <course>
            <name> Extensible Markup Language</name>
            <shortName>XML</shortName>
            <record>
                <grade>30</grade>
                <date>12-Jan-2017</date>
            </record>
        </course>

        <course>
            <name>Object Oriented Concepts and Unified Modeling Language</name>
            <shortName><![CDATA[OOP & UML]]></shortName>
        </course>
    </courses>
  </plan>
</student>

您当前对
课程
的声明表示
课程
允许零次或一次(这就是
的意思)

您的XML有两个
course
元素

您需要将声明更改为允许
课程
零次或多次(
*
)或一次或多次(
+

例如

<!ELEMENT courses (course)*>

元素类型
课程的内容必须匹配
(课程)
,错误是由于代码不匹配。
允许记录在
xml
中出现零次或一次,因为它不会出现在第二个课程标签中。
因此,要解决此错误,请将课程dtd设置为

<!ELEMENT student (fName,lName,plan)>
<!ELEMENT fName (#PCDATA)>
<!ELEMENT lName (#PCDATA)>
<!ELEMENT plan (courses)>
<!ELEMENT courses (course)>
<!ELEMENT course (name,shortName,record?)>
<!ELEMENT name ANY>
<!ELEMENT shortName ANY>
<!ELEMENT record (grade,date)>
<!ELEMENT grade ANY>
<!ELEMENT date ANY>
<!ATTLIST student id NMTOKEN #REQUIRED>
<!ATTLIST courses year CDATA #REQUIRED>

试试这个,它会有用的

    <!ELEMENT student (fName,lName,plan*)>
    <!ELEMENT fName (#PCDATA)>
    <!ELEMENT lName (#PCDATA)>
    <!ELEMENT plan (courses*)>
    <!ELEMENT courses (course+)>
    <!ELEMENT course (name,shortName,record?)>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT shortName (#PCDATA)>
    <!ELEMENT record (grade,date)>
    <!ELEMENT grade (#PCDATA)>
    <!ELEMENT date (#PCDATA)>
    <!ATTLIST student id NMTOKEN #REQUIRED>
    <!ATTLIST courses year CDATA #REQUIRED>


课程在DTD中定义了两次。这显然是不允许的,正如错误消息所说。我删除了现在显示给我的行。错误:Public ID:null系统ID:file:/home/p13290/student.xml行号:20列号:13消息:元素类型“courses”必须匹配(课程)的内容。错误虽然这段代码可以解决这个问题,但如何以及为什么解决这个问题将真正有助于提高您的帖子质量,并可能导致更多的投票。请记住,你是在将来回答读者的问题,而不仅仅是现在提问的人。请在回答中添加解释,并说明适用的限制和假设。
<!ELEMENT student (fName,lName,plan)>
<!ELEMENT fName (#PCDATA)>
<!ELEMENT lName (#PCDATA)>
<!ELEMENT plan (courses)>
<!ELEMENT courses (course)>
<!ELEMENT course (name,shortName,record?)>
<!ELEMENT name ANY>
<!ELEMENT shortName ANY>
<!ELEMENT record (grade,date)>
<!ELEMENT grade ANY>
<!ELEMENT date ANY>
<!ATTLIST student id NMTOKEN #REQUIRED>
<!ATTLIST courses year CDATA #REQUIRED>
    <!ELEMENT student (fName,lName,plan*)>
    <!ELEMENT fName (#PCDATA)>
    <!ELEMENT lName (#PCDATA)>
    <!ELEMENT plan (courses*)>
    <!ELEMENT courses (course+)>
    <!ELEMENT course (name,shortName,record?)>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT shortName (#PCDATA)>
    <!ELEMENT record (grade,date)>
    <!ELEMENT grade (#PCDATA)>
    <!ELEMENT date (#PCDATA)>
    <!ATTLIST student id NMTOKEN #REQUIRED>
    <!ATTLIST courses year CDATA #REQUIRED>