验证者说有未声明的元素 它不会在dtd上进行验证,但会在dtd上声明。
我尝试使用xml验证程序网站和XML复制编辑器对其进行验证。
这是XML代码:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE empresa SYSTEM ".\empresa.dtd">
<empresa>
<empleados>
<oficinistas>
<oficinista>Juan Fernando</oficinista>
<oficinista>Josue Gallardo</oficinista>
</oficinistas>
<tecnicos>
<tecnico tipo="redes">Raul Rabufeti</tecnico>
<tecnico tipo="cloud">Francisco Eberredi</tecnico>
<tecnico tipo="teleco">Juan Caraban</tecnico>
<tecnico tipo="tienda">Raul Gandolfi</tecnico>
</tecnicos>
</empleados>
<tienda>
<tecnicos>
<tecnico>Roberto Cinyapies</tecnico>
<tecnico>Antonio Martinez</tecnico>
<tecnico>Pepe Pintamonas</tecnico>
</tecnicos>
</tienda>
<departamentos>
<pcs>
<pc>HP1</pc>
<pc>HP2</pc>
<pc>HP3</pc>
</pcs>
<trabajadores>
<trabajador>Johan Lopez</trabajador>
<trabajador>Jose Luis Gilberto</trabajador>
<trabajador>Mario del Monte Quemado</trabajador>
</trabajadores>
<tecnico>Hernesto Arreglatodo</tecnico>
</departamentos>
<oficinas>
<jefe>Cabroncito Ortega</jefe>
<pcs>Packard Bell 1</pcs>
<pcs>Packard Bell 2</pcs>
<secretario>Pelotas Gil</secretario>
</oficinas>
<servicios>
<nube>Cloud Computing</nube>
<redes>Instalacion de Redes</redes>
<velocidad valor="300">300Mbps</velocidad>
<velocidad valor="100">100Mbps</velocidad>
<teleco>Antenas instalacion y mantenimiento</teleco>
<hosting>Hosting Web</hosting>
<almacenamiento valor="normal">5GB</almacenamiento>
<almacenamiento valor="premium">10GB</almacenamiento>
<servidores>Servidores centralizados</servidores>
<servidor>IBM1</servidor>
<servidor>IBM2</servidor>
<presupuesto>
<montaje>25</montaje>
<coste>15</coste>
</presupuesto>
<componentes>
<componente>Graficas</componente>
<componente>RAM</componente>
<componente>CPU</componente>
<componente>Pantallas</componente>
<componente>Teclados</componente>
<componente>Ratones</componente>
</componentes>
<presupuestos>
<presupuesto tipo="alto">Gaming</presupuesto>
<presupuesto tipo="medio">Basic</presupuesto>
<presupuesto tipo="bajo">Low cost</presupuesto>
</presupuestos>
</servicios>
<jefes>
<jefe tipo="ceo" precio="">Jefe Master Pinche</jefe>
<jefe tipo="ventas" precio="">Tolovendo Alegrez</jefe>
<jefe tipo="marqueting" precio="">Compramelo Rapidez</jefe>
</jefes>
<clientes>
<cliente codigo="1">Jose Luis</cliente>
<cliente codigo="2">Jonh Petter</cliente>
<cliente codigo="3">Kim Kardasian</cliente>
</clientes>
</empresa>
DTD代码:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!ELEMENT empresa (empleados,tienda,departamentos,oficinas,servicios,jefes,clientes)>
<!ELEMENT empleados (oficinistas,tecnicos+)>
<!ELEMENT oficinistas (oficinista*)>
<!ELEMENT oficinista (#PCDATA)>
<!ELEMENT tecnicos (tecnico)>
<!ELEMENT tecnico (#PCDATA)>
<!ATTLIST tecnico redes CDATA #REQUIRED>
<!ATTLIST tecnico cloud CDATA #REQUIRED>
<!ATTLIST tecnico teleco CDATA #REQUIRED>
<!ATTLIST tecnico tienda CDATA #REQUIRED>
<!ELEMENT tienda (tecnicos+)>
<!ELEMENT departamentos (pcs*,trabajadores*,tecnico+)>
<!ELEMENT trabajadores (trabajador)>
<!ELEMENT pc (#PCDATA)>
<!ELEMENT trabajador (#PCDATA)>
<!ELEMENT oficinas (jefe,pcs*,secretario)>
<!ELEMENT jefe (#PCDATA)>
<!ELEMENT pcs (#PCDATA)>
<!ELEMENT secretario (#PCDATA)>
<!ELEMENT servicios (nube,redes,teleco,hosting,servidores,componentes,presupuestos)>
<!ELEMENT nube (#PCDATA)>
<!ELEMENT redes (#PCDATA)>
<!ATTLIST velocidad valor (100|300) #REQUIRED>
<!ATTLIST conexion tipo (fibra|cobre) #REQUIRED>
<!ELEMENT conexion (tipo,velocidad)>
<!ELEMENT tipo (#PCDATA)>
<!ELEMENT velocidad (#PCDATA)>
<!ATTLIST hosting tipo (normal|premium) #REQUIRED>
<!ELEMENT teleco (#PCDATA)>
<!ELEMENT hosting (#PCDATA)>
<!ELEMENT servidores (#PCDATA)>
<!ELEMENT componentes (#PCDATA)>
<!ATTLIST componentes tipo (normal|gaming) #IMPLIED>
<!ELEMENT presupuesto (#PCDATA)>
<!ATTLIST presupuesto tipo (alto|medio|bajo) #REQUIRED>
<!ATTLIST presupuesto precio (500|700|1000) #REQUIRED>
<!ELEMENT jefes (jefe+)>
<!ATTLIST jefe ceo CDATA #REQUIRED>
<!ATTLIST jefe ventas CDATA #REQUIRED>
<!ATTLIST jefe marqueting CDATA #REQUIRED>
<!ELEMENT clientes (cliente)>
<!ATTLIST cliente codigo ID #REQUIRED>
和错误: 奇怪的是,验证器对格式正确的XML存有疑问
4: 16 Element type "empleados" must be declared.
5: 22 Element type "oficinistas" must be declared.
6: 23 Element type "oficinista" must be declared.
7: 23 Element type "oficinista" must be declared.
9: 19 Element type "tecnicos" must be declared.
10: 33 Element type "tecnico" must be declared.
11: 33 Element type "tecnico" must be declared.
12: 34 Element type "tecnico" must be declared.
13: 34 Element type "tecnico" must be declared.
16: 13 Element type "tienda" must be declared.
17: 13 Element type "tecnicos" must be declared.
18: 13 Element type "tecnico" must be declared.
19: 13 Element type "tecnico" must be declared.
20: 13 Element type "tecnico" must be declared.
23: 20 Element type "departamentos" must be declared.
24: 8 Element type "pcs" must be declared.
25: 8 Element type "pc" must be declared.
26: 8 Element type "pc" must be declared.
27: 8 Element type "pc" must be declared.
30: 17 Element type "trabajadores" must be declared.
31: 21 Element type "trabajador" must be declared.
32: 21 Element type "trabajador" must be declared.
33: 21 Element type "trabajador" must be declared.
35: 18 Element type "tecnico" must be declared.
37: 15 Element type "oficinas" must be declared.
38: 15 Element type "jefe" must be declared.
39: 14 Element type "pcs" must be declared.
40: 8 Element type "pcs" must be declared.
41: 21 Element type "secretario" must be declared.
43: 16 Element type "servicios" must be declared.
44: 15 Element type "nube" must be declared.
45: 16 Element type "redes" must be declared.
46: 27 Element type "velocidad" must be declared.
47: 27 Element type "velocidad" must be declared.
48: 17 Element type "teleco" must be declared.
49: 18 Element type "hosting" must be declared.
50: 35 Element type "almacenamiento" must be declared.
51: 36 Element type "almacenamiento" must be declared.
52: 21 Element type "servidores" must be declared.
53: 14 Element type "servidor" must be declared.
54: 14 Element type "servidor" must be declared.
55: 16 Element type "presupuesto" must be declared.
56: 13 Element type "montaje" must be declared.
57: 11 Element type "coste" must be declared.
59: 16 Element type "componentes" must be declared.
60: 16 Element type "componente" must be declared.
61: 16 Element type "componente" must be declared.
62: 16 Element type "componente" must be declared.
63: 16 Element type "componente" must be declared.
64: 16 Element type "componente" must be declared.
65: 16 Element type "componente" must be declared.
67: 23 Element type "presupuestos" must be declared.
68: 29 Element type "presupuesto" must be declared.
69: 30 Element type "presupuesto" must be declared.
70: 29 Element type "presupuesto" must be declared.
74: 12 Element type "jefes" must be declared.
75: 36 Element type "jefe" must be declared.
76: 39 Element type "jefe" must be declared.
77: 43 Element type "jefe" must be declared.
80: 12 Element type "clientes" must be declared.
81: 23 Element type "cliente" must be declared.
82: 23 Element type "cliente" must be declared.
83: 23 Element type "cliente" must be declared.
答案 0 :(得分:0)
此DTD声明
<!ELEMENT hosting (almacenamiento+)>
表示<hosting>
元素的内容模型是一个或多个<almacenamiento>
元素。因此,XML文件应如下所示:
<hosting>
<almacenamiento tipo="normal">5GB</almacenamiento>
<almacenamiento tipo="premium">10GB</almacenamiento>
</hosting>
同一构造适用于
<!ELEMENT servidores (servidor+)>
<servidores>
<servidor>IBM1</servidor>
<servidor>IBM2</servidor>
</servidores>
最后一个错误与此DTD语句相关:
<!ELEMENT servicios (nube,redes,teleco,hosting,servidores,presupuesto_coste,componentes,presupuestos)>
<servicios>
元素必须完全由列表中每个元素的一个出现组成,按照确切的顺序,没有可选元素。然而,
XML文档包含两个<velocidad>
元素,这是不允许的。
<servicios>
<nube>Cloud Computing</nube>
<redes>Instalación de Redes</redes>
<velocidad valor="300">300Mbps</velocidad>
<velocidad valor="100">100Mbps</velocidad>
<teleco>Antenas instalacion y mantenimiento</teleco>
<hosting>Hosting Web</hosting>
但是根据DTD,由于<velocidad>
元素应包含在<conexion>
元素中,所以这里变得棘手:
<!ELEMENT conexion (tipo,velocidad)>
<!ATTLIST conexion tipo (fibra|cobre) #REQUIRED>
<!ATTLIST velocidad valor (100|300) #REQUIRED>
<!ELEMENT tipo (#PCDATA)>
<!ELEMENT velocidad (#PCDATA)>
但是,<conexion
没有父元素,因此它不能成为根元素为<empresa>
的任何有效XML文档的一部分。