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>