Sie sind auf Seite 1von 7

28/10/2015

TutorialdeXML

IntroduccinallenguajeXML

CursodeMicrosoft.NET
ServiciosWeby.Net
XSLT,hojasdeestilo
PginaprincipaldelgrupoGeNeura

1QuesesodelXML?
XMLsignificaeXtensiblemarkuplanguage,olenguajedeanotacinextensible.YaconocemosellenguajeHTML
(hypertextmarkuplanguage),lenguajedeanotacinparapginawebsquepermitenavegacintipohipertextosin
embargo,XMLnoesslounlenguaje,esunaformadeespecificarlenguajes,deahlodeextensible.Todolenguaje
queseexpresedeunaformadeterminadapuedeserXML.Porlotanto,XMLnoesunlenguajeparahacermejores
pginasweb,sinounlenguajeparainformacinautodescrita,oalmenos,autodescritasilasetiquetasestnbien
puestas.
XMLseinicicomounsubconjuntodeSGML(structuredgeneralizedmarkuplanguage),unstandardISOpara
documentosestructuradosqueessumamentecomplejoparapoderservirdocumentosenlaweb.XMLesalgoas
comoSGMLsimplificado,deformaqueunaaplicacinnonecesitacomprenderSGMLcompletoparainterpretarun
documento,sinosloelsubconjuntoquesedefina.LoseditoresSGML,sinembargo,puedencomprenderXML.
Portanto,nodebeunopensarsequeXMLesparacrearpginasweb,oalgoparecidoalaspginaweb.XMLes
unlenguajequecambiaelparadigmadeprogramacin:debasadaenelfuncionesuobjetosalaprogramacin
basadaeneldocumento.XMLsepuedeusarparacambiartotalmenteelparadigmadepublicacindeunprograma
querecibeunasentradasyproduceunassalidas,sepasaaundocumentoquegeneraotrodocumento,obien
programasquetomandocumentosyproducenotrosdocumentos.Poreso,tambin,y,engeneral,salvoenentornos
deserviciosweb,lonormalesqueelXMLseuseenelservidor,ysesirvaotrotipodedocumentos,HTML,por
ejemplo,queseobtienenabasedeunaseriedetransformaciones.Precisamente,estohacequelosdocumentosXML
seusendentrodeentornosdeaplicaciones.EsteentornodeaplicacionespermitepublicardocumentosXML,que,
antesdeserenviadosalcliente,sufrirnunaseriedetransformacionesparaadaptarloalosrequisitosdelmismo.
AlgunosejemplosdeentornodeaplicacionessonelCocoon,unentornobasadoenJava,libre,quepermitenoslo
publicarpginasXML,sinotambinincluirprogramasdentrodelaspginas(XSP).Nosecaracterizaporsuvelocidad
niamigabilidad,peroesexcelentecomoentornodedesarrollo(yelprecioesinmejorable).Otraalternativagratuita
eselAxKit,escritoenPerl.Comoalternativasdepago(ybienpagadas)estnelBeaWeblogic(delquepuedesleer
unaintroduccinenprogramacion.com,yelIBMWebSphereTranscodingPublisher.Sobretodosestosymuchosms
setrataenestadiscusinenbarrapunto,enlacualsemenciona,porejemploKrysalis,unentornodepublicacin
basadoenPHP,queincluyefacilidadesparaserusadoatravsdelprotocoloSOAP,unprotocolodeaccesoremotoa
documentosbasadoenXML.
Dentrodeestosentornosdedesarrolloy/opublicacin,ousndolodecualquierotraforma,XMLtienegran
nmerodeaplicaciones.LamayorpartedelosportalesysitiosdenoticiasyaestnbasadosenXML,porquepermite
estructurarlainformacinyluegoaplicarlefcilmentetransformacionesparasupresentacin.Lomsnormalesque
lainformacinestalmacenadaenunabasededatos,seconviertaaXMLyluegosetransformeparaservirloal
cliente.OtroejemplodeaplicacinbasadaenXMLeslabasededatosdiscogrficadeSiniestroTotalesttambin
basadaenXML,yademselcdigoeslibre.Muchosweblogs,talescomobarrapuntoySlashdot,sirvensustitulares
enXML(yRDF),locualpermiteprocesarlofcilmentepara,porejemplo,incluirlosenlapginapersonaldeuno(ver
labarradeladerecha).Todoslossitiosquesirven,oservan,pginasWAPtambinusan,sinotroremedio,XML.
GoogleofreceuninterfazdeprogramacinparaaccederasusserviciosusandoSOAP,uninterfazdeaccesoremoto
queusaXML.Ysepuedeusarencualquieraplicacinwebdondehagafaltaprogramacinestructurada.

2CmoseusaXML?
ParaeditardocumentosXML,aligualqueparahacerloconHTML,sepuedehacededosformas:
editndoloscomocualquierotroficheroASCII,usando,siacaso,uneditorestructuradocomoelXEmacs,obien
usaruneditorespecficoparaXML,queentiendelasparticularidadesdellenguaje,loindentacomoest
mandado,ytecierrasolitolasetiquetas.

Contenido
deesta
seccin

Parahacerestohaymuchasopciones,tantoenWindowscomoenLinux,aunquelamayorasondepago.
Porejemplo,XMLSpytieneunbuenentorno,funcionasoloparaWindows,paroesrelativamenteinestable(al
menoslasversionesprobadas).eXcelonStyluspermiteademsaplicartransformaciones,enunentornodetres
panelesbastantepijo.Tambinesrelativamentecaro.<oXygen/>esbastanteeconmicoparausopersonalo
acadmico,ytieneunaversindepruebadetreintadas.EstbasadoenJava,yfuncionatantoenWindowscomoen
Linux.Tecompletalasetiquetas,yesaceptablementerpido.Sebasatambinenbastantesherramientaslibres,
talescomoBatikyFOPdeApache.Otraopcin,bastantesimple,esXMLShell,quepermitetambinhacer
transformacionesXSLTsimples.

Cmo
editar
XML
Qu
hacer
conel
XML
editado

Unalistaextensa,perosinningntipodecomentario,estenUserlandsoftware.Tambinsuelehaberuna
buenalistaenXMLsoftware,peroenjulio2002estcaido.Habrqueesperaraquevuelva.Enfreshmeatselistan
hasta15herramientas,algunasdelascualessoneditores.

http://geneura.ugr.es/~jmerelo/xml/

1/7

28/10/2015

TutorialdeXML

LosmismosentornosincluyenfacilidadesparavalidarelcdigoXMLresultante,peroestosepuedehacer
tambinusandoanalizadoresXML,deloscualeshaymuchos,debastantebuenacalidad,ylamayorpartedeellos
gratuitos.UnodelosmsconocidosyusadoseselXerces,delcualhayversionesenJava,enPerlyenC++.Es
adecuadamenterpido,yademsincorporatodoslosltimosestndaresdelW3.Otraopcin,queademssepuede
usardesdeInternet,eselXParsedeJeremie,queteanalizadirectamenteeldocumentoytelopresentaenformade
rbol.
Lamayorpartedelosvalidadorespuedentrabajardedosformas:deformaindependiente,yusndoloscomo
librerasdesdeellenguajedeprogramacindelaeleccindeunoporejemplo,Xercessepuedeusarstandalone,o
biencomounalibreraxerces.jar,cuyosobjetossepuedeninstanciarousardesdeelprogramadeuno.
Enmuchoscasos,comoenelcasodeC#,elXMLsepuedegenerarautomticamenteapartirdeladefinicin
deunaclase,obien,alrevs,unaclaseounobjetodeunaclasesepuedegenerarautomticamenteapartirdeXML
apartirdeunfichero,deestaforma:
csc/doc:doc.xmlmylangdoc.cs
Delamismaforma,usandolaherramientaxsdpermiteconvertirdefinicionesdeclaseendefinicionesdetipos
dedatosenXMLyviceversa,usndolodeestaforma:
xsd.exe/ccar.xsd

convierteunadefinicindeclaseencdigoC#,o,deformaanloga,peroalcontrario:
xsd.execar.exe
queconvierteunensamblajeenunadefinicindetipodedatosenXML
LamayoradelosnavegadoresactualessoncapacesdeentenderXML.Porejemplo,elInternetExplorerlee
losficherosXMLylostratadeunaformaespecial,pudiendopresentarlajerarquaadiferentesniveles.Otros
navegadores,comoelMozillaoelNetscape,tambinentiendenXML,aunquenopermiteneditarlodeformaadecuada
nidepresentarlodeformajerrquicacomoelIE.Enalgunoscasos,soncapacestambindeaplicartransformaciones
talescomoXSLToCSS(cascadingstylesheets).

3XMLbienformado
Comolenguajedeanotacin,lassentenciasenXMLconsistenenunaseriedeetiquetas(llamadas
elementos)conunaseriedemodificadores(llamadosatributos).Lasetiquetaspuedenestaranidadas
unasdentrodeotras,perotodaetiquetaqueseabrasetienequecerrar,ysiempreenelmismoorden.
Encasodequeunelementonotengapareja(pornotenerningncontenidodentro),seledenomina
elementovacoyseindicaconun/alfinal.Loselementosseagrupanendocumentos,talescomoel
siguiente(ej1.xml):
<?xmlversion="1.0"encoding='iso88591'?>
<micasa>
<habitacionid='comedor'>
<mueble>aparador</mueble>
<mueble>sof</mueble>
<puertaa='balcn'/>
</habitacion>
</micasa>

Contenidodeesta
seccin
XMLbien
formado
Primer
documento
XML
Constituyentes
adicionales
deun
documento
XML

TodoslosdocumentosXMLdebenestarbienformados,yesteeselrequisitomnimoquedebencumplirlos
documentos.Esoquesignificaquesedebecumplirlosiguiente:
sinoseutilizaDTD,eldocumentodebecomenzarconunDeclaracindeDocumentoStandalone,talcomola
queseponeenlaprimeralnea.
todaslasetiquetasdebenestarequilibradas:estoes,todosloselementosquecontengandatosdetipocarcter
debenteneretiquetasdeprincipioyfin
todoslosvaloresdelosatributosdebenirentrecomillados(elcarctercomillasimple[elapstrofe]puede
utilizarsesielvalorcontienecaracterescomillasdobles,yviceversa):sinecesitasambos,utiliza&aposy
&quot.Asescomosehaceenelelementohabitacion
cualquierelementoVACO(p.e.aquellosquenotienenetiquetafinalcomo<IMG>,<HR>,y<BR>yotrosde
HTML)debenterminarcon'/>'odebeshacerlosnoVACOSaadindolesunaetiquetadefin,talcomoseveen
elelementopuerta.
nodebehaberetiquetasaisladas(<&)eneltexto(p.e.debedarsecomo&lty&amp),ylasecuencia]]>
http://geneura.ugr.es/~jmerelo/xml/

2/7

28/10/2015

TutorialdeXML

debedarsecomo]]&gtsinoocurreestocomofinaldeunaseccinmarcadacomoCDATA
loselementosdebenanidardentrodessuspropiedades(nosedebensobreponeretiquetas,comoenelresto
deSGML)
LosficherosbienformadossinDTDpuedenutilizaratributosensuselementos,perostosdebensertodosdel
tipoCDATA,pordefecto.EltipoCDATA(characterDATA)soncaracteres..
Losnombresdelasetiquetaspuedenseralfanumricos,comenzandoconunaletra,eincluyendoloscaracteres
y:,aunqueesteltimotieneunsignificadoespecial.
EnestecasousamosundocumentoXMLparadescribirlasestanciasdeuna
casa.Conlpodemoshacerpocacosa,salvoanalizarloaversiescorrecto.Lo
podemoshacerusandoelparserXMLdeJeremie,quenosdarunresultadotalcomo
eldelaimagen.
Loqueocurreconelparseresteesqueselotragatodo,yyapuedeunometer
loserroresquesean,quenodaninguno.Poreso,merecelapenausarunparsertal
comoelXerces,quetepuedesbajardirectamentedeaqu.Parausarlo,tenemosque
darlasrdenessiguientes(enWindows)
:
setPATH=%PATH%c:\jdk1.1.8\bin
setCLASSPATH=%CLASSPATH%c:\xerces1_4_4\xerces.jarc:\xerces1_4_4\xercesSamples.jar
cdc:\xerces1_4_4
javadom.DOMWriterfichero.xml
Habrquedar,encadacaso,elcaminoadondeestinstalado,deformaefectiva,elXercesylamquina
virtualJava.EncasodetratarsedeLinux,lasrdenessernas:
setPATH=$PATH:/usr/jdk1.1.8/bin
setCLASSPATH=$CLASSPATH:/usr/local/xerces1_4_4/xerces.jar:/usr/local/xerces1_4_4/xercesSamples.jar
cd/usr/local/xerces1_4_4
javadom.DOMWriterfichero.xml
Porejemplo,enelcasodelficheroanterior,elresultadoseraalgoas:

mellizo:~$javacp/home/jmerelo/soft/xerces1_4_4/xerces.jar:/home/jmerelo/soft/xerces1_4_4/xercesSamples.jar
public_html/xml/ej1.xml:
<?xmlversion="1.0"encoding="UTF8"?>
<micasa>
<habitacionid="comedor">
<mueble>aparador</mueble>
<mueble>sof</mueble>
</habitacion>
</micasa>
Queesmuyparecidoaloriginal,salvoquelacodificacinhasidocambiadaaUTF8(unmtododecodificar
caracteresUNICODE),yporesolosacentosaparecendeformaextraa.Enestecaso,laclasedom.Domwriterloque
haceesleerelficherodeentrada,validarlo,yescribirloenlasalidaconindentaciones.Encasodequehubiramos
introducidounerror,porejemplo,elficherosiguiente:
<?xmlversion="1.0"encoding="iso88591"?>
<micasa>
<habitacionid="comedor">
<mueble>aparador</mueble>
<mueble>sof</mueble>
</habitacion>
<aquipeta>
</micasa>
Nosdaraunerrordeesteestilo:
public_html/xml/ej2peta.xml:
[FatalError]ej2peta.xml:8:9:Theelementtype"aquipeta"mustbeterminatedbythematchingendtag"".
Queindicaque,efectivamente,elelementotipoaquipetadebedeestaremparejadoconsuantielemento
correspondiente.
EnundocumentoXML,apartedeelementosyatributos,puedehaberotrascosas:entidades,
querepresentansmbolos"atmicos",quehabitualmentedebenserentendidosporelnavegador,y
quesemuestranenlatablaadjuntacomoseve,lasentidadesvanencerradasentrelossmbolos
&y;comentarios,queseprocesandeformadiferentealtexto,yque,talcomoenHTML,van
precedidospor<!yacabancon>seccionesCDATA,quesirvenparaextraerdeldocumento
XMLunaseccin,quevaaserinterpretadatalcual,sinhacerningunamodificacin.Puedeservir,
porejemplo,parameterHTML"malformado"dentrodeundocumentoXML.Porejemplo,el
documentosiguienteincluiratodasloselementosanteriores(ej3.xml):

ENTIDAD CARACTER
&amp

&

&lt

<

&gt

>

&apos

'

&quot

"

<?xmlversion="1.0"encoding="iso88591"?>
<!Descripcindeloselementosdeunacasasoada>
<micasa>
<habitacionid="comedor">
http://geneura.ugr.es/~jmerelo/xml/

3/7

28/10/2015

TutorialdeXML

<mueble>aparador</mueble>
<mueble>sof"depoca"</mueble>
</habitacion>
<habitacionid="cocina">
<mueble><![CDATA[
<p>Enlapareddeladerechahayunfrigorfico
<p>Yenladelaizquierda,slomugre
]]></mueble>
<mueble>fregadero</mueble>
</habitacion>
</micasa>
Enestecaso,alprocesarloconXerces,lasalidadejarfueraloscomentarios,quenoformanpartedel
documento,anoserquesequieranusardeverdad.
Ejercicios11.CrearundocumentoXML,quecontengaladescripcindeunequipodelaliga(jugadores,nombre,
entrenador).ProcesarloenelparserJavaScript,yconelXerces.UsaralternativamenteuneditorparaWindows.
ComprobarqueesXMLvlido.
2.CrearundocumentoXMLquedescribavarioslibrosdeunabibliotecaolibrera,conttulo,autores,resumen,
editorialylosdatosquesequieranincluir.

4Cadacosaensusitio:XMLnamespaces

Contenidode
estaseccin
Espacios

Sitodoelmundofueradefiniendoetiquetasporah,undocumentoacabarasiendouncaosde
de
diferentesetiquetasprocedentesdediferentessitios,y,loqueespeor,deetiquetasconelmismonombre
nombres
que,enrealidad,significancosasdiferentes.Elconceptodeespaciosdenombres(namespaces)permite
particionarelconjuntodetodoslosnombresposibles,deformaquesepuedadefiniraquzonadeese
espaciocorrespondeunaetiqueta.Deestaforma,etiquetasconelmismonombre,perodefinidaspordosautores
diferentes,puedendiferenciarseenelespaciodenombres.Elespaciodenombresnoesesencialentodoslos
documentos,peroresultatilcuandoseusanetiquetasprocedentesdediferentesprocedencias(porejemplo,
etiquetasnuevasdentrodeundocumentoXML),oetiquetasquesequierenprocesardeformadiferente.Elespecio
denombresdeunaetiquetaseindicaconunprefijoy:,comoenestecaso:<namespace:etiqueta>.Porejemplo,seusan
espaciosdenombreseneldocumentosiguiente(ej4.xml):
<mc:micasaxmlns:mc='http://www.geneura.org/micasa'>
<mc:habitacionmc:id="comedor">
<mc:mueble>aparador</mc:mueble>
<mc:mueble>sof"depoca"</mc:mueble>
</mc:habitacion>
</mc:micasa>
Encasodequenoseespecifiqueningnprefijo,sepuedetambinespecificarquespaciodenombressigue,
pordefecto,eldocumento:
<micasaxmlns='http://www.geneura.org/micasa'>
<habitacionid="comedor">
<mueble>aparador</mueble>
<mueble>sof"depoca"</mueble>
</habitacion>
</micasa>
Convienerecordarqueelprefijodeunespaciodenombresestotalmentearbitrarioloquedefineunespacio
denombreses,enrealidad,elURI.
Enestedocumento,dondehemossuprimidoelementosqueyasehanexplicado,seusalaprimeralneapara
declararelprefijodelespaciodenombresmedianteelatributoxmlns(XMLnamespace).Enestecaso,hemoselegido
elprefijomc.Alavez,elespaciodenombrestienequetenerasignadounURI(UniversalResourceIdentification),que
esbsicamentealgoquepareceunadireccinweb,peroquenoloes.LonicoqueserequieredeesteURIesque
seanicoeneldocumentoadems,esaconsejablequeseasiempreelmismocuandoseuseelmismonamespace,
aunquenoesestrictamentenecesario,nisepuedecomprobar.ElqueseaunURIsignifica,entreotrascosas,quesi
unosemeteenesadireccinnotieneporquhabernada.Setratasimplementedeasignarunidentificadornico.
Enelrestodeloselementossesigueusandoelespaciodenombres.Inclusosepuedeusarenlosatributos,si
pertenecenalmismoespaciodenombres.
UndocumentoXMLpuedetenertantosespaciosdenombrescomosequierandeclarar,ysepuedenmezclar
elementosdediferentesespaciosdenombres,einclusosinningnespacio,talcomosehaceenelsiguienteejemplo
(ej5.xml):
<mc:micasaxmlns:mc='http://www.geneura.org/micasa'
xmlns:mueble='http://www.geneura.org/mueble'>
<mc:habitacionid="comedor">
<mc:mueble>aparador</mc:mueble>
<mc:mueble><mueble:nombre>Sof</mueble:nombre>
<mueble:descripcion>Peludo</mueble:descripcion>
<mueble:tamano>Inconmensurable</mueble:tamano>
</mc:mueble>
</mc:habitacion>
</mc:micasa>

http://geneura.ugr.es/~jmerelo/xml/

4/7

28/10/2015

TutorialdeXML

Enestecaso,hemosdeclaradodosespaciosdenombres,mcymueble,ycadaunolousamosparaunacosa
diferente.Inclusounatributo,id,seusasinespaciodenombres.
Convieneusarlosespaciosdenombrescuandonohayotroremedio,ocuandohayquecombinarconjuntosde
etiquetasXMLprocedentesdedifefentesprocedencias.Entodocaso,enladocumentacindeunconjuntode
etiquetasconvieneespecificarunespaciodenombres,paraqueselaspuedaidentificarfcilmentecuandoaparezcan
enundocumento.Msadelante,cuandoseveanlosDTDs,losespaciosdenombresservirnparaespecificarqu
diccionariodedatosusarencadamomentounURItambinidentificaundiccionariodedatos.
Ejercicios2
1.Conlosequiposdelaligaanteriores,usardiferentesespaciodenombresparaelequipoensyparasus
componentes.Porejemplo,loselementosqueseincluyandentrodeunjugadorpuedentenerunespaciodenombres,
mientrasqueladescripcindeunequipopuedetenerotrodiferente

5XMLydiccionariosdedatos

Contenidode
estaseccin

Enalgunoscasos,esnecesariovalidaarqueundocumentoXMLescorrecto,esdecir,quelasetiquetas
queseusansoncorrectasyqueestnanidadasdelaformaadecuada.Porejemplo,enelcasoanterior,es
convenientecomprobarquelaetiquetarazessiempremicasa,quelacasaestcompuestadehabitaciones,y
lashabitacionestienenmueblesypuertasaotrossitios.Inclusosepodraintentarquelaspuertasfuerana
otrashabitacionesvlidas,aunqueesmuchopedir.

XSchema
yDTDs
Validando
XML

Paraellosepuedenusardosherramientas:DTD,odatatypedictionnary,obienXSchema,elequivalenteen
XML.UnXSchemadescribelasintaxiscorrectadeundocumentoXML.Enelcasodelosdocumentosquehemosvisto
hastaestemomento,hayqueseguirunaseriedepasosparacrearunXMLSchema.Laformamsfcildehacerloes
usandoalgunautilidadgeneradora,talcomoDTDGenerator,quecreaunDTDtalcomoelsiguiente(ligeramente
retocado):
<!ELEMENThabitacion(mueble+,puerta+)>
<!ATTLISThabitacionidNMTOKEN#REQUIRED>
<!ELEMENTmicasa(habitacion+)>
<!ELEMENTmueble(#PCDATA)>
<!ELEMENTpuertaEMPTY>
<!ATTLISTpuertaaNMTOKEN#REQUIRED>
EsteDTDsepuedeusarparavalidarlosficherosXMLanteriores,aunqueusaremosXSchemamsadelante.Lo
queindicaesqueunahabitaciontieneunoovariosmuebles,yunaovariaspuertas(queseindicacon+)asuvez,
micasapuedetenerunaomshabitaciones,ycadaunodeloselementospuedentenerlosatributosqueseindican
conlasentenciaATTLIST.Comosepuedever,nosetratadeXML,aunqueseleparezca.Poreso,usandounapequea
utilidadescritaenPerlllamadadtd2xsd.plsepuedeconvertiraXSchema(elresultadoestenmicasa.xsd,aunque,
comoenelcasoanteriorhemostenidoqueretocaralgunacosilla):
<schema
xmlns='http://www.w3.org/2000/10/XMLSchema'
targetNamespace='http://www.w3.org/namespace/'
xmlns:t='http://www.w3.org/namespace/'>
<elementname='habitacion'>
<complexType>
<sequence>
<elementref='t:mueble'maxOccurs='unbounded'/>
<elementref='t:puerta'maxOccurs='unbounded'/>
</sequence>
<attributename='id'type='NMTOKEN'use='required'/>
</complexType>
</element>
<elementname='micasa'>
<complexType>
<sequence>
<elementref='t:habitacion'maxOccurs='unbounded'/>
</sequence>
</complexType>
</element>
<elementname='mueble'type="string"/>
<elementname='puerta'>
<complexType>
<attributename='a'type='NMTOKEN'use='required'/>
</complexType>
</element>
</schema>
Estedocumentodeclaraunespaciodenombrespordefectoenlaprimeralnea,queeselquecorrespondea
losXMLSchemasesoquieredecirque,sinoseusaningnprefijo,loselementospertenecernaeseespaciode
nombres.Tambindeclaraunespaciodenombres"objetivo"(targetNamespace),queserelqueseestvalidando,yun
prefijoparaelmismo,t.
Acontinuacin,sedeclarantodosloselementos,usando,comoesnatural,element.Loselementospuedenser
tipossimples(talcomoenestecasoloesmueble),ocomplejos(todoslosdems).Enelcasodelelementosimple,
bastadeclarareltipo,enestecaso,unacadenaostring.
Loselementoscomplejossonlosqueincluyendiferenteselementosanidados(quesedeclaranconsequence),
http://geneura.ugr.es/~jmerelo/xml/

5/7

28/10/2015

TutorialdeXML

atributos(attribute).Paracadaelementoquepuedeaparecerdentrodeunelementocomplejo,sedeclaraelnmero
mnimoymximodevecesquedebeopuedeaparecer((min|max)Occurs).Porejemplo,siqueremosqueencada
habitacihayaalmenosunapuerta(porquesino,avercmovasaentrar,listo),sepuedeindicaras:<element
ref='t:puerta'minOccurs='1'maxOccurs='unbounded'/>,y,evidentemente,aquelementoserefierecomosonelementos
delespacio"target",seusaelprefijot.Paralosatributos,seindicasisonobligatoriosmedianteelatributouse,yde
qutiposon.
Sinembargo,esteSchema,comoestgeneradoautomticamente,puedesimplificarse.Especialmente,se
puedensustituirreferencias(indicadasconelatributoref)aotroselementosconloselementosens.Elcdigo
quedaradeestaforma:
<schemaxmlns='http://www.w3.org/2001/XMLSchema'>
<elementname='micasa'>
<complexType>
<sequence>
<elementname='habitacion'minOccurs='1'maxOccurs='unbounded'>
<complexType>
<sequence>
<elementname='mueble'type='string'maxOccurs='unbounded'/>
<elementname='puerta'maxOccurs='unbounded'>
<complexType>
<attributename='a'type='NMTOKEN'use='required'/>
</complexType>
</element>
</sequence>
<attributename='id'type='NMTOKEN'use='required'/>
</complexType>
</element>
</sequence>
</complexType>
</element>
</schema>

EsteSchemaejemplosepuedeusar,evidentemente,paravalidarlosejemplsoanteriores.Paraello,dentrodel
mismoejemplo,bastaconindicarquXSchemaoDTDeselquesiguen.Porejemplo,sepuedeaadirlosiguienteal
principio<!DOCTYPEmicasaPUBLIC"MICASA""micasa.dtd">(talcomosemuestraenelficheroej6.xml,justodespusdela
declaracindeXML,paraqueuseeseDTDparavalidar.SisequiereusarunXSchema,hayalgunasformasno
estndar(quesesuelenusarconlosXSchematadeMicrosoft),perolaformaestndaresincluirunaseriede
atributosenlaetiquetaraz,deestaforma:
<micasaxmlns:xsi='http://www.geneura.org/micasa'
xsi:noNamespaceSchemaLocation='micasa.xsd'>
Paraanalizareldocumentoyvalidarloalavez,hayqueirsealaltimaversindeXerces,la2laprimerano
lehacemuchocasoalosXSchemas:
javadom.Writer
/donde/sea/xerces2_0_2/xercesImpl.jar:
/donde/sea/xerces2_0_2/xercesSamples.jar:
/donde/sea/xerces2_0_2/xmlParserAPIs.jardom.Writer
vsej7.xml
EncasodequehayaalgnerrorenelSchemaoenelXML,elanalizadorloindicara.
Paraterminar,sepuedeecharunvistazoaxml.com,dondehayunexcelentetutorialsobrecmocomenzara
usarlosXMLSchemas.
Ejercicios3
1.DisearunXSchemaparaundocumentoXMLquedescribaunaquiniela,incluyendoresultados.Tenerencuenta
queunaquinielatiene15partidosslo.HacerundocumentoXMLquesigaeseXMLSchema,yvalidarlousando
Xerces2oalgnotroparserconvalidacin.

6BibliografayenlacesrelacionadosconXML
LibrosrelacionadosconXML

Paraempezar,ycomocasisiempre,unlibrodeO'Reilly:LearningXMLbyErikT.Ray(2ndEdition),unlibrointroductorio,de350
pginas,queincluyelosconceptosbsicos:etiquetas,enlaces,modelosdedocumento,ytransformaciones,incluyendounpocode
programacin.tilparaquiennohatenidosuficienteconestetutorial,yquiereirunpocomsall.

http://geneura.ugr.es/~jmerelo/xml/

6/7

28/10/2015

TutorialdeXML

XMLBible(2ndEdition)deElliotteRustyHarold,laBibliadeXML,yaensusegundaedicin,esunlibromuchomsextenso,con
muchasmspginas,quedescribeconmsprofundidadcadaunodelosreinosdelmundoXML:DTDs,RDF,XSLT,CSS,yalgunas
aplicacionesdeXMLcomoVMLyXHTML.Recomendablesiellibroanteriorsequedapequeo,ocomolibrodereferenciaenXML.

SitrabajasenPerl,acabadepublicarsePerl&XML(O'ReillyPerl)byErikT.Ray,JasonMcIntosh,tambindeO'Reilly.Tratadetodoslos
mdulosqueseusanparatrabajarconXMLenPerl,poniendounpocodeordeneneltema.Tambinincluyemdulosunpocoms
avanzados,comoSOAP::Lite.

SitrabajasenJava,unlibroexcelenteesJava&XML,2ndEdition:SolutionstoRealWorldProblems,deBrettMcLaughlin,tambinde
O'Reilly.TratadetodotipodelibrerasparatrabajarconJavayXML,yacabadeactualizarseasusegundaedicin.Inclusoaunqueno
sepasJava,puedeservirdeintroduccinaambos.TambinhabladecomotratarconXMLdesdeJSPsoservlets,ydecmousarhojasde
estiloXSLT.

UnaseriedetutorialesencastellanodeXML:eltutorialdeJaviGarcaCastellano,unaexcelenteintroduccin,
quecubreXMLsinvalidar,DTDs,espaciosdenombresyelmodelodeobjectosdedocumento.Tambindentrode
nuestroservidor,MaribelGarcahaceunaintroduccinalosconceptosgeneralesdeXML.Enotrositio,podemos
encontrarunbrevetutorialdeAlfredoReino,queincideenlacreacindedocumentosXML,y,finalmente,una
traduccinalcastellanodelaespecificacindeXML.Programacion.netalojatambinuntutorialdeXML.
EnlauniversidadCarlosIIIdeMadridsealojaXMLES,quecontieneinformacindiversa,proyectosbasados
enXML,ydiversostutoriales.Soncasiunoshistricos,conmsde2aos.Finalmente,sinecesitasayuda,podis
acudiralalistadecorreoxmlesdeinformaticos.biz.
JuanJulianMereloGuervos
Lastmodified:WedNov1010:43:15CET2004

http://geneura.ugr.es/~jmerelo/xml/

7/7