Generador de DTD y XSD
Cada API de aplicación utiliza XML de entrada, salida y error estándar. Estos XML se ajustan a la definición de tipo de documento relacionado (DTD).
Por ejemplo, contemple el XML siguiente:
<?xml version="1.0" encoding="UTF-8">
<Order EnterpriseCode="DEFAULT" OrderNo="S100" />La DTD correspondiente para este XML es:
<!ELEMENT Order>
<!ATTLIST Order OrderNo CDATA #IMPLIED>
<!ATTLIST Order EnterpriseCode CDATA #REQUIRED>Para crear estas DTD para el XML ampliado, se proporciona una herramienta denominada xsdGenerator.xml en el directorio <runtime_sandbox>/bin . Esta herramienta convierte un archivo XML con formato especial en una definición de esquema XML y DTD (XSD). El mandato para ejecutar la herramienta es:
Antes de ejecutar el siguiente comando, asegúrese de generar documentos API. Para más información, consulte Generación y acceso a Javadoc.
sci_ant.sh -f xsdGenerator.xml generatexsdgen.use.targetnamespacexsdgen.use.datatypeimport
Por ejemplo:
sci_ant.sh -Dxsdgen.use.targetnamespace=N
-Dxsdgen.use.datatypeimport=N -f xsdGenerator.xml generate| Campos | Descripción |
|---|---|
| xsdgen.use.targetnamespace | Opcional. El valor predeterminado es Y. Si se establece en Y, los archivos XSD se generan con un espacio de nombres de destino definido. |
| xsdgen.use.datatypeimport | Opcional. El valor predeterminado es Y. Si se establece en Y, todos los archivos XSD hacen referencia a un único archivo XSD común que contiene todas las definiciones de tipo de datos comunes. Si se establece en N, cada archivo XSD se crea con una copia de las definiciones de base de datos incluidas. |
Vaya al directorio " <runtime_sandbox>/xapidocs/extn/ " y cree una carpeta " input ". A continuación, coloque los archivos XML en el directorio input creado. Los archivos DTD y XSD resultantes se colocan en los directorios <runtime_sandbox>/xapidocs/extn/output/dtd y <runtime_sandbox>/xapidocs/extn/output/xsd respectivamente.
Considere el siguiente ejemplo de XML que se podría colocar en el directorio de entrada y convertirse en XSD y DTD:
<Item yfc:DTDOccurrence="REQUIRED" ItemKey="" ItemID="REQUIRED"
OrganizationCode="REQUIRED" UnitOfMeasure="">
<PrimaryInformation Description="" ItemType="" />
<AdditionalAttributeList>
<AdditionalAttribute Name="" Value=""/>
</AdditionalAttributeList>
<Extn ExtnAttr1="" ExtnRefId="">
<CSTItemDataList yfc:DTDOccurrence="ZeroOrOne">
<CSTItemData yfc:DTDOccurrence="ZeroOrMany" ItemDataKey=""
Description="">
<CSTItemExtraData yfc:DTDOccurrence="ZeroOrOne" CodeType=""
DataType="" />
<YFSCommonCode yfc:DTDOccurrence="REQUIRED" CodeName=""
CodeType="" CodeValue="" />
</CSTItemData>
</CSTItemDataList>
</Extn>
</Item> | Campos | Descripción |
|---|---|
| yfc:QryTypeSupported | Este atributo determina si la funcionalidad de tipo de consulta está soportada para los atributos en este elemento. Si se establece en Y, entra en vigor para todos los elementos. |
| yfc:ComplexQuerySupported | Este atributo especifica si está soportado un tipo de consulta compleja. Este atributo sólo puede estar presente en el elemento raíz. |
| yfc:XSDType | Nombre del tipo que se utilizará para el elemento raíz de la definición de esquema. |
| yfc:DTDOccurrence | Este atributo puede contener cualquiera de los valores siguientes:
|
| yfc:UseEntityOrdering | Este atributo determina si los hijos de primer nivel de un elemento están ordenados en la secuencia en la que se encuentran en los xmls de entidad. Este atributo puede contener cualquiera de los valores siguientes:
|
| xmlns | El espacio de nombres para targetNameSpace en el XSD de salida. Este atributo sólo entra en vigor si está presente en el elemento raíz. |
Los atributos con valores de REQUIRED se generan como atributos necesarios en
DTD y XSD. No obstante, un atributo necesario existente no se puede marcar como opcional.
Los valores de atributo también se pueden especificar para proporcionar restricciones adicionales. Una lista de opciones está separada por una barra vertical (|). El valor del atributo debe ser una de las opciones especificadas. Esto sólo está soportado para tipos de datos basados en series. Se quita el carácter de espacio en blanco de los valores si el propio valor es totalmente espacios, en cuyo caso la opción enumerada permanece sin alterar.
Por ejemplo, SomeAttr="A
| B | C | |" da como resultado opciones válidas de "A", "B", "C", "
" y "".
Los XML de entrada y salida predeterminados que pueden actuar como base para el XML personalizado se encuentran en el directorio <runtime_sandbox>/xapidocs/xmlstruct/ . Además, observe que los datos de DTDOccurrence y REQUIRED suministrados para las tablas estándar se deducen del archivo base en el directorio xmlstruct y no necesitan suministrarse. Si se proporcionan, la información existente se sustituye por cualquier información presente en los XML personalizados. Cualquier tipo de datos e información de relación se obtienen de los XML de entidad.
Por consiguiente, cuando se ejecuta la herramienta, estos archivos XML base sirven de valor predeterminado para los archivos XML personalizados, que sólo necesitan contener los cambios que efectúe como elementos y atributos ampliados. Esto permite a futuras actualizaciones modificar con seguridad los archivos XML en el directorio xmlstruct. Volver a ejecutar la herramienta de generación de XSD recoge automáticamente estas actualizaciones.
El archivo XML adecuado en el directorio xmlstruct asociado con el XML personalizado se identifica mediante el nombre de archivo. El XML personalizado puede empezar por un prefijo opcional seguido de un subrayado y el nombre del archivo base. Por ejemplo, un archivo XML personalizado denominado Custom_File_YFS_getOrderDetails_input.xml hace referencia al archivo YFS_getOrderDetails_input.xml en el directorio xmlstruct.
No obstante, el convenio de denominación es opcional. Por ejemplo, también puede denominar el archivo sampleCustomApi.xml personalizado, pero no se utiliza ningún archivo base. En este caso, la herramienta genera como salida un mensaje informativo para indicar que no se ha encontrado ningún XML base.
El XSD generado especifica el espacio de nombres de destino tal como se muestra a continuación:
<xsd:schema attributeFormDefault="unqualified"
elementFormDefault="qualified"
targetNamespace="http://www.sterlingcommerce.com/documentation"
xmlns:xsd=http://www.w3.org/2001/XMLSchema
xmlns:yfc="http://www.sterlingcommerce.com/documentation">Este espacio de nombres se recoge del atributo xmlns en el elemento raíz del XML de entrada y tiene como valor predeterminado http://www.sterlingcommerce.com/documentation.
Los archivos
XSD y DTD contienen atributos de tipo de consulta utilizados en API de lista cuando
QryTypeSupported="Y" se establece en el elemento raíz del XML de entrada. Asimismo, los tipos de consultas complejas definidas para las API getItemList()
y getOrganizationList() se representan en los archivos XSD y DTD cuando ComplexQuerySupported="Y" está establecido.
- Si una XML contiene varios atributos Extn, la DTD generada (no la XSD generada) sólo define un único elemento Extn que aparece como la unión de todos los elementos Extn posibles.
- Atributos necesarios condicionalmente. Por ejemplo, necesita especificar un grupo de atributos u otro grupo de atributos tales como OrderHeaderKey o EnterpriseCode/OrderNo.
- La condición obligatoria de un nodo depende de cierto valor de atributo. Por ejemplo, en la API createOrder(), el nodo OrderLine es necesario si
DraftOrderFlag="N".
- Asegúrese de que ha ampliado el archivo
datatypes.xmly de que el nuevo tipo de datos personalizado está presente en el directorio <runtime_sandbox>/xapidocs/api_javadocs/XSD/datatypes.xsd. Si el nuevo tipo de datos no está presente endatatypes.xsd, ejecute el siguiente mandato para volver a generar el archivodatatypes.xsdbasado en las extensiones dedatatypes.xml.- Para Windows - ejecute
deployer.cmd -t xapideployer - Para Linux - ejecute
./deployer.sh -t xapideployer
- Para Windows - ejecute
- Utilice el tipo de datos personalizado, por ejemplo
CustomDataTypepresente endatatypes.xsdpara definir un atributo, por ejemplo,CustomAttributeen el XML de entrada presente en el directorio <runtime_sandbox>/xapidocs/extn/input .El ejemplo siguiente corresponde a un archivo XML.
<Item yfc:DTDOccurrence="REQUIRED" ItemKey="" ItemID="REQUIRED" OrganizationCode="REQUIRED" UnitOfMeasure=""> <PrimaryInformation Description="" ItemType="" CustomAttribute=""> <yfc:doc> <Attributes> <Attribute DataType="CustomDataType" Name="CustomAttribute"/> </Attributes> </yfc:doc> <PrimaryInformation/> </Item> - Ejecute la herramienta
xsdGenerator.xmlpara generar la XSD para el XML de ejemplo. La XSD generada contiene el atributoCustomAttributepersonalizado correlacionado con el tipo de datos personalizadoCustomDataType.