2017-08-07 85 views
-2

给定的代码是:产生DTD对于一个给定的代码

<?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> 

我需要生成这样的一个DTD XML文件。

我做了一个代码:

<!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 #IMPLIED> 

它扔我一个错误:

Error:                   
    Public ID: null                
    System ID: file:/home/p/student.xml          
    Line number: 20                
    Column number: 13                
    Message: The content of element type "courses" must match "(course)".   
error 
+0

课程是你的DTD定义两次。这显然是不允许的,因为错误消息说。 – Markus

+0

我删除了<!ELEMENT course ANY>这行现在显示给我。错误: 公共ID:null 系统ID:file:/home/p13290/student.xml 行号:20 列号:13 消息:元素类型“courses”的内容必须匹配“(course)”。 错误 –

回答

0

您当前的courses声明说,course允许零个或一个时间(这是什么?手段)。

您的XML有两个course元素。

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

例...

<!ELEMENT courses (course)*>