xml - diseño - minoccurs= 0 que significa
Problemas de espacio de nombres XML XSD (1)
Estoy tratando de definir un archivo XML y XSD simple usando el ejemplo de cuentas bancarias.
Aquí está mi XSD definiendo mi archivo XML:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
xmlns:bank="http://www.w3.org/2001/XMLSchema"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
targetNamespace="http://www.auto-owners.com/accounts"
>
<xs:element name="accounts" >
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" ref="account"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="account" type="account">
<xs:complexType>
<xs:sequence>
<xs:element ref="uuid"/>
<xs:element ref="name"/>
<xs:element ref="balance"/>
<xs:element ref="status"/>
<xs:element ref="opened"/>
<xs:element ref="closed"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="uuid" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
<xs:element name="balance" type="xs:decimal"/>
<xs:element name="status" type="xs:NCName"/>
<xs:element name="opened" type="xs:string"/>
<xs:element name="closed" type="xs:string"/>
</xs:schema>
Y aquí está mi archivo XML usando el archivo XSD arriba:
<?xml version="1.1" encoding="UTF-8"?>
<bank:accounts
xmlns="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.auto-owners.com/Account account.xsd"
xmlns:bank="http://www.auto-owners.com/Account"
>
<bank:account>
<bank:uuid>19cab0a2-c44b-4f3e-b24e-5f21dd23c7e8
</bank:uuid>
<bank:name>Bob Dylan</bank:name>
<bank:balance>1233.12</bank:balance>
<bank:status>active</bank:status>
<bank:opened>01/02/2000</bank:opened>
<bank:closed></bank:closed>
</bank:account>
<bank:account>
<bank:uuid>2e2142a2-1c36-4604-9bfd-f0681b89f775
</bank:uuid>
<bank:name>Bonnie Tyler</bank:name>
<bank:balance>34566.21</bank:balance>
<bank:status>active</bank:status>
<bank:opened>03/02/2000</bank:opened>
<bank:closed></bank:closed>
</bank:account>
<bank:account>
<bank:uuid>216361b1-0bd5-455d-b6a0-400f92f61d68
</bank:uuid>
<bank:name>Dolly Parton</bank:name>
<bank:balance>9876.32</bank:balance>
<bank:status>active</bank:status>
<bank:opened>01/05/2011</bank:opened>
<bank:closed></bank:closed>
</bank:account>
<bank:account>
<bank:uuid>140ee47a-d323-448d-a5e6-db2454a16934
</bank:uuid>
<bank:name>Gary Moore</bank:name>
<bank:balance>8764.12</bank:balance>
<bank:status>hold</bank:status>
<bank:opened>01/22/2010</bank:opened>
<bank:closed></bank:closed>
</bank:account>
</bank:accounts>
He estado corriendo tratando de definir el espacio de nombres para usar y cada vez que trato de vincularme al banco: espacio de nombres obtengo un conjunto rotatorio de errores. Actualmente estoy en:
Error al resolver la ''cuenta'' del componente. Se detectó que ''cuenta'' no tiene espacio de nombres, pero los componentes sin espacio de nombres de destino no son referenciables desde el documento de esquema ''file: ///.../account.xsd''.
¿Algunas ideas?
Esto es lo que tienes que cambiar:
- En su XSD, como lo señala Jim Garrison,
xmlns:bank="http://www.w3.org/2001/XMLSchema"
es incorrecto; debe serxmlns:bank="http://www.auto-owners.com/accounts"
. - En su XSD, cuando hace referencia a un tipo o elemento, prefiésela con el prefijo del espacio de nombres del espacio de nombres de destino.
- En su XML,
xsi:schemaLocation="http://www.auto-owners.com/Account account.xsd"
debe serxsi:schemaLocation="http://www.auto-owners.com/accounts account.xsd"
; El caso importa y se debe tener cuidado para que coincida con el espacio de nombres literalmente.
El XSD corregido es el siguiente:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
xmlns:bank="http://www.auto-owners.com/accounts"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
targetNamespace="http://www.auto-owners.com/accounts">
<xs:element name="accounts">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" ref="bank:account"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="account">
<xs:complexType>
<xs:sequence>
<xs:element ref="bank:uuid"/>
<xs:element ref="bank:name"/>
<xs:element ref="bank:balance"/>
<xs:element ref="bank:status"/>
<xs:element ref="bank:opened"/>
<xs:element ref="bank:closed"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="uuid" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
<xs:element name="balance" type="xs:decimal"/>
<xs:element name="status" type="xs:NCName"/>
<xs:element name="opened" type="xs:string"/>
<xs:element name="closed" type="xs:string"/>
</xs:schema>
El XML corregido es el siguiente:
<?xml version="1.1" encoding="UTF-8"?>
<bank:accounts
xmlns="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.auto-owners.com/accounts account.xsd"
xmlns:bank="http://www.auto-owners.com/accounts">
<bank:account>
<bank:uuid>19cab0a2-c44b-4f3e-b24e-5f21dd23c7e8
</bank:uuid>
<bank:name>Bob Dylan</bank:name>
<bank:balance>1233.12</bank:balance>
<bank:status>active</bank:status>
<bank:opened>01/02/2000</bank:opened>
<bank:closed></bank:closed>
</bank:account>
<bank:account>
<bank:uuid>2e2142a2-1c36-4604-9bfd-f0681b89f775
</bank:uuid>
<bank:name>Bonnie Tyler</bank:name>
<bank:balance>34566.21</bank:balance>
<bank:status>active</bank:status>
<bank:opened>03/02/2000</bank:opened>
<bank:closed></bank:closed>
</bank:account>
<bank:account>
<bank:uuid>216361b1-0bd5-455d-b6a0-400f92f61d68
</bank:uuid>
<bank:name>Dolly Parton</bank:name>
<bank:balance>9876.32</bank:balance>
<bank:status>active</bank:status>
<bank:opened>01/05/2011</bank:opened>
<bank:closed></bank:closed>
</bank:account>
<bank:account>
<bank:uuid>140ee47a-d323-448d-a5e6-db2454a16934
</bank:uuid>
<bank:name>Gary Moore</bank:name>
<bank:balance>8764.12</bank:balance>
<bank:status>hold</bank:status>
<bank:opened>01/22/2010</bank:opened>
<bank:closed></bank:closed>
</bank:account>
</bank:accounts>
Usando espacios de nombres de esta manera, el XML ahora validará contra el XSD.