这是我第一次尝试XML,但是我完全无法验证xml。验证DTD,但不验证XML。我不知道ID和IDREF部分。有人可以告诉我如何解决此问题,因为当我尝试验证时,不断收到错误“元素类型必须声明”,特别是对于medID和docID。
这是XML
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE patient_list SYSTEM "patients.dtd">
<patient_list>
<patient serialNo="a1b2c3">
<patientFName>Jon</patientFName>
<patientLName>Won</patientLName>
<gender>male</gender>
<medID IDREF="M1"/>
<docID IDREF="D37"/>
</patient>
<patient serialNo="k4t5g2">
<patientFName>Min</patientFName>
<patientLName>Hin</patientLName>
<gender>female</gender>
<medID IDREF="M2"/>
<docID IDREF="D21"/>
</patient>
<medicine medID="M1">
<name>Panadol</name>
<manufacture>GSK</manufacture>
<regNo>oo9807</regNo>
</medicine>
<medicine medID="M2">
<name>Alprazolam</name>
<manufacture>Novartis</manufacture>
<regNo>hu5432</regNo>
</medicine>
<doctor docID="D21">
<registration ID="8472392"/>
<fName>Alfred</fName>
<lName>Campbell</lName>
<specialisation>Paediatrics</specialisation>
</doctor>
<doctor docID="D37">
<registration ID="4364786"/>
<fName>Mick</fName>
<lName>Foley</lName>
<specialisation>Psychiatry</specialisation>
</doctor>
</patient_list>
这是DTD:
<!ELEMENT patient_list (patient+, medicine+, doctor+)>
<!ELEMENT patient (patientFName, patientLName, gender)>
<!ATTLIST patient serialNo CDATA #REQUIRED>
<!ELEMENT patientFName (#PCDATA)>
<!ELEMENT patientLName (#PCDATA)>
<!ELEMENT gender (#PCDATA)>
<!ATTLIST medicine medID ID #REQUIRED>
<!ATTLIST doctor docID ID #REQUIRED>
<!ELEMENT medicine (name, manufacture, regNo)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT manufacture (#PCDATA)>
<!ELEMENT regNo (#PCDATA)>
<!ELEMENT doctor (registration, fName, lName, specialisation)>
<!ELEMENT registration (#PCDATA)>
<!ATTLIST registration ID CDATA #REQUIRED>
<!ELEMENT fName (#PCDATA)>
<!ELEMENT lName (#PCDATA)>
<!ELEMENT specialisation (#PCDATA)>
答案 0 :(得分:0)
我认为medID
上的medicine
和docID
上的doctor
的属性很好。它们都被声明为属性类型ID
。
我认为问题出在哪里,是当您尝试使用medID
和docID
作为元素而不声明它们时。不要使用与medID
和docID
属性相同的名称,而是使用诸如medref
和docref
之类的不同名称。
也需要声明属性IDREF
,但是IDREF
是另一种属性类型,因此您应将属性命名为refid
之类。
完整示例...
XML
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE patient_list SYSTEM "patients.dtd">
<patient_list>
<patient serialNo="a1b2c3">
<patientFName>Jon</patientFName>
<patientLName>Won</patientLName>
<gender>male</gender>
<medref refid="M1"/>
<docref refid="D37"/>
</patient>
<patient serialNo="k4t5g2">
<patientFName>Min</patientFName>
<patientLName>Hin</patientLName>
<gender>female</gender>
<medref refid="M2"/>
<docref refid="D21"/>
</patient>
<medicine medID="M1">
<name>Panadol</name>
<manufacture>GSK</manufacture>
<regNo>oo9807</regNo>
</medicine>
<medicine medID="M2">
<name>Alprazolam</name>
<manufacture>Novartis</manufacture>
<regNo>hu5432</regNo>
</medicine>
<doctor docID="D21">
<registration ID="8472392"/>
<fName>Alfred</fName>
<lName>Campbell</lName>
<specialisation>Paediatrics</specialisation>
</doctor>
<doctor docID="D37">
<registration ID="4364786"/>
<fName>Mick</fName>
<lName>Foley</lName>
<specialisation>Psychiatry</specialisation>
</doctor>
</patient_list>
DTD
<!ELEMENT patient_list (patient+, medicine+, doctor+)>
<!ELEMENT patient (patientFName, patientLName, gender, medref*, docref*)>
<!ATTLIST patient serialNo CDATA #REQUIRED>
<!ELEMENT patientFName (#PCDATA)>
<!ELEMENT patientLName (#PCDATA)>
<!ELEMENT gender (#PCDATA)>
<!ATTLIST medicine medID ID #REQUIRED>
<!ATTLIST doctor docID ID #REQUIRED>
<!ELEMENT medref EMPTY>
<!ATTLIST medref refid IDREF #REQUIRED>
<!ELEMENT docref EMPTY>
<!ATTLIST docref refid IDREF #REQUIRED>
<!ELEMENT medicine (name, manufacture, regNo)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT manufacture (#PCDATA)>
<!ELEMENT regNo (#PCDATA)>
<!ELEMENT doctor (registration, fName, lName, specialisation)>
<!ELEMENT registration (#PCDATA)>
<!ATTLIST registration ID CDATA #REQUIRED>
<!ELEMENT fName (#PCDATA)>
<!ELEMENT lName (#PCDATA)>
<!ELEMENT specialisation (#PCDATA)>