Archivos de esquema CDK de Cast Iron

Los archivos de esquema XML proporcionan la sintaxis y definen cómo elementos y atributos están representados en los archivos XML. Los archivos de esquema CDK de Cast Iron se importan al entorno de desarrollo de Studio y, a continuación, se crean los puntos finales y conexiones arrastrando elementos de esquema desde la pestaña de la caja de herramientas Proyecto a la orquestación.

Los archivos de esquema CDK son:

ci-connector-config.xsd - Este archivo lo utilizan Studio y el motor de despliegue para definir las opciones básicas de configuración disponibles al conector. Los metadatos del plugin se almacenan como elementos en el archivo XML y, una vez configuradas, las propiedades del punto final definen lo que los usuarios finales pueden ver y las actividades a las que están expuestos. A continuación se muestra el archivo ci-connector-config.xsd:
<xs:schema
		id="ci-cdk-config"
		version="1.0"
		targetNamespace="http://www.approuter.com/schemas/cdk/config/"
		xmlns:tns="http://www.approuter.com/schemas/cdk/config/"
		xmlns:xs="http://www.w3.org/2001/XMLSchema"
		xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
		xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
		jaxb:extensionBindingPrefixes="xjc"
		jaxb:version="2.0"
		elementFormDefault="qualified">
		<xs:annotation>
				<xs:appinfo>
						<jaxb:schemaBindings>
								<jaxb:package
										name="com.approuter.studio.connectors.cdk.config" />
						</jaxb:schemaBindings>
						<jaxb:globalBindings>
								<xjc:simple />
						</jaxb:globalBindings>
				</xs:appinfo>
		</xs:annotation>
						<xs:element
				name="connectorConfiguration">
				<xs:complexType>
						<xs:sequence>
								<!-- Descripción del conector -->
									<xs:element
										name="description"
										type="xs:string" />
								<!-- Definición del formulario del punto final -->
									<xs:element
										name="endpoint"
										type="tns:EndpointForm" />
								<!-- Actividades del conector -->
									<xs:element
										name="activity-group"
										type="tns:ActivityGroup" />
									<xs:element
										name="operations"
										minOccurs="0">
							<xs:complexType>
									<xs:sequence>
												<xs:element
																name="operation"
																type="tns:operationType"
													minOccurs="0"
																maxOccurs="unbounded" />
												</xs:sequence>
						<!--
														ubicación predeterminada del punto final de aquellas
														operaciones que no han definido una o que
							no se han definido
						-->
												<xs:attribute
														name="default-endpoint-location"
														type="xs:string"
														use="optional" />
										</xs:complexType>
								</xs:element>
								<!-- Versión mínima de cliente -->
									<xs:element
										name="clients"
										minOccurs="0">
							<xs:complexType>
									<xs:sequence>
												<xs:element
																name="client"
																type="tns:CompatibleClient"
													minOccurs="0"
																maxOccurs="unbounded" />
												</xs:sequence>
										</xs:complexType>
								</xs:element>
								<!-- documentación del release -->
									<xs:element
										name="release-documentation"
										type="tns:ReleaseDocumentation"
										minOccurs="0"
													maxOccurs="unbounded" />
									</xs:sequence>
			<!--
								Nombre interno del conector. No cambie los
								nombres al cambiar de release del conector
			-->
									<xs:attribute
								name="name"
											type="xs:string"
								use="required" />
						<!-- Etiqueta legible del conector -->
									<xs:attribute
								name="label"
											type="xs:string"
								use="required" />
			<!--
								Espacio de nombres de la conexión. Se usa para asociar
								actividades a puntos finales dentro de Studio
			-->
									<xs:attribute
								name="connection-ns"
											type="xs:string"
								use="required" />
						<!-- Versión de este conector -->
									<xs:attribute
								name="version"
											type="xs:string"
								use="required" />
						<!-- notes -->
									<xs:attribute
								name="notes"
									type="xs:string" />
						<!-- fecha del release -->
									<xs:attribute
								name="release-date"
								type="xs:dateTime"
											use="optional" />
			<!--
								Sugerencia general al consumidor respecto a la
				clasificación
			-->
									<xs:attribute
								name="category"
								type="tns:ConnectorCategory" />
							</xs:complexType>
					</xs:element>
		<xs:complexType
				name="ReleaseDocumentation">
				<xs:simpleContent>
						<xs:extension
								base="xs:string">
								<!-- versión correspondiente del conector del plugin -->
										<xs:attribute
										name="release-version"
										type="xs:string" />
						</xs:extension>
				</xs:simpleContent>
		</xs:complexType>
		<xs:complexType
				name="CompatibleClient">
								<xs:attribute
						name="clientName"
										type="xs:string"
						default="castiron-studio" />
								<xs:attribute
						name="minimumClientVersion"
										type="xs:string"
						default="6.0" />
						</xs:complexType>
	<!--
			 Formulario del punto final. Es obligatoria una acción de conexión de prueba.
	-->
		<xs:complexType
				name="EndpointForm">
				<xs:complexContent>
						<xs:extension
								base="tns:Form">
							<xs:sequence>
										<xs:element
												name="test-connection-action"
												type="tns:TestConnectionAction" />
									<!-- Descripción del conector -->
										<xs:element
												name="endpoint-description"
											type="xs:string" />
										</xs:sequence>
				<!--
										Se utiliza para la integración del menú de Studio (p.ej.
										elemento del menú Puntos finales, nombre predeterminado de la instancia
										del punto final)
				-->
										<xs:attribute
										name="endpoint-name"
												type="xs:string"
									use="required" />
						</xs:extension>
				</xs:complexContent>
						</xs:complexType>
		<xs:complexType
				name="Form">
					<xs:sequence>
						<!-- Campos del formulario -->
								<xs:element
								name="field"
								type="tns:FormField"
									minOccurs="0"
												maxOccurs="unbounded" />
						<!-- Los campos pueden agruparse -->
								<xs:element
								name="field-group"
								type="tns:FieldGroup"
									minOccurs="0"
												maxOccurs="unbounded" />
						<!-- Acciones del formulario.-->
								<xs:element
								name="actions"
								type="tns:Actions"
									minOccurs="0"
								maxOccurs="1" />
								</xs:sequence>
								<xs:attribute
							name="name"
										type="xs:string"
							use="required" />
						</xs:complexType>

		<!-- Los campos pueden ser miembros de un grupo -->
		<xs:complexType
				name="FieldGroup">
					<xs:sequence>
								<xs:element
								name="field"
								type="tns:FormField"
									minOccurs="0"
												maxOccurs="unbounded" />
								<xs:element
								name="field-group"
								type="tns:FieldGroup"
									minOccurs="0"
												maxOccurs="unbounded" />
								</xs:sequence>
								<xs:attribute
							name="name"
										type="xs:string"
							use="required" />
				<!-- Etiqueta legible del grupo -->
								<xs:attribute
							name="label"
										type="xs:string"
										use="optional" />
		<!--
						Grupos predefinidos. Si se especifican, no hay
						necesidad de especificar etiqueta, grupos o campos. Si
						especifican, se hará caso omiso de ellos.
		-->
								<xs:attribute
						name="type"
						use="optional">
						<xs:simpleType>
								<xs:restriction
									base="xs:string">
										<xs:enumeration
												value="connection-timeout" />
								<xs:enumeration
												value="connection-proxy" />
										<!-- TBD otros -->
								</xs:restriction>
						</xs:simpleType>
				</xs:attribute>
						</xs:complexType>
		<xs:complexType
				name="FormField">
			<xs:annotation>
					<xs:appinfo>
								<jaxb:bindings
										node="//xs:complexType[@name='FormField']">
										<jaxb:class
												implClass="com.approuter.studio.connectors.cdk.config.ConnectorFormField" />
								</jaxb:bindings>
					</xs:appinfo>
			</xs:annotation>
				<xs:complexContent>
						<xs:extension
								base="tns:FieldDescriptor">
							<xs:sequence>
										<!-- texto de la descripción resumida -->
										<xs:element
												name="short-description"
													type="xs:string"
												minOccurs="0" />
										<!-- texto de la descripción detallada -->
										<xs:element
												name="long-description"
													type="xs:string"
												minOccurs="0" />
										<!-- texto de la sugerencia -->
										<xs:element
												name="hint"
									type="xs:string"
												minOccurs="0" />
										</xs:sequence>
						</xs:extension>
				</xs:complexContent>
						</xs:complexType>
		<xs:complexType
				name="Actions">
					<xs:sequence>
								<xs:element
								name="action"
								type="tns:Action"
												maxOccurs="unbounded" />
								<!-- texto de la descripción resumida -->
								<xs:element
										name="short-description"
											type="xs:string"
										minOccurs="0" />
								</xs:sequence>
								<xs:attribute
							name="label"
										type="xs:string"
										use="optional" />
						</xs:complexType>
		<xs:complexType
				name="Action">
				<xs:simpleContent>
						<xs:extension
								base="xs:string">
										<xs:attribute
									name="label"
										type="xs:string" />
				<!--
										la operación debe invocarse en
										respuesta a la acción
				-->
										<xs:attribute
										name="operation-name" />
									<!-- texto de la descripción resumida -->
										<xs:attribute
											name="short-description"
												type="xs:string"
									use="required" />
						</xs:extension>
				</xs:simpleContent>
						</xs:complexType>
		<xs:complexType
				name="TestConnectionAction">
				<xs:simpleContent>
							<xs:restriction
								base="tns:Action">
										<xs:attribute
										name="operation-name"
										fixed="TestConnection" />
										<xs:attribute
									name="label"
												type="xs:string"
										fixed="Test Connection" />
							</xs:restriction>
				</xs:simpleContent>
						</xs:complexType>


		<!-- categorías predefinidas del conector -->
	<!--
				se utiliza para indicar el tipo de solución empresarial
	-->
		<xs:simpleType
				name="ConnectorCategory">
						<xs:restriction
							base="xs:string">
								<xs:enumeration
								value="CRM" />
								<xs:enumeration
								value="SCM" />
								<xs:enumeration
								value="ERP" />
								<xs:enumeration
								value="ECM" />
								<xs:enumeration
								value="SFA" />
								<xs:enumeration
								value="BPM" />
								<xs:enumeration
								value="IBP" />
								<xs:enumeration
								value="ORM" />
								<xs:enumeration
								value="MIS" />
								<xs:enumeration
								value="SIS" />
								<xs:enumeration
								value="COM" />
								<xs:enumeration
								value="MOM" />
								<xs:enumeration
								value="PIM" />
								<xs:enumeration
								value="Database" />
						<!-- etc -->
						</xs:restriction>
				</xs:simpleType>

		<!-- actividades -->
		<xs:complexType
				name="ActivityGroup">
					<xs:sequence>
								<xs:element
								name="activity"
								type="tns:Activity"
								minOccurs="1"
												maxOccurs="unbounded" />
								</xs:sequence>
		<!--
						esta es la etiqueta del grupo bajo el cual
						aparecerán las actividades
		-->
								<xs:attribute
							name="label"
										type="xs:string"
										use="optional" />
						</xs:complexType>

		<!-- actividad -->
		<xs:complexType
				name="Activity">
					<xs:sequence>
						<!-- operación del wsdl -->
								<xs:element
									name="operation-name"
									type="xs:string" />
								<xs:element
									name="description"
									type="xs:string" />
								<xs:element
								name="task-list"
								type="tns:Tasks" />
								</xs:sequence>
								<xs:attribute
							name="name"
										type="xs:string"
							use="required" />
		<!--
						esta es la etiqueta de la actividad que aparece
						bajo un grupo de actividades
		-->
								<xs:attribute
							name="label"
										type="xs:string"
										use="optional" />
						</xs:complexType>

		<!-- tareas de las actividades -->
		<xs:complexType
				name="Tasks">
					<xs:sequence>
								<xs:element
								name="configure-task"
								type="tns:ConfigureTask" />
								</xs:sequence>
						</xs:complexType>
	<!--
				posible mejora: determinar la "navegabilidad"
				en función de si la entrada es una extensión de tipo
		abstracto.
	-->
		<xs:complexType
				name="ConfigureTask">
					<xs:sequence>
								<xs:element
							name="type"
								type="tns:ConfigurationType"
								default="browse" />
								<xs:element
								name="applies-to"
								type="tns:AppliesTo"
									minOccurs="0"
								default="inputs" />
								</xs:sequence>
						</xs:complexType>

		<!-- navegable o no -->
	<!--
				posible mejora: determinar la navegabilidad
				en función de si la entrada es una extensión de tipo
		abstracto.
	-->
		<xs:simpleType
				name="ConfigurationType">
						<xs:restriction
							base="xs:string">
						<xs:enumeration
								value="none" />
								<xs:enumeration
								value="browse" />
						</xs:restriction>
				</xs:simpleType>

		<!-- ¿están configuradas las entradas o las salidas? -->
	<!--
				posible mejora: determinar la navegabilidad
				en función de si la entrada es una extensión de tipo
		abstracto.
	-->
		<xs:simpleType
				name="AppliesTo">
						<xs:restriction
							base="xs:string">
						<xs:enumeration
								value="inputs" />
						<xs:enumeration
								value="outputs" />
						<xs:enumeration
								value="both" />
						</xs:restriction>
				</xs:simpleType>


	<!-- ******************* -->
	<!-- Descriptores...      -->
		<xs:simpleType
				name="allNNI">
			<xs:annotation>
						<xs:documentation> for maxOccurs
						</xs:documentation>
			</xs:annotation>
				<xs:union
						memberTypes="xs:nonNegativeInteger">
						<xs:simpleType>
								<xs:restriction
										base="xs:NMTOKEN">
										<xs:enumeration
												value="unbounded" />
								</xs:restriction>
						</xs:simpleType>
				</xs:union>
				</xs:simpleType>
		<xs:attributeGroup
				name="counts">
								<xs:attribute
						name="minCount"
						type="xs:nonNegativeInteger"
						use="optional"
						default="1" />
								<xs:attribute
						name="maxCount"
						type="tns:allNNI"
						use="optional"
						default="1" />
		</xs:attributeGroup>
		<xs:complexType
				name="Descriptor"
				abstract="true">
				<xs:sequence />
								<xs:attribute
							name="name"
										type="xs:string"
							use="required" />
				<!-- texto de etiqueta legible -->
								<xs:attribute
							name="label"
										type="xs:string"
										use="optional" />
			<xs:attributeGroup
						ref="tns:counts" />
						</xs:complexType>
	<!--
				la anotación de los nodos hijos con 'volatile' indica
				que el nodo de texto se ha establecido desde fuera de la
				implementación del conector (p.ej. por un usuario final
				que esté construyendo un proyecto que utilice el conector)
	-->
		<xs:complexType
				name="FieldDescriptor">
				<xs:complexContent>
						<xs:extension
								base="tns:Descriptor">
							<xs:sequence>
										<!-- tipo de campo (p.ej. serie, booleano, ...) -->
										<xs:element
									name="type"
												type="tns:FieldType" />
										<!-- tipo de xsd asociada -->
										<xs:element
												name="soap-type"
												type="tns:SoapType"
												minOccurs="0" />
					<!--
												define un valor predeterminado para el campo cuando
						es aplicable
					-->
										<xs:element
												name="default-value"
													type="xs:string"
												minOccurs="0" />
					<!--
												define si los valores tienen un determinado formato
												p.ej. contraseñas, etc.
					-->
										<xs:element
												name="format"
												type="tns:FieldFormat"
												minOccurs="0" />
					<!--
												define si los posibles valores forman una colección
												(por ej., un rango o conjunto de valores)
					-->
										<xs:element
												name="field-restriction"
												type="tns:FieldRestriction"
												minOccurs="0" />
					<!--
												define si los valores están restringidos a un patrón
						regex
					-->
										<xs:element
												name="value-restriction"
												type="tns:ValueRestriction"
												minOccurs="0" />
					<!--
												volátil: valor actual o establecido. (por ejemplo,
												el valor que se "envía" ("posted") desde el panel del punto final cuando
											el usuario final pulsa el botón
						Probar Conexión.)
					-->
										<xs:element
												name="value"
													type="xs:string"
											minOccurs="0">
							<xs:annotation>
														<xs:appinfo>volatile</xs:appinfo>
							</xs:annotation>
									</xs:element>
										</xs:sequence>
				<!--
										<xs:attribute name="readable"
										type="xs:boolean" use="optional"
										default="true"/> <xs:attribute
										name="writable" type="xs:boolean"
										default="true" use="optional"/>
				-->
								<!-- espacio de nombres de este descriptor de campo -->
										<xs:attribute
										name="ns"
										type="xs:anyURI" />
				<!--
										¿se puede aplicar una propiedad de configuración a
										este campo?
				-->
										<xs:attribute
										name="configurable"
										type="xs:boolean"
										default="false" />
								<!-- interno -->
										<xs:attribute
										name="used"
										type="xs:boolean"
										default="true">
						<xs:annotation>
													<xs:appinfo>volatile</xs:appinfo>
						</xs:annotation>
						</xs:attribute>
						</xs:extension>
				</xs:complexContent>
						</xs:complexType>
	<!--
				El descriptor permite a los consumidores obtener
				una descripción de objeto detallada. Por ejemplo, esto permite al
	-->
	<!--
				generador de UI de Studio producir una interfaz
				de usuario con varios tipos y comportamientos de componente de ui
				(de una forma coherente.)
	-->
	<!--
				Nota: ObjectDescriptor es parte de la
				DescribeObjectResponse definida en
		ci-connector-api.xsd
	-->
		<xs:complexType
				name="ObjectDescriptor">
				<xs:complexContent>
						<xs:extension
								base="tns:Descriptor">
							<xs:sequence>
										<xs:element
										name="field"
												type="tns:FieldDescriptor"
											minOccurs="0"
														maxOccurs="unbounded" />
										<xs:element
												name="object"
												type="tns:ObjectDescriptor"
											minOccurs="0"
														maxOccurs="unbounded" />
										</xs:sequence>
								<!-- espacio de nombres de este ObjectDescriptor -->
										<xs:attribute
										name="ns"
										type="xs:anyURI" />
								<!-- interno -->
										<xs:attribute
										name="used"
										type="xs:boolean"
										default="true">
						<xs:annotation>
													<xs:appinfo>volatile</xs:appinfo>
						</xs:annotation>
						</xs:attribute>
						</xs:extension>
				</xs:complexContent>
						</xs:complexType>

		<!-- tipos soportados -->
		<xs:simpleType
				name="FieldType">
						<xs:restriction
							base="xs:string">
								<xs:enumeration
								value="string" />
								<xs:enumeration
								value="base64" />
								<xs:enumeration
								value="boolean" />
								<xs:enumeration
								value="int" />
								<xs:enumeration
								value="decimal" />
								<xs:enumeration
								value="date" />
								<xs:enumeration
								value="dateTime" />
								<xs:enumeration
								value="anyType" />
						<!-- cualquiera de los anteriores (p.ej. string, int, etc.) -->
						</xs:restriction>
				</xs:simpleType>

		<!-- tipo de xsd correspondiente -->
		<xs:simpleType
				name="SoapType">
						<xs:restriction
							base="xs:string">
								<xs:enumeration
								value="xs:base64Binary" />
								<xs:enumeration
								value="xs:boolean" />
								<xs:enumeration
								value="xs:decimal" />
								<xs:enumeration
								value="xs:int" />
								<xs:enumeration
								value="xs:string" />
								<xs:enumeration
								value="xs:date" />
								<xs:enumeration
								value="xs:dateTime" />
								<xs:enumeration
								value="xs:anyType" />
			<!--
								puede ser id, booolean, decimal, int, string,
								date, dateTime
			-->
						</xs:restriction>
				</xs:simpleType>

		<!-- formatos de tipo soportados -->
		<xs:simpleType
				name="FieldFormat">
						<xs:restriction
							base="xs:string">
								<xs:enumeration
								value="string" />
								<xs:enumeration
								value="password" />
								<xs:enumeration
								value="percent" />
								<xs:enumeration
								value="phone" />
			<!--
								¿¿¿formatos de fecha de <xsd:enumeration value="date"/>
								???
			-->
								<xs:enumeration
								value="url" />
								<xs:enumeration
								value="email" />
								<xs:enumeration
								value="currency" />
						</xs:restriction>
				</xs:simpleType>
	<!--
				los valores posibles forman una colección bien definida
	-->
		<xs:complexType
				name="FieldRestriction">
				<xs:choice>
						<!-- el valor está limitado a un rango de valores -->
								<xs:element
								name="value-range"
								type="tns:ValueRange" />
						<!-- el valor está limitado a un conjunto de valores -->
								<xs:element
								name="value-set"
								type="tns:ValueSet" />
				</xs:choice>
						</xs:complexType>

		<!-- los valores posibles forman un conjunto -->
		<xs:complexType
				name="ValueSet">
					<xs:sequence>
								<xs:element
								name="entry"
								type="tns:ValueSetEntry"
												maxOccurs="unbounded" />
								</xs:sequence>
		<!--
						¿está el conjunto de valores abierto o cerrado
			a incorporaciones?
		-->
								<xs:attribute
						name="restricted"
								type="xs:boolean"
						use="optional"
						default="true" />
						</xs:complexType>
		<xs:complexType
				name="ValueSetEntry">
					<xs:sequence>
								<xs:element
								name="label"
											type="xs:string"
										minOccurs="0" />
			<!--
								el valor debe se analizable para el FieldType especificado
			-->
								<xs:element
										name="value"
									type="xs:string" />
								</xs:sequence>
						</xs:complexType>
	<!--
				los valores posibles se encuentran dentro de un rango definido
	-->
		<xs:complexType
				name="ValueRange">
					<xs:sequence>
			<!--
								el min y el max deben ser analizables para el FieldType
				especificado
			-->
								<xs:element
								name="min"
											type="xs:string"
										minOccurs="0" />
								<xs:element
								name="max"
											type="xs:string"
										minOccurs="0" />
			<!--
								p.ej. para el FieldType 'int' con min=0, max = 4
								y step=2, los únicos valores de campo permitidos son
								0, 2 y 4
			-->
								<xs:element
								name="step"
											type="xs:string"
									minOccurs="0"
							default="1" />
								</xs:sequence>
						</xs:complexType>
	<!--
				el valor está limitado por longitud o por una expresión
		regular
	-->
		<xs:complexType
				name="ValueRestriction">
					<xs:sequence>
								<xs:element
								ref="tns:length"
										minOccurs="0" />
								<xs:element
								ref="tns:min-length"
										minOccurs="0" />
								<xs:element
								ref="tns:max-length"
										minOccurs="0" />
								<xs:element
								ref="tns:pattern"
										minOccurs="0" />
								</xs:sequence>
						</xs:complexType>
		<xs:complexType
				name="ValueAttrib">
				<xs:complexContent>
						<xs:extension
								base="xs:anyType">
										<xs:attribute
											name="value"
									use="required" />
										<xs:attribute
										name="fixed"
										type="xs:boolean"
								use="optional"
										default="false" />
						</xs:extension>
				</xs:complexContent>
						</xs:complexType>
		<xs:complexType
				name="NumAttrib">
				<xs:complexContent>
							<xs:restriction
								base="tns:ValueAttrib">
										<xs:attribute
											name="value"
								type="xs:nonNegativeInteger"
									use="required" />
							</xs:restriction>
				</xs:complexContent>
						</xs:complexType>

	<!-- Los valores se ajustan a una expresión regular -->
		<xs:complexType
				name="Pattern">
				<xs:complexContent>
							<xs:restriction
								base="tns:ValueAttrib">
										<xs:attribute
											name="value"
												type="xs:string"
									use="required" />
							</xs:restriction>
				</xs:complexContent>
						</xs:complexType>
						<xs:element
				name="length"
				id="length"
				type="tns:NumAttrib" />
						<xs:element
				name="min-length"
				id="minLength"
				type="tns:NumAttrib" />
						<xs:element
				name="max-length"
				id="maxLength"
				type="tns:NumAttrib" />
						<xs:element
				name="pattern"
				id="pattern"
				type="tns:Pattern" />


	<!--       ...Descriptores -->
	<!-- ******************** -->
	<!--
				operationType permite definir la ubicación de un punto final
				en función de la operación.
	-->
		<xs:complexType
				name="operationType">
					<xs:sequence>
								<xs:element
								name="endpoint-location"
									type="xs:string" />
								</xs:sequence>
								<xs:attribute
						name="name">
						<xs:simpleType>
								<xs:restriction
									base="xs:string">
										<xs:enumeration
												value="testConnection" />
										<xs:enumeration
												value="listObjects" />
										<xs:enumeration
												value="describeObject" />
								</xs:restriction>
						</xs:simpleType>
				</xs:attribute>
						</xs:complexType>
</xs:schema>
ci-connector-api.xsd - Antes de poder acceder a un punto final, la aplicación necesita ser capaz de hablar con el correspondiente conector utilizando las llamadas del API del conector. Este archivo describe los tipos de petición/respuesta para las API de TestConnection, ListObjects y DescribeObject. A continuación se muestra el archivo ci-connector-api.xsd:
<xs:schema
		id="ci-cdk-api"
		version="1.0"
		targetNamespace="http://www.approuter.com/schemas/cdk/api/"
		xmlns:tns="http://www.approuter.com/schemas/cdk/api/"
		xmlns:ccc="http://www.approuter.com/schemas/cdk/config/"
		xmlns:xs="http://www.w3.org/2001/XMLSchema"
		xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
		xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
		jaxb:extensionBindingPrefixes="xjc"
		jaxb:version="2.0"
		elementFormDefault="qualified">
		<xs:import
				namespace="http://www.approuter.com/schemas/cdk/config/"
				schemaLocation="ci-connector-config.xsd" />
		<xs:annotation>
				<xs:appinfo>
						<jaxb:schemaBindings>
								<jaxb:package
										name="com.approuter.studio.connectors.cdk.api" />
						</jaxb:schemaBindings>
				</xs:appinfo>
		</xs:annotation>
		<xs:complexType
				name="TestConnection">
					<xs:sequence>
								<xs:element
									name="endpoint"
								type="ccc:EndpointForm" />
								</xs:sequence>
						</xs:complexType>
		<xs:complexType
				name="TestConnectionResponse">
					<xs:sequence>
								<xs:element
								name="success"
								type="xs:boolean" />
								<xs:element
								name="message"
									type="xs:string" />
								</xs:sequence>
						</xs:complexType>
		<xs:complexType
				name="ListObjects">
					<xs:sequence>
								<xs:element
									name="endpoint"
								type="ccc:EndpointForm" />
								<xs:element
												name="operation"
											type="xs:string"
								minOccurs="1" />
								</xs:sequence>
						</xs:complexType>
		<xs:complexType
				name="ListObjectsResponse">
					<xs:sequence>
								<xs:element
								name="objectType"
								type="tns:ObjectType"
								minOccurs="1"
												maxOccurs="unbounded" />
								</xs:sequence>
						</xs:complexType>
		<xs:complexType
				name="ObjectType">
				<xs:simpleContent>
						<xs:extension
								base="xs:string">
										<xs:attribute
									name="label"
												type="xs:string"
												use="optional" />
						</xs:extension>
				</xs:simpleContent>
						</xs:complexType>
		<xs:complexType
				name="DescribeObject">
					<xs:sequence>
								<xs:element
									name="endpoint"
								type="ccc:EndpointForm"
								minOccurs="1" />
								<xs:element
								name="objectType"
											type="xs:string"
								minOccurs="1" />
								<xs:element
									name="operation-name"
									type="xs:string" />
								</xs:sequence>
						</xs:complexType>
		<xs:complexType
				name="DescribeObjectResponse">
					<xs:sequence>
								<xs:element
										name="object"
								type="ccc:ObjectDescriptor" />
								<xs:element
								name="responseObject"
								type="ccc:ObjectDescriptor" />
								</xs:sequence>
				<!-- nombre de parte local de tipo derivado -->
								<xs:attribute
							name="name"
								type="xs:string" />
								<xs:attribute
								name="description"
								type="xs:string" />
				<!-- espacio de nombres de tipo derivado -->
								<xs:attribute
						name="typeNS"
								type="xs:string" />
				<!-- espacio de nombres de tipo base/abstracto -->
								<xs:attribute
						name="baseTypeNS"
								type="xs:string" />
				<!-- nombre de parte local de tipo base/abstracto -->
								<xs:attribute
						name="baseType"
								type="xs:string" />
						</xs:complexType>
</xs:schema>