<?xml version="1.0"	encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:annotation>
		<xs:documentation>
			Documento para el esquema de definición	del	formato	XML	de traspaso	de información de cartera de propiedades inmobiliarias.
		</xs:documentation>
	</xs:annotation>

	<xs:element	name="carteraPropiedades">
		<xs:annotation>
			<xs:documentation>
				Objecto	principal contenedor de	la información a traspasar.	Debe contener el identificador de empresa y	la fecha de	creación del archivo XML, 
				junto con una lista	(opcional) de las propiedades a	traspasar. Para	indicar	que	se trata de	un volcado incremental,	debe contener la fecha a partir
				de la cual se incluyen las propiedades modificadas.	En volcados	incrementales, puede también aparecer una lista	opcional de	referencias
				eliminadas desde la	fecha de actualización.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element	type="xs:NMTOKEN" name="empresa"/>
				<xs:element	name="fecha" type="xs:dateTime"/>
				<xs:element	name="fechaActualizacion" type="xs:dateTime" minOccurs="0"/>
				<xs:element	ref="listaPropiedades" minOccurs="0"/>
				<xs:element	ref="listaPropiedadesEliminadas" minOccurs="0"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>

	<xs:element	name="listaPropiedades">
		<xs:complexType>
			<xs:sequence>
				<xs:element	maxOccurs="unbounded" minOccurs="0"	ref="propiedad"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	
	<xs:element	name="listaPropiedadesEliminadas">
		<xs:complexType>
			<xs:sequence>
				<xs:element	name="referencia" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>

	<xs:element	name="propiedad">
		<xs:annotation>
			<xs:documentation>
				Objecto	principal para describir una propiedad.	
				La mayoría de los campos son opcionales	excepto: referencia, fecha,	tipoInmueble, tipoOferta, tipoOfertaExt, provincia,	localidad.
				El último campo	en la definición es	una	lista opcional de imágenes.
				También	tenemos	campos de tipo 'tipoDescripcion' para implementar campos de	tipo texto en distintos	idiomas.
			</xs:documentation>
		</xs:annotation>

		<xs:complexType>
			<xs:all>
				<xs:element	name="referencia" type="xs:string"/>
				<xs:element	name="fecha" type="xs:dateTime"/>
				<xs:element name="url"	type="xs:anyURI" minOccurs="0"/>

				<xs:element	name="tipoInmueble"	type="xs:integer"/>
				<xs:element	name="tipoInmuebleExt" type="xs:integer" minOccurs="0"/>
				<xs:element	name="tipoOferta" type="xs:integer"/>
				<xs:element	name="tipoOfertaExt" type="xs:integer" minOccurs="0"/>
				<xs:element	name="inversion" type="xs:boolean" minOccurs="0"/>
				<xs:element	name="viviendaLujo"	type="xs:boolean" minOccurs="0"/>
				<xs:element	name="comentarioPrivado" type="xs:string" minOccurs="0"/>
				<xs:element	name="descripcionPrincipal"	type="tipoDescripcion" minOccurs="0"/>
				<xs:element name="antiguedad" type="xs:integer" minOccurs="0"/>
				<xs:element	name="tipoConservacion"	type="xs:integer" minOccurs="0"/>
				<xs:element	name="amueblado" type="xs:boolean" minOccurs="0"/>
				<xs:element name="discapacitados" type="xs:boolean" minOccurs="0"/>
				<xs:element name="mascotas" type="xs:boolean" minOccurs="0"/>

				<xs:element	name="superficieUtil" type="tipoSuperficies" minOccurs="0"/>
				<xs:element	name="superficieConstruida"	type="tipoSuperficies" minOccurs="0"/>
				<xs:element	name="superficieTotal" type="tipoSuperficies" minOccurs="0"/>
				<xs:element	name="superficieTerrazas" type="tipoSuperficies" minOccurs="0"/>
				<xs:element	name="superficieSolarium" type="tipoSuperficies" minOccurs="0"/>
				<xs:element	name="tipoUnidades"	type="xs:integer" minOccurs="0"/>

				<xs:element	name="precio" type="xs:integer"	minOccurs="0"/>
				<xs:element	name="precioPorMes"	type="xs:integer" minOccurs="0"/>
				<xs:element	name="precioPorQuincena" type="xs:integer" minOccurs="0"/>
				<xs:element	name="precioPorSemana" type="xs:integer" minOccurs="0"/>
				<xs:element	name="precioPorFinde" type="xs:integer"	minOccurs="0"/>
				<xs:element	name="precioPorDia"	type="xs:integer" minOccurs="0"/>
				<xs:element	name="precioVenta" type="xs:integer" minOccurs="0"/>
				<xs:element	name="porcentajeCompra" type="xs:decimal" minOccurs="0"/>
				<xs:element	name="duracionContrato" type="xs:integer" minOccurs="0"/>
				<xs:element	name="subvencionado" type="xs:boolean" minOccurs="0"/>

				<xs:element	name="codigoPostal"	type="tipoCodigoPostal"	minOccurs="0"/>
				<xs:element	name="provincia" type="xs:normalizedString"/>
				<xs:element	name="localidad" type="xs:normalizedString"/>
				<xs:element	name="distrito"	type="xs:integer" minOccurs="0"/>
				<xs:element	name="barrio" type="xs:integer"	minOccurs="0"/>
				<xs:element	name="zona"	type="tipoDescripcion" minOccurs="0"/>
				<xs:element name="direccion" type="xs:normalizedString" minOccurs="0"/>
				<xs:element name="mostrarDireccion" type="xs:boolean" minOccurs="0"/>
				<xs:element name="mostrarLocalizacion" type="xs:boolean" minOccurs="0"/>
				<xs:element	name="tipoArea"	type="xs:integer" minOccurs="0"/>
				<xs:element	name="tipoZona"	type="xs:integer" minOccurs="0"/>
				<xs:element	name="inGolf" type="xs:boolean"	minOccurs="0"/>
				<xs:element	name="montaña" type="xs:boolean" minOccurs="0"/>
				<xs:element	name="tipoPlaya" type="xs:integer" minOccurs="0"/>
				<xs:element name="geoLocalizacion"	type="xs:normalizedString" minOccurs="0"/>

				<xs:element name="dormitorios"	type="xs:integer" minOccurs="0"/>
				<xs:element	name="baños" type="xs:integer" minOccurs="0"/>
				<xs:element name="aseos" type="xs:integer"	minOccurs="0"/>
				<xs:element name="maxPersonas" type="xs:integer"	minOccurs="0"/>
				<xs:element	name="plantas" type="xs:integer" minOccurs="0"/>
				<xs:element name="trastero" type="xs:boolean" minOccurs="0"/>
				<xs:element	name="armariosEmpotrados" type="xs:integer"	minOccurs="0"/>
				<xs:element name="placasSolares" type="xs:boolean" minOccurs="0"/>
				<xs:element name="jardines" type="xs:boolean" minOccurs="0"/>
				<xs:element	name="piscina" type="xs:boolean" minOccurs="0"/>
				<xs:element	name="plazasGaraje"	type="xs:integer" minOccurs="0"/>
				<xs:element	name="tipoGaraje" type="xs:integer"	minOccurs="0"/>
				<xs:element name="exterior" type="xs:boolean" minOccurs="0"/>
				<xs:element	name="terrazas"	type="xs:boolean" minOccurs="0"/>
				<xs:element name="chimenea" type="xs:boolean" minOccurs="0"/>
				<xs:element	name="despachos" type="xs:integer" minOccurs="0"/>
				<xs:element name="escaparates"	type="xs:integer" minOccurs="0"/>
				<xs:element	name="edificioOficinas"	type="xs:boolean" minOccurs="0"/>
				<xs:element name="diafano"	type="xs:boolean" minOccurs="0"/>
				<xs:element	name="tipoOrientacion" type="xs:integer" minOccurs="0"/>
				<xs:element	name="areasComunes"	type="tipoDescripcion" minOccurs="0"/>
				<xs:element	name="vistas" type="tipoDescripcion" minOccurs="0"/>

				<xs:element name="tipoCalefaccion"	type="xs:integer" minOccurs="0"/>
				<xs:element	name="tipoAireAcondicionado" type="xs:integer" minOccurs="0"/>
				<xs:element name="tipoAguaCaliente" type="xs:integer" minOccurs="0"/>
				<xs:element	name="cocinaAmueblada" type="xs:boolean" minOccurs="0"/>
				<xs:element name="electrodomesticos" type="xs:boolean"	minOccurs="0"/>
				<xs:element	name="antenaParabolica"	type="xs:boolean" minOccurs="0"/>
				<xs:element name="tipoPorteria" type="xs:integer" minOccurs="0"/>
				<xs:element	name="comunidad" type="xs:integer" minOccurs="0"/>
				<xs:element	name="ascensor"	type="xs:boolean" minOccurs="0"/>
				<xs:element	name="instalacionesDeportivas" type="xs:boolean" minOccurs="0"/>
				<xs:element name="cierres"	type="xs:boolean" minOccurs="0"/>
				<xs:element	name="alarma" type="xs:boolean"	minOccurs="0"/>
				<xs:element name="servicioVigilancia" type="xs:boolean" minOccurs="0"/>
				<xs:element	name="zonaAparcamiento"	type="xs:boolean" minOccurs="0"/>
				<xs:element	name="zonaExposicion" type="xs:boolean"	minOccurs="0"/>
				<xs:element name="agua" type="xs:boolean" minOccurs="0"/>
				<xs:element	name="luz" type="xs:boolean" minOccurs="0"/>
				<xs:element name="telefono" type="xs:boolean" minOccurs="0"/>
				<xs:element	name="ultimoUso" type="tipoDescripcion"	minOccurs="0"/>
				<xs:element	name="posibleUso" type="tipoDescripcion" minOccurs="0"/>
				<xs:element	name="observacionesCaracteristicas"	type="tipoDescripcion" minOccurs="0"/>

				<xs:element	name="tipoSoleria" type="xs:integer" minOccurs="0"/>
				<xs:element	name="tipoCarpinteria" type="xs:integer" minOccurs="0"/>
				<xs:element name="puertaBlindada" type="xs:boolean" minOccurs="0"/>
				<xs:element	name="cerraduraSeguridad" type="xs:boolean"	minOccurs="0"/>
				<xs:element name="tipoAcristalamiento"	type="xs:integer" minOccurs="0"/>
				<xs:element	name="tipoGas" type="xs:integer" minOccurs="0"/>
				<xs:element name="observacionesCalidades" type="tipoDescripcion" minOccurs="0"/>

				<xs:element	name="viaPrincipal"	minOccurs="0" type="xs:string"/>
				<xs:element	name="distanciaViaPrincipal" type="xs:integer" minOccurs="0"/>				  
				<xs:element	name="minutosViaPrincipal" type="xs:integer" minOccurs="0"/>	

				<xs:element	name="localidadCercana"	minOccurs="0" type="xs:string"/>
				<xs:element	name="distanciaLocalidadCercana" type="xs:integer" minOccurs="0"/>				  
				<xs:element	name="minutosLocalidadCercana" type="xs:integer" minOccurs="0"/>	
				
				<xs:element	name="aeropuerto" minOccurs="0"	type="xs:string"/>
				<xs:element	name="distanciaAeropuerto" type="xs:integer" minOccurs="0"/>				
				<xs:element	name="minutosAeropuerto" type="xs:integer" minOccurs="0"/>	  

				<xs:element	name="autobuses" type="xs:boolean" minOccurs="0"/>
				<xs:element	name="metro" type="xs:boolean" minOccurs="0"/>
				<xs:element	name="renfe" type="xs:boolean" minOccurs="0"/>
				<xs:element	name="centrosComerciales" type="xs:boolean"	minOccurs="0"/>
				<xs:element	name="centrosEscolares"	type="xs:boolean" minOccurs="0"/>
				<xs:element	name="espaciosVerdes" type="xs:boolean"	minOccurs="0"/>
				<xs:element	name="centrosDeportivos" type="xs:boolean" minOccurs="0"/>
				<xs:element	name="centrosCulturales" type="xs:boolean" minOccurs="0"/>
				<xs:element	name="camposGolf" type="xs:boolean"	minOccurs="0"/>
				<xs:element	name="observacionesEntorno"	type="tipoDescripcion" minOccurs="0"/>
				
				<xs:element	ref="listaImagenes"	minOccurs="0"/>	 
				<xs:element	ref="listaVideos" minOccurs="0"/>
				
				<xs:element	name="extensiones" minOccurs="0" type="tipoExtensiones"/>

			</xs:all>
		</xs:complexType>
	</xs:element>

	<xs:element	name="listaImagenes">
		<xs:annotation>
			<xs:documentation>
				Objecto	para implementar la	lista opcional de imágenes.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element	ref="imagen" minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>

	<xs:element	name="imagen">
		<xs:annotation>
			<xs:documentation>
				Objecto	para implementar la	información	de una imagen. Para	nuestro	sistema, una imagen	no es ni más ni	menos que una URL de donde está	alojada	dicha imagen. Si el	sistema	puede proporcionar la misma	imagen en menor	tamaño y resolución	lo puede hacer con el campo	'miniatura'. Nuestro sistema elegirá una de	las	miniaturas proporcionadas entre	las	distintas imágenes de la lista de un propiedad.	Las	imágenes pueden	opcionalmente ir acompañadas de	un pequeño texto a modo	de comentario con el campo 'listaComentarios', estructura contenedora de elementos 'comentario'	que	engloban al	texto en sí, acompañador de	un campo que indica	el idioma de dicho texto (dentro de	la lista posible de	idiomas	de nuestros	sistemas).
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element	name="url" type="xs:anyURI"/>
				<xs:element	name="miniatura" type="xs:anyURI" minOccurs="0"/>
				<xs:element	name="comentarios"	type="tipoComentario" minOccurs="0"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>

	<xs:element	name="listaVideos">
		<xs:annotation>
			<xs:documentation>
				Objecto	para implementar la	lista opcional de vídeos.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element	ref="video"	minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>

	<xs:element	name="video">
		<xs:annotation>
			<xs:documentation>
				Objecto	para implementar la	información	de un vídeo. Para nuestro sistema, un vídeo	no es ni más ni	menos que una URL. Necesitamos también la imagen a mostraren los visores en	el lugar del vídeo.	Los	vídeos pueden opcionalmente	ir acompañadas de un pequeño texto a modo de comentario	con	el campo 'listaComentarios', estructura	contenedora	de elementos 'comentario' que engloban al texto	en sí, acompañador de un campo que indica el idioma	de dicho texto (dentro de la lista posible de idiomas de nuestros sistemas).
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element	name="url" type="xs:anyURI"/>
				<xs:element	name="imagenPreview" type="xs:anyURI"/>
				<xs:element	name="listaComentarios"	type="tipoComentario" minOccurs="0"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>

	<xs:complexType	name="tipoComentario" mixed="true">
		<xs:annotation>
			<xs:documentation>
				El tipo	'tipoComentario' en	las	listas de comentarios de las estructuras para las imágenes y los vídeos. Es	un contenedor de varios	objectos 'comentario' compuestos por pares de campos para el texto en sí y para	el idioma en el	que	está expresado,	dentro de la lista posible de idiomas del sistema
			</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element	name="comentario" minOccurs="0"	maxOccurs="unbounded">
				<xs:complexType>
					<xs:sequence>
						<xs:element	name="idioma" type="tipoIdioma"/>
						<xs:element	name="texto" type="xs:string"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>

	<xs:complexType	name="tipoDescripcion" mixed="true">
		<xs:annotation>
			<xs:documentation>
				El tipo	'tipoDescripcion' es utilizado en diversos campos de la	estructura 'propiedad' que describe	a cada uno de los inmuebles	a traspasar. Los campos	que	contienen textos en	distintas versiones	o contenidos según el idioma (susceptibles de estar	traducidos)	llevan este	tipo. No es	ni más ni menos	que	un contenedor de varios	objectos 'descripcion' compuestos por pares	de campos para el texto	en sí y	para el	idioma en el que está expresado, dentro	de la lista	posible	de idiomas del sistema
			</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element	name="descripcion" minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:sequence>
						<xs:element	name="idioma" type="tipoIdioma"/>
						<xs:element	name="texto" type="xs:string"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>

	<xs:simpleType name="tipoIdioma">
		<xs:annotation>
			<xs:documentation>
				Tipo para las cadenas de idiomas, compuestas por 2 caracteres.
			</xs:documentation>
		</xs:annotation>
		<xs:restriction	base="xs:string">
			<xs:enumeration	value="es"/>
			<xs:enumeration	value="en"/>
			<xs:enumeration	value="de"/>
			<xs:enumeration	value="fr"/>
			<xs:enumeration	value="it"/>
			<xs:enumeration	value="fi"/>
		</xs:restriction>
	</xs:simpleType>

	<xs:simpleType name="tipoSuperficies">
		<xs:annotation>
			<xs:documentation>
				Tipo para las cantidades de	superficies, admitimos 2 decimales.
			</xs:documentation>
		</xs:annotation>
		<xs:restriction	base="xs:decimal">
			<xs:fractionDigits value="2"/>
		</xs:restriction>
	</xs:simpleType>
	
	<xs:simpleType name="tipoCodigoPostal">
		<xs:restriction base="xs:positiveInteger">
			<xs:pattern value="[0-9]{1,5}"></xs:pattern>
		</xs:restriction>
	</xs:simpleType>

	<xs:complexType	name="tipoExtensiones">
		<xs:annotation>
			<xs:documentation>
				Tipo para contener extensiones sobre el	formato	báscio XCP.	Puede albergar cualquier tipo de elemento.
			</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:any	minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>

	<!-- Extensión Inmoenter -->
	<xs:element	name="extensionInmoenter">
		<xs:annotation>
			<xs:documentation>
				Objeto que alberga los campos  de la extensión para	Inmoenter. Todos los campos	son	opcionales.
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:all>
				<xs:element	name="publicidad" type="xs:string" minOccurs="0"/>
				<xs:element	name="horarioVisita" type="xs:string" minOccurs="0"/>
				<xs:element	name="exclusiva" type="xs:boolean" minOccurs="0"/>
				<xs:element	name="ibi" type="xs:boolean" minOccurs="0"/>
				<xs:element	name="subvencion" type="xs:boolean"	minOccurs="0"/>
				<xs:element	name="reciboAgua" type="xs:boolean"	minOccurs="0"/>
				<xs:element	name="reciboLuz" type="xs:boolean" minOccurs="0"/>
				<xs:element	name="reciboTelefono" type="xs:boolean"	minOccurs="0"/>
				<xs:element	name="tiempoEspera"	type="xs:integer" minOccurs="0"/>
				<xs:element	name="superficiePatio" type="tipoSuperficies" minOccurs="0"/>
				<xs:element	name="hipoteca"	type="xs:boolean" minOccurs="0"/>
				<xs:element	name="cantidadHipoteca"	type="xs:integer" minOccurs="0"/>
				<xs:element	name="interesHipoteca" type="xs:decimal" minOccurs="0"/>
				<xs:element	name="duracionHipoteca"	type="xs:string" minOccurs="0"/>
				<xs:element	name="cuotaHipoteca" type="xs:integer" minOccurs="0"/>
				<xs:element	name="internacional" type="xs:boolean" minOccurs="0"/>
				<xs:element	name="paisInternacional" type="tipoInternacional" minOccurs="0"/>
				<xs:element	name="estadoInternacional" type="tipoInternacional"	minOccurs="0"/>
				<xs:element	name="localidadInternacional" type="tipoInternacional" minOccurs="0"/>
				<xs:element	name="direccion" type="xs:string" minOccurs="0"/>
				<xs:element	name="dormitoriosDobles"  type="xs:integer"	minOccurs="0"/>
				<xs:element	name="dormitoriosSimples" type="xs:integer"	minOccurs="0"/>
				<xs:element	name="numeroTerrazas" type="xs:integer"	minOccurs="0"/>
				<xs:element	name="tipoCocina" type="xs:integer"	minOccurs="0"/>
				<xs:element	name="tipoSalon" type="xs:integer" minOccurs="0"/>
				<xs:element	name="lavadero"	type="xs:boolean" minOccurs="0"/>
				<xs:element	name="despensa"	type="xs:boolean" minOccurs="0"/>
				<xs:element	name="patio" type="xs:boolean" minOccurs="0"/>
				<xs:element	name="tipoAgua"	type="xs:integer" minOccurs="0"/>
				<xs:element	name="tipoLuz" type="xs:integer" minOccurs="0"/>
				<xs:element	name="tipoAcceso" type="xs:integer"	minOccurs="0"/>
				<xs:element	name="distanciaAcceso" type="xs:integer" minOccurs="0"/>
				<xs:element	name="unidadDistanciaAcceso" type="xs:string" minOccurs="0"/>
			 	<xs:element name="url"	type="xs:anyURI" minOccurs="0"/>
			</xs:all>
		</xs:complexType>
	</xs:element>
	
	<xs:complexType	name="tipoInternacional" mixed="true">
		<xs:annotation>
			<xs:documentation>
				Tipo de	los	campos que definen el país de la propiedad en caso de que sea extranjera. Contiene una lista de	objetos	'nombre' que definen el	nombre y el	idioma del país. 
			</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element	name="nombre" minOccurs="0"	maxOccurs="unbounded">
				<xs:complexType>
					<xs:sequence>
						<xs:element	name="idioma" type="tipoIdioma"/>
						<xs:element	name="texto" type="xs:normalizedString"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>

</xs:schema>
