FatalError: attribute name expected in valid XML with DTD
FatalError: attribute name expected in valid XML with DTD
我的项目中有 2 个文件(XML 和 DTD),我必须验证它。我已经声明了XML 文件。我使用 XML Copy Editor 来验证,我得到了通信 "FatalError at line 9, column 25: attribute name expected" - 这意味着元素 "kraj_prod" 有问题,但我找不到发生了什么。元素 "kraj_prod" 没有属性。 XML 文档格式正确。 XML Copy Editor 中的 DTD 文档在第一个元素 (kino) 处给我语法错误。下面是我的代码 DTD 和 XML 用波兰语写的。
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE kino SYSTEM "filmy.dtd">
<kino>
<nazwa>Kino Pojutrze</nazwa>
<film>
<tytul id="9080" wersja="napisy">Przemytnik</tytul>
<rezyser><imie>Clint</imie> <nazwisko>Eastwood</nazwisko></rezyser>
<scenarzysta><imie>Nick</imie> <nazwisko>Schenk</nazwisko></scenarzysta>
<kraj_prod>USA</kraj_prod>
<rok_prod>2018</rok_prod>
<gatunek>dramat</gatunek>
<gatunek>kryminał</gatunek>
<czas_trw czas="minuty">116</czas_trw>
<obsada>
<aktor><imie>Clint</imie> <nazwisko>Eastwood</nazwisko></aktor>
<aktor><imie>Bradley</imie> <nazwisko>Cooper</nazwisko></aktor>
<aktor><imie>Laurence</imie> <nazwisko>Fishburne</nazwisko></aktor>
</obsada>
</film>
<film>
<tytul id="9293" wersja="">Ja teraz kłamię</tytul>
<rezyser><imie>Paweł</imie> <nazwisko>Borowski</nazwisko></rezyser>
<scenarzysta><imie>Paweł</imie> <nazwisko>Borowski</nazwisko></scenarzysta>
<kraj_prod>Polska</kraj_prod>
<kraj_prod>Holandia</kraj_prod>
<rok_prod>2019</rok_prod>
<gatunek>komedia</gatunek>
<gatunek>thriller</gatunek>
<czas_trw czas="minuty"></czas_trw>
<obsada>
<aktor><imie>Maja</imie> <nazwisko>Ostaszewska</nazwisko></aktor>
<aktor><imie>Joanna</imie> <nazwisko>Kulig</nazwisko></aktor>
<aktor><imie>Rafał</imie> <nazwisko>Maćkowiak</nazwisko></aktor>
<aktor><imie>Agata</imie> <nazwisko>Buzek</nazwisko></aktor>
</obsada>
</film>
<film>
<tytul id="9352" wersja="dubbing">Król Lew</tytul>
<rezyser><imie>Jon</imie> <nazwisko>Favreau</nazwisko></rezyser>
<scenarzysta><imie>Jeff</imie> <nazwisko>Nathanson</nazwisko></scenarzysta>
<kraj_prod>USA</kraj_prod>
<rok_prod>2019</rok_prod>
<gatunek>animowany</gatunek>
<gatunek>familijny</gatunek>
<gatunek>przygodowy</gatunek>
<czas_trw czas="minuty"></czas_trw>
<obsada></obsada>
</film>
<film>
<tytul id="6827" wersja="napisy">Wonder Woman</tytul>
<rezyser><imie>Patty</imie> <nazwisko>Jenkins</nazwisko></rezyser>
<scenarzysta><imie>Allan</imie> <nazwisko>Heinberg</nazwisko></scenarzysta>
<scenarzysta><imie>Geoff</imie> <nazwisko>Johns</nazwisko></scenarzysta>
<kraj_prod>USA</kraj_prod>
<rok_prod>2017</rok_prod>
<gatunek>akcja</gatunek>
<gatunek>sci-fi</gatunek>
<czas_trw czas="minuty">139</czas_trw>
<obsada>
<aktor><imie>Gal</imie> <nazwisko>Gadot</nazwisko></aktor>
<aktor><imie>Robin</imie> <nazwisko>Wright</nazwisko></aktor>
<aktor><imie>Chris</imie> <nazwisko>Pine</nazwisko></aktor>
</obsada>
</film>
<film>
<tytul id="6750" wersja="napisy">Piraci z Karaibów: Zemsta Salazara</tytul>
<rezyser><imie>Joachim</imie> <nazwisko>Ronning</nazwisko></rezyser>
<rezyser><imie>Espen</imie> <nazwisko>Sandberg</nazwisko></rezyser>
<scenarzysta><imie>Jeff</imie> <nazwisko>Nathanson</nazwisko></scenarzysta>
<kraj_prod>USA</kraj_prod>
<rok_prod>2017</rok_prod>
<gatunek>fantasy</gatunek>
<gatunek>przygodowy</gatunek>
<czas_trw czas="minuty">135</czas_trw>
<obsada>
<aktor><imie>Johnny</imie> <nazwisko>Deep</nazwisko></aktor>
<aktor><imie>Javier</imie> <nazwisko>Bardem</nazwisko></aktor>
<aktor><imie>Orlando</imie> <nazwisko>Bloom</nazwisko></aktor>
</obsada>
</film>
</kino>
DTD 文档(filmy.dtd):
<!ELEMENT kino (nazwa,film+)>
<!ELEMENT nazwa (#PCDATA)>
<!ELEMENT film (tytul, rezyser+, scenarzysta*, kraj_prod+, rok_prod, gatunek+, czas_trw?, obsada?)>
<!ELEMENT tytul (#PCDATA)>
<!ATTLIST tytul
id ID #REQUIRED
wersja NMTOKEN #IMPLIED "">
<!ELEMENT rezyser (#PCDATA, imie, nazwisko)>
<!ELEMENT scenarzysta (imie, nazwisko)>
<!ELEMENT imie (#PCDATA)>
<!ELEMENT nazwisko (#PCDATA)>
<!ELEMENT kraj_prod (#PCDATA)>
<!ELEMENT rok_prod (#PCDATA)>
<!ELEMENT gatunek (#PCDATA)>
<!ELEMENT czas_trw (#PCDATA)>
<!ATTLIST czas_trw
czas NMTOKEN #FIXED "minuty">
<!ELEMENT obsada (aktor*)>
<!ELEMENT aktor (imie, nazwisko)>
我希望我的 XML 和 DTD 文档有效。
错误是因为这一行:
wersja NMTOKEN #IMPLIED "">
您不能在 #IMPLIED
(see here for more details) 之后使用默认值 ""
。
它应该看起来像:
wersja NMTOKEN #IMPLIED>
如果类型是 CDATA 而不是 NMTOKEN,您可以将 #IMPLIED
替换为 ""
(""
是 NMTOKEN 的无效默认值)。
您确定要使用 NMTOKEN 吗? XML 该属性的值为空。
此外,您对 rezyser
的声明不正确。您只能通过一种方式声明 mixed content(包含 PCDATA 和子元素的元素):
<!ELEMENT rezyser (#PCDATA|imie|nazwisko)*>
最后一件事,因为您的 id
属性被声明为 ID
,它们不能以数字开头。它们必须有效 Name's. You'll have to change the start character。
很抱歉没有得到您的帮助,但我发现 "rezyser" 和 "wersja" 有错误提示。 Parent "rezyser" 有 2 个 child: imie 和 nazwisko,不是#PCDATA,所以应该没问题
<!ELEMENT rezyser (imie,nazwisko)*>
接下来是"wersja"谁应该和你写的一样,所以我改一下。
最后是 "id" 谁应该是#CDATA,因为将来我会在 XSD 文档中声明更多。
感谢您在 XML 和 DTD 方面的帮助。
在此步骤中,我必须关闭线程,因为在更改之后,程序 XML 从 Notepad++ 复制编辑器和小部件有效我的文档(XML 和 DTD):)
我的项目中有 2 个文件(XML 和 DTD),我必须验证它。我已经声明了XML 文件。我使用 XML Copy Editor 来验证,我得到了通信 "FatalError at line 9, column 25: attribute name expected" - 这意味着元素 "kraj_prod" 有问题,但我找不到发生了什么。元素 "kraj_prod" 没有属性。 XML 文档格式正确。 XML Copy Editor 中的 DTD 文档在第一个元素 (kino) 处给我语法错误。下面是我的代码 DTD 和 XML 用波兰语写的。
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE kino SYSTEM "filmy.dtd">
<kino>
<nazwa>Kino Pojutrze</nazwa>
<film>
<tytul id="9080" wersja="napisy">Przemytnik</tytul>
<rezyser><imie>Clint</imie> <nazwisko>Eastwood</nazwisko></rezyser>
<scenarzysta><imie>Nick</imie> <nazwisko>Schenk</nazwisko></scenarzysta>
<kraj_prod>USA</kraj_prod>
<rok_prod>2018</rok_prod>
<gatunek>dramat</gatunek>
<gatunek>kryminał</gatunek>
<czas_trw czas="minuty">116</czas_trw>
<obsada>
<aktor><imie>Clint</imie> <nazwisko>Eastwood</nazwisko></aktor>
<aktor><imie>Bradley</imie> <nazwisko>Cooper</nazwisko></aktor>
<aktor><imie>Laurence</imie> <nazwisko>Fishburne</nazwisko></aktor>
</obsada>
</film>
<film>
<tytul id="9293" wersja="">Ja teraz kłamię</tytul>
<rezyser><imie>Paweł</imie> <nazwisko>Borowski</nazwisko></rezyser>
<scenarzysta><imie>Paweł</imie> <nazwisko>Borowski</nazwisko></scenarzysta>
<kraj_prod>Polska</kraj_prod>
<kraj_prod>Holandia</kraj_prod>
<rok_prod>2019</rok_prod>
<gatunek>komedia</gatunek>
<gatunek>thriller</gatunek>
<czas_trw czas="minuty"></czas_trw>
<obsada>
<aktor><imie>Maja</imie> <nazwisko>Ostaszewska</nazwisko></aktor>
<aktor><imie>Joanna</imie> <nazwisko>Kulig</nazwisko></aktor>
<aktor><imie>Rafał</imie> <nazwisko>Maćkowiak</nazwisko></aktor>
<aktor><imie>Agata</imie> <nazwisko>Buzek</nazwisko></aktor>
</obsada>
</film>
<film>
<tytul id="9352" wersja="dubbing">Król Lew</tytul>
<rezyser><imie>Jon</imie> <nazwisko>Favreau</nazwisko></rezyser>
<scenarzysta><imie>Jeff</imie> <nazwisko>Nathanson</nazwisko></scenarzysta>
<kraj_prod>USA</kraj_prod>
<rok_prod>2019</rok_prod>
<gatunek>animowany</gatunek>
<gatunek>familijny</gatunek>
<gatunek>przygodowy</gatunek>
<czas_trw czas="minuty"></czas_trw>
<obsada></obsada>
</film>
<film>
<tytul id="6827" wersja="napisy">Wonder Woman</tytul>
<rezyser><imie>Patty</imie> <nazwisko>Jenkins</nazwisko></rezyser>
<scenarzysta><imie>Allan</imie> <nazwisko>Heinberg</nazwisko></scenarzysta>
<scenarzysta><imie>Geoff</imie> <nazwisko>Johns</nazwisko></scenarzysta>
<kraj_prod>USA</kraj_prod>
<rok_prod>2017</rok_prod>
<gatunek>akcja</gatunek>
<gatunek>sci-fi</gatunek>
<czas_trw czas="minuty">139</czas_trw>
<obsada>
<aktor><imie>Gal</imie> <nazwisko>Gadot</nazwisko></aktor>
<aktor><imie>Robin</imie> <nazwisko>Wright</nazwisko></aktor>
<aktor><imie>Chris</imie> <nazwisko>Pine</nazwisko></aktor>
</obsada>
</film>
<film>
<tytul id="6750" wersja="napisy">Piraci z Karaibów: Zemsta Salazara</tytul>
<rezyser><imie>Joachim</imie> <nazwisko>Ronning</nazwisko></rezyser>
<rezyser><imie>Espen</imie> <nazwisko>Sandberg</nazwisko></rezyser>
<scenarzysta><imie>Jeff</imie> <nazwisko>Nathanson</nazwisko></scenarzysta>
<kraj_prod>USA</kraj_prod>
<rok_prod>2017</rok_prod>
<gatunek>fantasy</gatunek>
<gatunek>przygodowy</gatunek>
<czas_trw czas="minuty">135</czas_trw>
<obsada>
<aktor><imie>Johnny</imie> <nazwisko>Deep</nazwisko></aktor>
<aktor><imie>Javier</imie> <nazwisko>Bardem</nazwisko></aktor>
<aktor><imie>Orlando</imie> <nazwisko>Bloom</nazwisko></aktor>
</obsada>
</film>
</kino>
DTD 文档(filmy.dtd):
<!ELEMENT kino (nazwa,film+)>
<!ELEMENT nazwa (#PCDATA)>
<!ELEMENT film (tytul, rezyser+, scenarzysta*, kraj_prod+, rok_prod, gatunek+, czas_trw?, obsada?)>
<!ELEMENT tytul (#PCDATA)>
<!ATTLIST tytul
id ID #REQUIRED
wersja NMTOKEN #IMPLIED "">
<!ELEMENT rezyser (#PCDATA, imie, nazwisko)>
<!ELEMENT scenarzysta (imie, nazwisko)>
<!ELEMENT imie (#PCDATA)>
<!ELEMENT nazwisko (#PCDATA)>
<!ELEMENT kraj_prod (#PCDATA)>
<!ELEMENT rok_prod (#PCDATA)>
<!ELEMENT gatunek (#PCDATA)>
<!ELEMENT czas_trw (#PCDATA)>
<!ATTLIST czas_trw
czas NMTOKEN #FIXED "minuty">
<!ELEMENT obsada (aktor*)>
<!ELEMENT aktor (imie, nazwisko)>
我希望我的 XML 和 DTD 文档有效。
错误是因为这一行:
wersja NMTOKEN #IMPLIED "">
您不能在 #IMPLIED
(see here for more details) 之后使用默认值 ""
。
它应该看起来像:
wersja NMTOKEN #IMPLIED>
如果类型是 CDATA 而不是 NMTOKEN,您可以将 #IMPLIED
替换为 ""
(""
是 NMTOKEN 的无效默认值)。
您确定要使用 NMTOKEN 吗? XML 该属性的值为空。
此外,您对 rezyser
的声明不正确。您只能通过一种方式声明 mixed content(包含 PCDATA 和子元素的元素):
<!ELEMENT rezyser (#PCDATA|imie|nazwisko)*>
最后一件事,因为您的 id
属性被声明为 ID
,它们不能以数字开头。它们必须有效 Name's. You'll have to change the start character。
很抱歉没有得到您的帮助,但我发现 "rezyser" 和 "wersja" 有错误提示。 Parent "rezyser" 有 2 个 child: imie 和 nazwisko,不是#PCDATA,所以应该没问题
<!ELEMENT rezyser (imie,nazwisko)*>
接下来是"wersja"谁应该和你写的一样,所以我改一下。 最后是 "id" 谁应该是#CDATA,因为将来我会在 XSD 文档中声明更多。
感谢您在 XML 和 DTD 方面的帮助。 在此步骤中,我必须关闭线程,因为在更改之后,程序 XML 从 Notepad++ 复制编辑器和小部件有效我的文档(XML 和 DTD):)