<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://manuais.iessanclemente.net/index.php?action=history&amp;feed=atom&amp;title=Tipos_complexos</id>
	<title>Tipos complexos - Historial de revisiones</title>
	<link rel="self" type="application/atom+xml" href="https://manuais.iessanclemente.net/index.php?action=history&amp;feed=atom&amp;title=Tipos_complexos"/>
	<link rel="alternate" type="text/html" href="https://manuais.iessanclemente.net/index.php?title=Tipos_complexos&amp;action=history"/>
	<updated>2026-10-22T06:43:38Z</updated>
	<subtitle>Historial de revisiones de esta página en la wiki</subtitle>
	<generator>MediaWiki 1.46.2</generator>
	<entry>
		<id>https://manuais.iessanclemente.net/index.php?title=Tipos_complexos&amp;diff=52339&amp;oldid=prev</id>
		<title>Epl en 12:11 16 ene 2015</title>
		<link rel="alternate" type="text/html" href="https://manuais.iessanclemente.net/index.php?title=Tipos_complexos&amp;diff=52339&amp;oldid=prev"/>
		<updated>2015-01-16T12:11:37Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nueva&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Tipos complexos ==&lt;br /&gt;
&lt;br /&gt;
Os elementos complexos conteñen outros elementos ou atributos.&lt;br /&gt;
&lt;br /&gt;
=== Elementos XSD ===&lt;br /&gt;
&lt;br /&gt;
==== Que é un elemento complexo? ====&lt;br /&gt;
&lt;br /&gt;
Un elemento complexo é un elemento de XML que contén outros elementos e/ou atributos.&lt;br /&gt;
&lt;br /&gt;
Hai catro clases de elementos complexos:&lt;br /&gt;
* elementos baleiros (con atributos)&lt;br /&gt;
* elementos que conteñen soamente outros elementos&lt;br /&gt;
* elementos que conteñen soamente texto (con atributos)&lt;br /&gt;
* elementos que conteñen tanto outros elementos como texto&lt;br /&gt;
&lt;br /&gt;
NOTA: Cada  un destes elementos pode conter atributos tamén.&lt;br /&gt;
&lt;br /&gt;
==== Exemplos de elementos complexos ====&lt;br /&gt;
&lt;br /&gt;
Un elemento de XML complexo, &amp;quot;produto&amp;quot;, o cal está baleiro:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;produto pid=&amp;quot;1345&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un elemento de XML complexo, &amp;quot;empregado&amp;quot;, o cal contén só outros elementos:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;empregado&amp;gt;&lt;br /&gt;
  &amp;lt;nome&amp;gt;Marta&amp;lt;/nome&amp;gt;&lt;br /&gt;
  &amp;lt;apelidos&amp;gt;Pérez&amp;lt;/apelidos&amp;gt;&lt;br /&gt;
&amp;lt;/empregado&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un elemento de XML complexo, &amp;quot;comida&amp;quot;, o cal contén soamente texto:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;comida type=&amp;quot;postre&amp;quot;&amp;gt;Xeado de vainilla&amp;lt;/comida&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un elemento de XML complexo, &amp;quot;descricion&amp;quot; o cal contén ambos elementos e texto:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;descricion&amp;gt;&lt;br /&gt;
Sucedeu en &amp;lt;data lang=&amp;quot;spanish&amp;quot;&amp;gt;03.03.99&amp;lt;/data&amp;gt; ....&lt;br /&gt;
&amp;lt;/descricion&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Como definir un elemento complexo ====&lt;br /&gt;
&lt;br /&gt;
Mira o seguinte elemento XML  &amp;quot;empregado&amp;quot;, que contén outros elementos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;empregado&amp;gt;&lt;br /&gt;
  &amp;lt;nome&amp;gt;Marta&amp;lt;/nome&amp;gt;&lt;br /&gt;
  &amp;lt;apelidos&amp;gt;Pérez&amp;lt;/apelidos&amp;gt;&lt;br /&gt;
&amp;lt;/empregado&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos definir un elemento complexo nun XML Schema de dous xeitos diferentes:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1.-&amp;#039;&amp;#039;&amp;#039; O elemento &amp;quot;empregado&amp;quot; pode ser declarado directamente nomeando o elemento, así:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xs:element name=&amp;quot;empregado&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
      &amp;lt;xs:element name=&amp;quot;nome&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;xs:element name=&amp;quot;apelidos&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
&amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se empregamos este método soamente o elemento &amp;quot;empregado&amp;quot; poderá usar este tipo complexo. Fíxate que os elementos fillos nome e apelidos están dentro do indicador &amp;#039;&amp;#039;&amp;#039;&amp;lt;sequence&amp;gt;&amp;#039;&amp;#039;&amp;#039;. Isto quere dicir que os elementos fillos deben aparecer na mesma orde na que foron declarados.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;2.-&amp;#039;&amp;#039;&amp;#039; O elemento empregado pode ter un atributo que faga referencia ó nome do tipo complexo utilizado:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xs:element name=&amp;quot;empregado&amp;quot; type=&amp;quot;infopersoal&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xs:complexType name=&amp;quot;infopersoal&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;nome&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;apelidos&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
&amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si usamos este método, podemos permitir que outros elementos fagan referencia ó tipo complexo, por exemplo: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xs:element name=&amp;quot;empregado&amp;quot; type=&amp;quot;infopersoal&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;xs:element name=&amp;quot;estudante&amp;quot; type=&amp;quot;infopersoal&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;xs:element name=&amp;quot;profesor&amp;quot; type=&amp;quot;infopersoal&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xs:complexType name=&amp;quot;infopersoal&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;nome&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;apelidos&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
&amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Incluso podemos crear outro elemento complexo baseado no elemento complexo anterior para así engadir máis elementos, por exemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xs:element name=&amp;quot;empregado&amp;quot; type=&amp;quot;infopersoalcompleta&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xs:complexType name=&amp;quot;infopersoal&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;nome&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;apelidos&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
&amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xs:complexType name=&amp;quot;infopersoalcompleta&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:complexContent&amp;gt;&lt;br /&gt;
    &amp;lt;xs:extension base=&amp;quot;infopersoal&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element name=&amp;quot;direccion&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element name=&amp;quot;cidade&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element name=&amp;quot;pais&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:complexContent&amp;gt;&lt;br /&gt;
&amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Elementos baleiros XSD ===&lt;br /&gt;
&lt;br /&gt;
Un elemento baleiro XSD non pode ter contido, soamente atributos.&lt;br /&gt;
&lt;br /&gt;
Exemplo de elemento XML baleiro:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;produto prodid=&amp;quot;1345&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
É posible declarar o elemento &amp;quot;produto&amp;quot; da seguinte maneira: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xs:element name=&amp;quot;produto&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;xs:attribute name=&amp;quot;prodid&amp;quot; type=&amp;quot;xs:positiveInteger&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
&amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ou podemos darlle un nome ó tipo complexo e deixar que o elemento teña un atributo que faga referencia ó nome do tipo complexo (si usamos este método, diferentes elementos  poderán referenciar ó mesmo tipo complexo):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xs:element name=&amp;quot;produto&amp;quot; type=&amp;quot;tipopoproduto&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xs:complexType name=&amp;quot;tipopoproduto&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:attribute name=&amp;quot;prodid&amp;quot; type=&amp;quot;xs:positiveInteger&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Soamente elementos XSD ===&lt;br /&gt;
&lt;br /&gt;
Un tipo complexo &amp;quot;elements-only&amp;quot; contén un elemento que contén soamente outros elementos.&lt;br /&gt;
&lt;br /&gt;
Por exemplo temos un elemento &amp;quot;persoa&amp;quot; que contén soamente outros elementos:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;persoa&amp;gt;&lt;br /&gt;
  &amp;lt;nome&amp;gt;Emilio&amp;lt;/nome&amp;gt;&lt;br /&gt;
  &amp;lt;apelidos&amp;gt;Martínez&amp;lt;/apelidos&amp;gt;&lt;br /&gt;
&amp;lt;/persoa&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Poderemos definir nun schema XML  &amp;quot;persoa&amp;quot; do seguinte xeito:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xs:element name=&amp;quot;persoa&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
      &amp;lt;xs:element name=&amp;quot;nome&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;xs:element name=&amp;quot;apelidos&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
&amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NOTA: O tag &amp;lt;sequence&amp;gt; indica que os elementos definidos (&amp;quot;nome&amp;quot; e &amp;quot;apelidos&amp;quot;) deberán aparecer na orde indicada polo elemento &amp;quot;persoa&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ou tamén poderíamos dar un nome a ese tipo complexo para poder emprega-lo noutros elementos. Por exemplo:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xs:element name=&amp;quot;persoa&amp;quot; type=&amp;quot;tipopersoa&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xs:complexType name=&amp;quot;tipopersoa&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;nome&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;apelidos&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
&amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Soamente texto XSD ===&lt;br /&gt;
&lt;br /&gt;
Un elemento complexo &amp;quot;text-only&amp;quot; pode conter texto e atributos.&lt;br /&gt;
&lt;br /&gt;
Este tipo contén soamente contidos sinxelos (texto e atributos). Cando empregamos &amp;#039;&amp;#039;&amp;#039;simpleContent&amp;#039;&amp;#039;&amp;#039; deberemos definir unha extensión ou restrición dentro do elemento, por exemplo: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xs:element name=&amp;quot;algunnome&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
      &amp;lt;xs:extension base=&amp;quot;tipobase&amp;quot;&amp;gt;&lt;br /&gt;
        ....&lt;br /&gt;
        ....&lt;br /&gt;
      &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
&amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ou&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xs:element name=&amp;quot;algunnome&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
      &amp;lt;xs:restriction base=&amp;quot;tipobase&amp;quot;&amp;gt;&lt;br /&gt;
        ....&lt;br /&gt;
        ....&lt;br /&gt;
      &amp;lt;/xs:restriction&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
&amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;NOTA&amp;#039;&amp;#039;&amp;#039;: Poderemos empregar a restrición/extensión para expandir ou limitar o tipo base para o elemento.&lt;br /&gt;
&lt;br /&gt;
Exemplo de elemento XML &amp;quot;numerozapatos&amp;quot; que contén soamente texto:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;numerozapatos pais=&amp;quot;france&amp;quot;&amp;gt;35&amp;lt;/numerozapatos &amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O seguinte exemplo declara un tipo complexo &amp;quot;numerozapatos&amp;quot;. O contido está definido como un integer e o elemento numerozapatos tamén contén o atributo &amp;quot;pais&amp;quot;:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xs:element name=&amp;quot;numerozapatos &amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
      &amp;lt;xs:extension base=&amp;quot;xs:integer&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:attribute name=&amp;quot;pais&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
&amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Incluso poderíamo sdarlle ao tipo complexo un nome e deixar que &amp;quot;numerozapatos&amp;quot; teña un atributo que faga referencia a ese tipo complexo (deste xeito varios elementos poderían facer referencia ó mesmo tipo complexo):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xs:element name=&amp;quot;numerozapatos&amp;quot; type=&amp;quot;tipozapatos&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xs:complexType name=&amp;quot;tipozapatos&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
    &amp;lt;xs:extension base=&amp;quot;xs:integer&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;xs:attribute name=&amp;quot;pais&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
&amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Contido misturado XSD ===&lt;br /&gt;
&lt;br /&gt;
Un elemento de tipo contido misturado pode ter atributos, elementos e texto.&lt;br /&gt;
&lt;br /&gt;
Exemplo de elemento XML &amp;quot;carta&amp;quot; que contén tanto texto como outros elementos:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;carta&amp;gt;&lt;br /&gt;
 Estimado/a &amp;lt;nome&amp;gt;John Smith&amp;lt;/nome&amp;gt;.&lt;br /&gt;
  O seu pedido &amp;lt;numpedido&amp;gt;1032&amp;lt;/numpedido&amp;gt;&lt;br /&gt;
  será entregado &amp;lt;dataentrega&amp;gt;2011-01-19&amp;lt;/dataentrega&amp;gt;.&lt;br /&gt;
&amp;lt;/carta&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O seguinte schema declara o elemento &amp;quot;carta&amp;quot;:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xs:element name=&amp;quot;carta&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:complexType mixed=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
      &amp;lt;xs:element name=&amp;quot;nome&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;xs:element name=&amp;quot;numpedido&amp;quot; type=&amp;quot;xs:positiveInteger&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;xs:element name=&amp;quot;dataentrega&amp;quot; type=&amp;quot;xs:date&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
&amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;NOTA:&amp;#039;&amp;#039;&amp;#039; Para permitir que poidamos introducir caracteres entre os elementos fillo, deberemos por atributo &amp;quot;mixed&amp;quot; a &amp;quot;true&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Tamén poderíamos darlle ó tipo complexo un nome e deixar o elemento &amp;quot;carta&amp;quot; cun atributo que faga referencia a ese tipo complexo.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xs:element name=&amp;quot;carta&amp;quot; type=&amp;quot;tipocarta&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xs:complexType name=&amp;quot;tipocarta&amp;quot; mixed=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;nome&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;numpedido&amp;quot; type=&amp;quot;xs:positiveInteger&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;dataentrega&amp;quot; type=&amp;quot;xs:date&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
&amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Indicadores XSD ===&lt;br /&gt;
&lt;br /&gt;
Podemos controlar COMO van ser empregados os elementos nos documentos, empregando os indicadores.&lt;br /&gt;
&lt;br /&gt;
Hai 7 indicadores:&lt;br /&gt;
Indicadores de orde:&lt;br /&gt;
* All&lt;br /&gt;
* Choice&lt;br /&gt;
* Sequence&lt;br /&gt;
&lt;br /&gt;
Indicadores de ocorrencias:&lt;br /&gt;
* maxOccurs&lt;br /&gt;
* minOccurs&lt;br /&gt;
&lt;br /&gt;
Indicadores de Grupo:&lt;br /&gt;
* Group name&lt;br /&gt;
* attributeGroup name&lt;br /&gt;
&lt;br /&gt;
==== Indicadores de orde ====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Indicador All&amp;#039;&amp;#039;&amp;#039;: O indicador &amp;quot;All&amp;quot; especifica que os elementos fillos poden aparecer en calquera orde e que cada elemento fillo debe aparecer soamente unha vez:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xs:element name=&amp;quot;persoa&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;xs:all&amp;gt;&lt;br /&gt;
      &amp;lt;xs:element name=&amp;quot;nome&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;xs:element name=&amp;quot;apelidos&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:all&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
&amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;NOTA&amp;#039;&amp;#039;&amp;#039;: Cando empregamos o indicador &amp;lt;all&amp;gt; podemos establecer &amp;lt;minOccurs&amp;gt; a 0 ou 1 e &amp;lt;maxOccurs&amp;gt; soamente a 1.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Indicador Choice&amp;#039;&amp;#039;&amp;#039;: O indicador &amp;lt;choice&amp;gt; especifica que pode aparecer tanto un elemento fillo coma o outro:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xs:element name=&amp;quot;persoa&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;xs:choice&amp;gt;&lt;br /&gt;
      &amp;lt;xs:element name=&amp;quot;empregado&amp;quot; type=&amp;quot;empregado&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;xs:element name=&amp;quot;membro&amp;quot; type=&amp;quot;membro&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:choice&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
&amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Indicador Sequence&amp;#039;&amp;#039;&amp;#039;: O indicador &amp;lt;sequence&amp;gt; especifica que os elementos fillo deben aparecer na orde especificada:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xs:element name=&amp;quot;persoa&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
      &amp;lt;xs:element name=&amp;quot;nome&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;xs:element name=&amp;quot;apelidos&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
&amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Indicadores de ocorrencia ====&lt;br /&gt;
&lt;br /&gt;
Os indicadores de ocorrencia úsanse para definir cantas veces pode aparecer un elemento.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;NOTA&amp;#039;&amp;#039;&amp;#039;: Para os indicadores &amp;quot;Order&amp;quot; e &amp;quot;Group&amp;quot; (any, all, choice, sequence, group name e group reference) o valor por defecto para maxOccurs e minOccurs é 1.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Indicador maxOccurs&amp;#039;&amp;#039;&amp;#039;: O indicador &amp;lt;maxOccurs&amp;gt; especifica o número máximo de veces que pode aparecer un elemento:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xs:element name=&amp;quot;persoa&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
      &amp;lt;xs:element name=&amp;quot;nome_completo&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;xs:element name=&amp;quot;alcumes&amp;quot; type=&amp;quot;xs:string&amp;quot; maxOccurs=&amp;quot;10&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
&amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No exemplo anterior indícase que o elemento &amp;quot;alcumes&amp;quot; pode aparecer un mínimo de unha vez (o valor por defecto para minOccurs é 1) é un máximo de 10 veces no elemento &amp;quot;persoa&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Indicador minOccurs&amp;#039;&amp;#039;&amp;#039;: O indicador &amp;lt;minOccurs&amp;gt; especifica o número mínimo de veces que pode aparecer un elemento:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xs:element name=&amp;quot;persoa&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
      &amp;lt;xs:element name=&amp;quot;nome_completo&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;xs:element name=&amp;quot;alcumes&amp;quot; type=&amp;quot;xs:string&amp;quot;&lt;br /&gt;
      maxOccurs=&amp;quot;10&amp;quot; minOccurs=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
&amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O exemplo indica que o elemento &amp;lt;alcumes&amp;gt; pode aparecer un mínimo de 0 veces e un máximo de 10 veces no elemento &amp;quot;persoa&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;NOTA&amp;#039;&amp;#039;&amp;#039;: Para permitir que un elemento apareza un número ilimitado de veces, use maxOccurs=&amp;quot;unbounded&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Indicadores de grupo ====&lt;br /&gt;
&lt;br /&gt;
Os indicadores de grupo úsanse para definir conxuntos relacionados de elementos.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Grupos de elementos&amp;#039;&amp;#039;&amp;#039;: Os &amp;quot;Element groups&amp;quot; defínense coa declaración:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xs:group name=&amp;quot;nomedegrupo&amp;quot;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/xs:group&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Teremos que definir dentro de declaración group un elemento tipo all, choice ou sequence. O seguinte exemplo define un grupo chamado &amp;quot;grupopersoas&amp;quot;, cun grupo de elementos que deben aparecer na orde exacta:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xs:group name=&amp;quot;grupopersoas&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;nome&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;apelidos&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;nacemento&amp;quot; type=&amp;quot;xs:date&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
&amp;lt;/xs:group&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cando xa temos definido un grupo podemos referencia-lo noutra definición, por exemplo:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xs:group name=&amp;quot;grupopersoas&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;nome&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;apelidos&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;nacemento&amp;quot; type=&amp;quot;xs:date&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
&amp;lt;/xs:group&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xs:element name=&amp;quot;persoa&amp;quot; type=&amp;quot;infopersoa&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xs:complexType name=&amp;quot;infopersoa&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;xs:group ref=&amp;quot;grupopersoas&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element name=&amp;quot;pais&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
&amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Grupos de Atributos&amp;#039;&amp;#039;&amp;#039;: Os &amp;quot;Attribute groups&amp;quot; defínense coa declaración:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xs:attributeGroup name=&amp;quot;nomegrupo&amp;quot;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/xs:attributeGroup&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O seguinte exemplo define un attribute group chamado &amp;quot;grupoatributospersoas&amp;quot;:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xs:attributeGroup name=&amp;quot;grupoatributospersoas&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:attribute name=&amp;quot;nome&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xs:attribute name=&amp;quot;apelidos&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xs:attribute name=&amp;quot;nacemento&amp;quot; type=&amp;quot;xs:date&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/xs:attributeGroup&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unha vez que xa temos definido o grupo de atributos, podemos referencialo noutra definición como:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xs:attributeGroup name=&amp;quot;grupoatributospersoas&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:attribute name=&amp;quot;nome&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xs:attribute name=&amp;quot;apelidos&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xs:attribute name=&amp;quot;nacemento&amp;quot; type=&amp;quot;xs:date&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/xs:attributeGroup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xs:element name=&amp;quot;persoa&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;xs:attributeGroup ref=&amp;quot;grupoatributospersoas&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
&amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Elemento &amp;lt;any&amp;gt; XSD ===&lt;br /&gt;
&lt;br /&gt;
O elemento &amp;lt;any&amp;gt; permite extender o documento XML con elementos non especificados no Schema.&lt;br /&gt;
&lt;br /&gt;
O seguinte exemplo é un fragmento dun esquema chamado &amp;quot;familia.xsd&amp;quot; que amosa a declaración para o elemento &amp;quot;persoa&amp;quot;. Empregando o elemento &amp;lt;any&amp;gt; podemos extender (despois dos &amp;lt;apelidos&amp;gt;) o contido de &amp;quot;persoa&amp;quot; con calquera elemento:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xs:element name=&amp;quot;persoa&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
      &amp;lt;xs:element name=&amp;quot;nome&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;xs:element name=&amp;quot;apelidos&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;xs:any minOccurs=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
&amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora queremos extender o elemento &amp;quot;persoa&amp;quot; un elemento &amp;quot;fillos&amp;quot;. Neste caso poderemos facelo aínda que o autor do schema nunca declarara un elemento &amp;quot;fillos&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Mira o exemplo &amp;quot;fillos.xsd&amp;quot;:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;ISO-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&lt;br /&gt;
targetNamespace=&amp;quot;http://www.iessanclemente.net&amp;quot;&lt;br /&gt;
xmlns=&amp;quot;http://www.iessanclemente.net&amp;quot;&lt;br /&gt;
elementFormDefault=&amp;quot;qualified&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xs:element name=&amp;quot;fillos&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
      &amp;lt;xs:element name=&amp;quot;nomefillo&amp;quot; type=&amp;quot;xs:string&amp;quot;&lt;br /&gt;
      maxOccurs=&amp;quot;unbounded&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
&amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O seguinte arquivo &amp;quot;familia.xml&amp;quot; emprega compoñentes dos dous diferentes esquemas; &amp;quot;familia.xsd&amp;quot; e &amp;quot;fillos.xsd&amp;quot;:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;ISO-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;persoas xmlns=&amp;quot;http://www.microsoft.com&amp;quot;&lt;br /&gt;
xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&lt;br /&gt;
xsi:SchemaLocation=&amp;quot;http://www.microsoft.com familia.xsd&lt;br /&gt;
http://www.iessanclemente.net fillos.xsd&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;persoa&amp;gt;&lt;br /&gt;
  &amp;lt;nome&amp;gt; Patricia&amp;lt;/nome&amp;gt;&lt;br /&gt;
  &amp;lt;apelidos&amp;gt;Conde&amp;lt;/apelidos&amp;gt;&lt;br /&gt;
  &amp;lt;fillos&amp;gt;&lt;br /&gt;
    &amp;lt;nomefillo&amp;gt;Lucia&amp;lt;/nomefillo&amp;gt;&lt;br /&gt;
  &amp;lt;/fillos&amp;gt;&lt;br /&gt;
&amp;lt;/persoa&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;persoa&amp;gt;&lt;br /&gt;
  &amp;lt;nome&amp;gt;Irene&amp;lt;/nome&amp;gt;&lt;br /&gt;
  &amp;lt;apelidos&amp;gt;Sainz&amp;lt;/apelidos&amp;gt;&lt;br /&gt;
&amp;lt;/persoa&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/persoas&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O arquivo xml anterior é valido por que o esquema &amp;quot;familia.xsd&amp;quot; permítenos extender o elemento &amp;quot;persoa&amp;quot; con elementos opcionais despois do elemento &amp;quot;apelidos&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Os elementos &amp;lt;any&amp;gt; e &amp;lt;anyAttribute&amp;gt; empréganse para facer EXTENSIBLES os documentos. Permiten conter ós documentos elementos adicionais que non están declarados no Schema XML principal.&lt;br /&gt;
&lt;br /&gt;
=== Elemento &amp;lt;anyAttribute&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
O elemento &amp;lt;anyAttribute&amp;gt; permítenos extender o documento XML con atributos non especificados no Schema.&lt;br /&gt;
&lt;br /&gt;
O seguinte exemplo é un fragmento dun Schema XML chamado &amp;quot;familia.xsd&amp;quot;. Amosa a declaración do elemento &amp;lt;persoa&amp;gt;. Empregando o elemento &amp;lt;anyAttribute&amp;gt; podemos engadir calquera número de atributos ó elemento &amp;quot;persoa&amp;quot;:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xs:element name=&amp;quot;persoa&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
      &amp;lt;xs:element name=&amp;quot;nome&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;xs:element name=&amp;quot;apelidos&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;xs:anyAttribute/&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
&amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora queremos extender o elemento &amp;quot;persoa&amp;quot; cun atributo &amp;quot;xenero&amp;quot;. &lt;br /&gt;
Mira o código do schema &amp;quot;atributos.xsd&amp;quot;:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;ISO-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&lt;br /&gt;
targetNamespace=&amp;quot;http://www.iessanclemente.net&amp;quot;&lt;br /&gt;
xmlns=&amp;quot;http://www.iessanclemente.net&amp;quot;&lt;br /&gt;
elementFormDefault=&amp;quot;qualified&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xs:attribute name=&amp;quot;xenero&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:simpleType&amp;gt;&lt;br /&gt;
    &amp;lt;xs:restriction base=&amp;quot;xs:string&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;xs:pattern value=&amp;quot;home|muller&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:restriction&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:simpleType&amp;gt;&lt;br /&gt;
&amp;lt;/xs:attribute&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O seguinte arquivo XML (chamado &amp;quot;familiares.xsd&amp;quot;) emprega compoñentes dos dous diferentes schemas; &amp;quot;familia.xsd&amp;quot; e &amp;quot;atributos.xsd&amp;quot;:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;ISO-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;persoas xmlns=&amp;quot;http://www.microsoft.com&amp;quot;&lt;br /&gt;
xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&lt;br /&gt;
xsi:SchemaLocation=&amp;quot;http://www.microsoft.com familia.xsd&lt;br /&gt;
http://www.iessanclemente.net attributos.xsd&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;persoa xenero=&amp;quot;muller&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;nome&amp;gt;Raquel&amp;lt;/nome&amp;gt;&lt;br /&gt;
  &amp;lt;apelidos&amp;gt;López&amp;lt;/apelidos&amp;gt;&lt;br /&gt;
&amp;lt;/persoa&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;persoa xenero=&amp;quot;home&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;nome&amp;gt;Martín&amp;lt;/nome&amp;gt;&lt;br /&gt;
  &amp;lt;apelidos&amp;gt;Garcia&amp;lt;/apelidos&amp;gt;&lt;br /&gt;
&amp;lt;/persoa&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/persoas&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O arquivo anterior é valido por que emprega o schema &amp;quot;familia.xsd&amp;quot; que nos permite engadir un atributo ó elemento &amp;quot;persoa&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Os elementos &amp;lt;any&amp;gt; e &amp;lt;anyAttribute&amp;gt; empréganse para facer EXTENSIBLES os documentos. Permiten conter ós documentos elementos adicionais que non están declarados no Schema XML principal.&lt;br /&gt;
&lt;br /&gt;
=== Elemento Substitution XSD ===&lt;br /&gt;
&lt;br /&gt;
Nos schemas XML podemos substituír un elemento por outro.&lt;br /&gt;
&lt;br /&gt;
Por exemplo digamos que temos dous países diferentes: Francia e Italia. Poderíamos ter a posibilidade de deixar que o usuario escolla cando quere empregar nomes de elementos pertencentes a Francia ou a Italia no documento XML.&lt;br /&gt;
&lt;br /&gt;
Para solucionar este problema, poderíamos definir un substitutionGroup no schema XML. Primeiro teríamos que declarar o elemento cabeceira e logo declarar outros elementos que poderían ser substituídos polo elemento cabeceira.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xs:element name=&amp;quot;nome&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;xs:element name=&amp;quot;nomen&amp;quot; substitutionGroup=&amp;quot;nome&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xs:element name=&amp;quot;nome&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;xs:element name=&amp;quot;nomen&amp;quot; substitutionGroup=&amp;quot;nome&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xs:complexType name=&amp;quot;infocomprador&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element ref=&amp;quot;nome&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
&amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xs:element name=&amp;quot;acheteur&amp;quot; type=&amp;quot;infocomprador&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;xs:element name=&amp;quot;acquirente&amp;quot; substitutionGroup=&amp;quot;acheteur&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un documento XML válido en base ó schema anterior podería ser:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;acheteur&amp;gt;&lt;br /&gt;
  &amp;lt;nome&amp;gt;Pedro Garcia&amp;lt;/nome&amp;gt;&lt;br /&gt;
&amp;lt;/acheteur&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ou ben:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;acquirente&amp;gt;&lt;br /&gt;
  &amp;lt;nomen&amp;gt;Pedro Garcia&amp;lt;/nomen&amp;gt;&lt;br /&gt;
&amp;lt;/acquirente&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Elemento de substitución block ====&lt;br /&gt;
&lt;br /&gt;
Para evitar que outros elementos substitúan a outro elemento especificado, empregaremos o atributo &amp;quot;block&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xs:element name=&amp;quot;nome&amp;quot; type=&amp;quot;xs:string&amp;quot; block=&amp;quot;substitution&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mira o seguinte fragmento XML:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xs:element name=&amp;quot;nome&amp;quot; type=&amp;quot;xs:string&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;xs:element name=&amp;quot;nomen&amp;quot; substitutionGroup=&amp;quot;nome&amp;quot;/&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;xs:complexType name=&amp;quot;infocomprador&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;xs:element ref=&amp;quot;nome&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
&amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;xs:element name=&amp;quot;acheteur&amp;quot; type=&amp;quot;infocomprador&amp;quot; block=&amp;quot;substitution&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;xs:element name=&amp;quot;acquirente&amp;quot; substitutionGroup=&amp;quot;acheteur&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un documento válido podería ser:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;acheteur&amp;gt;&lt;br /&gt;
  &amp;lt;nome&amp;gt;Pedro Garcia&amp;lt;/nome&amp;gt;&lt;br /&gt;
&amp;lt;/acheteur&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pero o seguinte documento xa NON sería válido:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;acquirente&amp;gt;&lt;br /&gt;
  &amp;lt;nomen&amp;gt;Pedro Garcia&amp;lt;/nomen&amp;gt;&lt;br /&gt;
&amp;lt;/acquirente&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Epl</name></author>
	</entry>
</feed>