﻿<?xml version="1.0" encoding="utf-8"?>
<xs:schema version="2.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.keyvisions.it/schemas" xmlns="http://www.keyvisions.it/schemas" elementFormDefault="qualified" xml:lang="en">
	<xs:annotation>
		<xs:documentation>
			<![CDATA[
wbdl 2.0 (Webbase Description Language Schema) 
The purpose of this schema is to formalize the description of a web site in terms of structure, navigation and contents.
Copyright (c) 2005- KeyVisions (TM) di Trevisan Giancarlo. All Rights Reserved.
$Revised 2006/07/08
]]>
		</xs:documentation>
	</xs:annotation>
	<xs:element name="wbdl">
		<xs:complexType>
			<xs:choice>
				<xs:element name="webbase">
					<xs:complexType>
						<xs:sequence>
							<xs:element name="datasources" minOccurs="0" type="datasourcesType" />
							<xs:element name="security" type="securityType" />
							<xs:element name="imagemaps" type="imagemapsType" minOccurs="0" />
							<xs:element name="title" type="textType" minOccurs="1" />
							<xs:element name="description" type="textType" minOccurs="0" />
							<xs:element name="keywords" type="textType" minOccurs="0" />
							<xs:element name="icon" type="textType" minOccurs="0" />
							<xs:element name="image" type="textType" minOccurs="0" />
							<xs:element minOccurs="0" name="codebehind" type="codebehindType" />
							<xs:element name="texts">
								<xs:complexType>
									<xs:sequence maxOccurs="unbounded">
										<xs:element name="standard" type="textType" />
									</xs:sequence>
								</xs:complexType>
							</xs:element>
							<xs:element name="authorizations" type="authorizationsType" minOccurs="0" />
							<xs:element minOccurs="1" maxOccurs="unbounded" name="area" type="areaType" />
						</xs:sequence>
						<xs:attribute name="id" use="required" type="xs:ID" />
						<xs:attribute name="language" type="xs:language" use="required" />
						<xs:attribute name="url" type="xs:anyURI" use="required" />
						<xs:attribute name="homepage" type="xs:IDREF" use="required" />
						<xs:attribute name="key" type="xs:normalizedString" />
						<xs:attribute name="protocol" type="xs:normalizedString" default="http://" />
						<xs:attribute name="guid" type="GUID" />
					</xs:complexType>
				</xs:element>
				<xs:element name="webbaselet">
					<xs:complexType>
						<xs:sequence>
							<xs:element name="datasources" type="datasourcesType" minOccurs="0" />
							<xs:element name="security" type="securityType" minOccurs="0" maxOccurs="1" />
							<xs:element name="imagemaps" type="imagemapsType" minOccurs="0" />
							<xs:choice>
								<xs:element name="area" type="areaType" />
								<xs:element name="page" type="pageType" />
								<xs:element name="content" type="contentType" />
							</xs:choice>
						</xs:sequence>
						<xs:attribute name="id" use="required" type="xs:ID" />
						<xs:attribute name="language" type="xs:language" use="required" />
						<xs:attribute name="guid" type="GUID" />
					</xs:complexType>
				</xs:element>
			</xs:choice>
			<xs:attribute name="version" use="required" type="xs:decimal" fixed="2.0" />
		</xs:complexType>
	</xs:element>
	<xs:complexType name="areaType">
		<xs:sequence>
			<xs:element name="title" type="textType" minOccurs="1" />
			<xs:element name="icon" type="textType" minOccurs="0" />
			<xs:element name="image" type="textType" minOccurs="0" />
			<xs:element minOccurs="0" name="codebehind" type="codebehindType" />
			<xs:element minOccurs="0" name="authorizations" type="authorizationsType" />
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element name="area" type="areaType" minOccurs="0" />
				<xs:element name="page" type="pageType" minOccurs="0" />
			</xs:choice>
		</xs:sequence>
		<xs:attribute name="id" type="xs:ID" use="required" />
		<xs:attribute name="mainpage" type="xs:IDREF" />
		<xs:attribute name="sequence" type="xs:decimal" />
		<xs:attribute name="code" type="xs:normalizedString" />
		<xs:attribute name="guid" type="GUID" />
	</xs:complexType>
	<xs:complexType name="pageType">
		<xs:sequence minOccurs="1">
			<xs:element name="visibility" type="textType" minOccurs="0" />
			<xs:element name="title" type="textType" minOccurs="1" />
			<xs:element name="icon" type="textType" minOccurs="0" maxOccurs="1" />
			<xs:element name="keywords" type="textType" minOccurs="0" />
			<xs:element name="description" type="textType" minOccurs="0" />
			<xs:element minOccurs="0" name="authorizations" type="authorizationsType" />
			<xs:element minOccurs="0" name="codebehind" type="codebehindType" />
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element name="content" type="contentType" />
				<xs:element name="shortcut" type="shortcutType" />
			</xs:choice>
		</xs:sequence>
		<xs:attribute name="id" type="xs:ID" use="required" />
		<xs:attribute name="template" type="xs:normalizedString" use="required" />
		<xs:attribute name="guid" type="GUID" />
	</xs:complexType>
	<xs:complexType name="contentType">
		<xs:sequence>
			<xs:element name="query" minOccurs="0" maxOccurs="1">
				<xs:complexType>
					<xs:simpleContent>
						<xs:extension base="xs:string">
							<xs:attribute name="datasource" type="xs:IDREF" />
							<xs:attribute name="parameters" type="xs:normalizedString" />
						</xs:extension>
					</xs:simpleContent>
				</xs:complexType>
			</xs:element>
			<xs:element name="layout" type="layoutType" minOccurs="0" maxOccurs="1" />
			<xs:element minOccurs="0" name="codebehind" type="codebehindType" />
			<xs:element name="links" minOccurs="0" maxOccurs="1">
				<xs:complexType>
					<xs:sequence maxOccurs="unbounded">
						<xs:element name="link">
							<xs:complexType>
								<xs:sequence maxOccurs="1" minOccurs="0">
									<xs:element name="title" type="textType" />
								</xs:sequence>
								<xs:attribute name="page" type="xs:IDREF" />
								<xs:attribute name="parameters" type="xs:normalizedString" />
							</xs:complexType>
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element minOccurs="0" name="authorizations" type="authorizationsType" />
		</xs:sequence>
		<xs:attribute name="id" type="xs:ID" use="required" />
		<xs:attribute name="name" type="xs:normalizedString" />
		<xs:attribute name="section" type="xs:NCName" />
		<xs:attribute name="sequence" type="xs:decimal" />
		<xs:attribute name="renderas" type="xs:normalizedString" use="required" />
		<xs:attribute name="cssclass" type="xs:NCName" />
		<xs:attribute name="parentarea" type="xs:IDREF" />
		<xs:attribute name="guid" type="GUID" />
	</xs:complexType>
	<xs:complexType name="shortcutType">
		<xs:sequence>
			<xs:element minOccurs="0" name="authorizations" type="authorizationsType" />
		</xs:sequence>
		<xs:attribute name="id" type="xs:ID" use="required" />
		<xs:attribute name="name" use="required" type="xs:normalizedString" />
		<xs:attribute name="section" type="xs:NCName" use="required" />
		<xs:attribute name="sequence" type="xs:decimal" use="required" />
		<xs:attribute name="cssclass" type="xs:NCName" />
		<xs:attribute name="content" use="required" type="xs:IDREF" />
		<xs:attribute name="guid" type="GUID" />
	</xs:complexType>
	<xs:complexType name="layoutType">
		<xs:sequence maxOccurs="unbounded" minOccurs="0">
			<xs:element name="text" type="layoutTextType" />
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="authorizationsType">
		<xs:attribute name="allow" type="xs:IDREFS" />
		<xs:attribute name="deny" type="xs:IDREFS" />
	</xs:complexType>
	<xs:complexType name="securityType">
		<xs:sequence>
			<xs:element name="group" maxOccurs="unbounded">
				<xs:complexType>
					<xs:attribute name="id" use="required" type="xs:ID" />
					<xs:attribute name="name" use="required" type="xs:NCName" />
					<xs:attribute name="description" type="xs:normalizedString" />
				</xs:complexType>
			</xs:element>
			<xs:element name="user" maxOccurs="unbounded">
				<xs:complexType>
					<xs:attribute name="id" use="required" type="xs:ID" />
					<xs:attribute name="name" type="xs:NCName" use="required" />
					<xs:attribute name="fullname" type="xs:normalizedString" use="required" />
					<xs:attribute name="description" type="xs:normalizedString" />
					<xs:attribute name="password" type="xs:normalizedString" />
					<xs:attribute name="memberof" type="xs:IDREFS" />
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="imagemapsType">
		<xs:sequence minOccurs="1" maxOccurs="unbounded">
			<xs:element name="imagemap">
				<xs:complexType>
					<xs:sequence maxOccurs="unbounded">
						<xs:element name="area">
							<xs:complexType mixed="false">
								<xs:simpleContent>
									<xs:extension base="xs:normalizedString">
										<xs:attribute name="key" type="xs:normalizedString" />
										<xs:attribute name="shape" type="shape" />
									</xs:extension>
								</xs:simpleContent>
							</xs:complexType>
						</xs:element>
					</xs:sequence>
					<xs:attribute name="name" use="required" type="xs:anyURI" />
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="datasourcesType">
		<xs:sequence maxOccurs="unbounded">
			<xs:element name="datasource">
				<xs:complexType>
					<xs:simpleContent>
						<xs:extension base="xs:normalizedString">
							<xs:attribute name="id" type="xs:ID" use="required" />
						</xs:extension>
					</xs:simpleContent>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="textType">
		<xs:sequence maxOccurs="unbounded">
			<xs:element name="text" maxOccurs="1">
				<xs:complexType>
					<xs:simpleContent>
						<xs:extension base="xs:string">
							<xs:attribute name="language" type="xs:language" use="required" />
							<xs:attribute name="modified" type="xs:dateTime" use="required" />
						</xs:extension>
					</xs:simpleContent>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
		<xs:attribute name="id" type="xs:ID" />
	</xs:complexType>
	<xs:complexType name="codebehindType">
		<xs:sequence maxOccurs="unbounded">
			<xs:element name="text" maxOccurs="1">
				<xs:complexType>
					<xs:simpleContent>
						<xs:extension base="xs:string">
							<xs:attribute name="language" type="language" use="required" />
							<xs:attribute name="modified" type="xs:dateTime" use="required" />
						</xs:extension>
					</xs:simpleContent>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
		<xs:attribute name="id" type="xs:long" />
	</xs:complexType>
	<xs:simpleType name="language">
		<xs:restriction base="xs:NMTOKEN">
			<xs:pattern value="schema|vbscript|vbnet" />
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="shape">
		<xs:restriction base="xs:NMTOKEN">
			<xs:pattern value="rect|circle|poly" />
		</xs:restriction>
	</xs:simpleType>
	<xs:complexType mixed="true" name="layoutTextType">
		<xs:annotation>
			<xs:documentation>Describes the layout syntax in wbdl and xhtml form</xs:documentation>
		</xs:annotation>
		<xs:choice minOccurs="0" maxOccurs="unbounded">
			<xs:element name="a" type="anchorType" />
			<xs:element name="b" type="buttonType" />
			<xs:element name="c" type="optionsType" />
			<xs:element name="d" type="optionsType" />
			<xs:element name="e" type="editType" />
			<xs:element name="f" type="fieldType" />
			<xs:element name="g" type="lookupType" />
			<xs:element name="h">
				<xs:complexType>
					<xs:attribute name="name" type="xs:NCName" />
					<xs:attribute name="attributes" type="expressionType" />
					<xs:attribute name="value" type="expressionType" />
					<xs:anyAttribute namespace="##any" processContents="skip" />
				</xs:complexType>
			</xs:element>
			<xs:element name="i" type="imageType" />
			<xs:element name="l">
				<xs:complexType>
					<xs:attribute name="value" type="expressionType" />
					<xs:attribute name="sort" type="xs:NCName" />
					<xs:attribute name="attributes" type="expressionType" />
					<xs:anyAttribute namespace="##any" processContents="skip" />
				</xs:complexType>
			</xs:element>
			<xs:element name="m">
				<xs:complexType>
					<xs:attributeGroup ref="formSymbol" />
					<xs:attribute name="htmlencode" type="xs:boolean" />
					<xs:anyAttribute namespace="##any" processContents="skip" />
				</xs:complexType>
			</xs:element>
			<xs:element name="n" type="lookupType" />
			<xs:element name="o" type="layoutTextType" />
			<xs:element name="q">
				<xs:complexType>
					<xs:simpleContent>
						<xs:extension base="xs:string" />
					</xs:simpleContent>
				</xs:complexType>
			</xs:element>
			<xs:element name="r" type="optionsType" />
			<xs:element name="s" type="optionsType" />
			<xs:element name="u">
				<xs:complexType>
					<xs:attribute name="name" type="xs:NCName" />
					<xs:attribute name="saveas" type="expressionType" />
					<xs:attribute name="attributes" type="expressionType" />
					<xs:anyAttribute namespace="##any" processContents="skip" />
				</xs:complexType>
			</xs:element>
			<xs:element name="v" type="valueType" />
			<xs:element name="w">
				<xs:complexType>
					<xs:attributeGroup ref="formSymbol" />
					<xs:anyAttribute namespace="##any" processContents="skip" />
				</xs:complexType>
			</xs:element>
			<xs:element name="x" type="dimensionType" />
			<xs:element name="y" type="dimensionType" />
			<xs:element name="z" type="dimensionType" />
			<xs:element name="attribute">
				<xs:complexType>
					<xs:attribute name="name" use="required" type="attributeTypes" />
					<xs:attribute name="cssclass" type="xs:NCName" />
				</xs:complexType>
			</xs:element>
			<xs:element name="shortcut" type="shortcutType" />
			<xs:element name="move" type="moveType" />
			<xs:element name="htab">
				<xs:complexType>
					<xs:attribute name="count" type="xs:short" />
					<xs:attribute name="attributes" type="expressionType" />
					<xs:anyAttribute namespace="##any" processContents="skip" />
				</xs:complexType>
			</xs:element>
			<xs:element name="vtab">
				<xs:complexType>
					<xs:attribute name="count" type="xs:short" />
					<xs:attribute name="attributes" type="expressionType" />
					<xs:anyAttribute namespace="##any" processContents="skip" />
				</xs:complexType>
			</xs:element>
			<xs:any namespace="##other" processContents="skip" />
		</xs:choice>
		<xs:attribute name="language" type="xs:language" use="required" />
		<xs:attribute name="modified" type="xs:dateTime" use="required" />
		<xs:attribute name="nodata" type="xs:normalizedString" />
		<xs:attribute name="caption" type="xs:normalizedString" />
		<xs:attribute name="header" type="xs:normalizedString" />
		<xs:attribute name="footer" type="xs:normalizedString" />
		<xs:attribute name="break" type="xs:normalizedString" />
		<xs:attribute name="rows" type="xs:normalizedString" />
		<xs:attribute name="cols" type="xs:normalizedString" />
		<xs:attribute name="disabled" type="xs:normalizedString" />
		<xs:attribute name="frame" type="xs:normalizedString" />
		<xs:attribute name="image" type="xs:normalizedString" />
		<xs:attribute name="key" type="xs:normalizedString" />
		<xs:attribute name="period" type="periodTypes" />
		<xs:attribute name="rownumber" type="xs:boolean" />
		<xs:attribute name="short" type="xs:boolean" />
		<xs:attribute name="transpose" type="xs:boolean" />
		<xs:attribute name="visible" type="xs:normalizedString" />
		<xs:attribute name="grid" type="xs:boolean" />
	</xs:complexType>
	<xs:complexType name="moveType">
		<xs:attribute name="count" type="xs:short" />
		<xs:attribute name="field" type="xs:NCName" />
	</xs:complexType>
	<xs:complexType name="anchorType" mixed="true">
		<xs:sequence>
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element name="p" type="parameterType" />
				<xs:element name="move" type="moveType" />
			</xs:choice>
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element name="d" type="optionsType" />
				<xs:element name="e" type="editType" />
				<xs:element name="f" type="fieldType" />
				<xs:element name="i" type="imageType" />
				<xs:element name="n" type="lookupType" />
				<xs:element name="r" type="optionsType" />
				<xs:element name="v" type="valueType" />
			</xs:choice>
		</xs:sequence>
		<xs:attribute name="href" type="expressionType" />
		<xs:attribute name="attributes" type="expressionType" />
		<xs:anyAttribute namespace="##any" processContents="skip" />
	</xs:complexType>
	<xs:complexType name="buttonType">
		<xs:choice minOccurs="0" maxOccurs="unbounded">
			<xs:element name="p" type="parameterType" />
			<xs:element name="move" type="moveType" />
		</xs:choice>
		<xs:attribute name="name" type="xs:string" use="required" />
		<xs:attribute name="img" type="xs:string" />
		<xs:attribute name="href" type="expressionType" />
		<xs:attribute name="submit" type="expressionType" />
		<xs:attribute name="attributes" type="expressionType" />
		<xs:anyAttribute namespace="##any" processContents="skip" />
	</xs:complexType>
	<xs:complexType name="editType">
		<xs:attributeGroup ref="formSymbol" />
		<xs:attribute name="format" type="xs:normalizedString" />
		<xs:attribute name="htmlencode" type="xs:boolean" />
		<xs:anyAttribute namespace="##any" processContents="skip" />
	</xs:complexType>
	<xs:complexType name="fieldType">
		<xs:attribute name="name" type="xs:NCName" />
		<xs:attribute name="format" type="xs:normalizedString" />
		<xs:attribute name="htmlencode" type="xs:boolean" />
		<xs:anyAttribute namespace="##any" processContents="skip" />
	</xs:complexType>
	<xs:complexType name="imageType">
		<xs:attribute name="src" type="xs:normalizedString" />
		<xs:attribute name="srcs" type="expressionType" />
		<xs:attribute name="noimage" type="xs:anyURI" />
		<xs:anyAttribute namespace="##any" processContents="skip" />
	</xs:complexType>
	<xs:complexType name="lookupType">
		<xs:attribute name="values" type="expressionType" />
		<xs:anyAttribute namespace="##any" processContents="skip" />
	</xs:complexType>
	<xs:complexType name="valueType">
		<xs:attribute name="name" type="xs:NCName" />
		<xs:attribute name="format" type="xs:normalizedString" />
		<xs:attribute name="value" type="expressionType" />
		<xs:attribute name="htmlencode" type="xs:boolean" />
		<xs:anyAttribute namespace="##any" processContents="skip" />
	</xs:complexType>
	<xs:complexType name="optionsType">
		<xs:attributeGroup ref="formSymbol" />
		<xs:attribute name="options" type="selectionType" />
		<xs:anyAttribute namespace="##any" processContents="skip" />
	</xs:complexType>
	<xs:complexType name="parameterType">
		<xs:attribute name="name" type="xs:NCName" />
		<xs:attribute name="value" type="xs:normalizedString" />
	</xs:complexType>
	<xs:complexType name="dimensionType">
		<xs:attribute name="image" type="xs:string" />
		<xs:attribute name="value" type="expressionType" />
		<xs:anyAttribute namespace="##any" processContents="skip" />
	</xs:complexType>
	<xs:simpleType name="periodTypes">
		<xs:annotation>
			<xs:appinfo>Temporal rendering types</xs:appinfo>
		</xs:annotation>
		<xs:restriction base="xs:NMTOKEN">
			<xs:pattern value="year|month|week|day" />
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="attributeTypes">
		<xs:restriction base="xs:NMTOKEN">
			<xs:pattern value="siteinfo|sitetitle|siteicon|siteimage|areatitle|areaicon|areaimage|pagetitle|pageicon" />
		</xs:restriction>
	</xs:simpleType>
	<xs:attributeGroup name="formSymbol">
		<xs:attribute name="name" type="xs:NCName" />
		<xs:attribute name="value" type="expressionType" />
		<xs:attribute name="required" type="xs:boolean" />
		<xs:attribute name="validate" type="expressionType" />
	</xs:attributeGroup>
	<xs:simpleType name="expressionType">
		<xs:restriction base="xs:normalizedString">
			<xs:pattern value="(.+|(esite:|vbscript:|vbnet:|dsn:).+)" />
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="selectionType">
		<xs:restriction base="xs:normalizedString">
			<xs:pattern value="([123]|vbscript:|vbnet:|dsn:).+" />
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="GUID">
		<xs:annotation>
			<xs:documentation xml:lang="en">
				The representation of a GUID, generally the id of an element.
			</xs:documentation>
		</xs:annotation>
		<xs:restriction base="xs:string">
			<xs:pattern value="\{[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\}"/>
		</xs:restriction>
	</xs:simpleType>
</xs:schema>
