Gerador DTD e XSD

Cada API do aplicativo usa XMLs padrão de entrada, saída e de erro. Estes XMLs estão em conformidade com a Definição do Tipo de Documento (DTD) relacionada.

Por exemplo, considere o XML a seguir:

<?xml version="1.0" encoding="UTF-8"> 
<Order EnterpriseCode="DEFAULT" OrderNo="S100" />

A DTD correspondente para este XML é:

<!ELEMENT Order> 
<!ATTLIST Order OrderNo CDATA #IMPLIED> 
<!ATTLIST Order EnterpriseCode CDATA #REQUIRED>

Para criar tais DTDs para o XML estendido, uma ferramenta chamada xsdGenerator.xml é fornecida no diretório <runtime_sandbox>/bin Esta ferramenta converte um arquivo XML especialmente formatado em uma definição de esquema DTD e XML (XSD). O comando para executar a ferramenta é:

Antes de executar o comando a seguir, verifique se você gerou os documentos da API. Para obter mais informações, consulte Geração e acesso ao Javadoc.

sci_ant.sh -f xsdGenerator.xml generate
Também é possível transmitir as seguintes propriedades como argumentos da linha de comandos:
  • xsdgen.use.targetnamespace
  • xsdgen.use.datatypeimport

Por exemplo,

sci_ant.sh  -Dxsdgen.use.targetnamespace=N
-Dxsdgen.use.datatypeimport=N -f xsdGenerator.xml generate
A tabela a seguir contém informações sobre as propriedades do Gerador de XSD:
Campos Descrição
xsdgen.use.targetnamespace Opcional. O valor padrão é Y. Se configurado como Y, os arquivos XSD serão gerados com um namespace de destino definido.
xsdgen.use.datatypeimport Opcional. O valor padrão é Y. Se configurado como Y, todos os arquivos XSD referenciam um único arquivo XSD comum contendo todas as definições de tipo de dados comuns. Se configurado como N, cada arquivo XSD é criado com uma cópia das definições de banco de dados integradas nele.

Navegue até o diretório <runtime_sandbox>/xapidocs/extn/ e crie uma pasta input. Em seguida, coloque os arquivos XML no diretório input criado. Os arquivos DTD e XSD resultantes são colocados nos diretórios <runtime_sandbox>/xapidocs/extn/output/dtd e <runtime_sandbox>/xapidocs/extn/output/xsd, respectivamente.

Nota: quando o xsdgen.use.datatypeimport for configurado como 'Y', ele gerará o arquivo datatypes.xsd atualizado no diretório <runtime_sandbox>/xapidocs/extn/output/xsd baseado no datatypes.xml mesclado, incluindo as extensões de tipo de dados.

Considere o XML de amostra a seguir que poderia ser colocado no diretório de entrada e convertido em XSD e 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>
A tabela a seguir contém descrições de atributos especiais para XML:
Campos Descrição
yfc:QryTypeSupported Este atributo determina se a funcionalidade de tipo de consulta é suportada para os atributos neste elemento ou não. Se configurado como Y, ele entra em vigor para todos os elementos.
yfc:ComplexQuerySupported Este atributo especifica se um tipo de consulta complexa é suportado ou não. Este atributo só pode estar presente no elemento raiz.
yfc:XSDType O nome do tipo a ser usado para a definição de esquema do elemento raiz.
yfc:DTDOccurrence
Este atributo pode conter qualquer um dos seguintes valores:
  • REQUIRED - Este elemento deve estar presente se o elemento-pai está presente.
  • ZeroOrOne - Este elemento é opcional, mas pode ocorrer apenas uma vez.
  • ZeroOrMany - Este elemento é opcional, mas pode ocorrer diversas vezes.
  • OneOrMany - Este elemento é necessário e pode ocorrer diversas vezes.
yfc:UseEntityOrdering
Este atributo determina se todos os filhos de primeiro nível de um elemento são ordenados na sequência em que estão localizados nos xmls da entidade ou não. Este atributo pode conter qualquer um dos seguintes valores:
  • true - Todos os filhos de primeiro nível de um elemento são ordenados na sequência em que eles estão localizados nos xmls da entidade.
  • false - Os filhos de primeiro nível de um elemento não são ordenados na sequência em que eles estão localizados nos xmls da entidade.
xmlns O namespace a ser usado para o targetNameSpace na XSD de saída. Este atributo entrará em vigor somente se ele estiver presente no elemento raiz.

Os atributos com valores de REQUIRED são gerados como atributos necessários na DTD e XSD. No entanto, um atributo necessário existente não pode ser marcado como opcional.

Os valores de atributo também podem ser especificados para fornecer restrições adicionais. Uma lista de opções é separada por uma barra vertical (|). O valor do atributo deve ser uma das opções fornecidas Isto é suportado apenas para tipos de dados baseados nas sequências. Os valores são cortados do caractere de espaço em branco se o valor em si é totalmente espaços, nesse caso, a opção enumerada permanece inalterada.

Por exemplo, SomeAttr="A | B | C | |" resulta em opções válidas de "A", "B", "C", " " e "".

Nota: os DTDs não suportam valores enumerados que contêm apenas caracteres de espaço em branco Portanto, as restrições deste tipo não podem ser representadas na DTD.

Os XMLs de entrada e de saída padrão que podem agir como uma base para seu XML customizado estão localizados no diretório <runtime_sandbox>/xapidocs/xmlstruct/ Observe também que os dados DTDOccurrence e REQUIRED fornecidos para as tabelas padrão são inferidos a partir do arquivo base no diretório xmlstruct e não precisam ser fornecidos. Se eles são fornecidos, as informações existentes são substituídas por quaisquer novas informações presentes nos XMLs customizados. Quaisquer informações necessárias do tipo de dados e relacionamento são obtidas a partir de XMLs de entidade.

Nota: não coloque seus XMLs customizados no diretório xmlstruct

Portanto, quando a ferramenta é executada, estes arquivos XML base servem como padrão para seus arquivos XML customizados, que precisam conter apenas as mudanças feitas por você, tais como os elementos estendidos e atributos. Isso permite que os upgrades futuros modifiquem de forma segura os arquivos XML no diretório xmlstruct. Executar novamente a ferramenta de geração de XSD seleciona automaticamente essas atualizações.

O arquivo XML apropriado no diretório xmlstruct associado ao seu XML customizado identificado pelo nome do arquivo. Seu XML customizado pode iniciar com um prefixo opcional seguido por um sublinhado e o nome do arquivo base. Por exemplo, um arquivo XML customizado denominado Custom_File_YFS_getOrderDetails_input.xml refere-se ao arquivo YFS_getOrderDetails_input.xml no diretório xmlstruct.

No entanto, a convenção de nomenclatura é opcional. Por exemplo, também é possível nomear seu XML customizado sampleCustomApi.xml, mas nenhum arquivo base é usado. Neste caso, a ferramenta envia uma mensagem informativa para indicar que nenhum XML base foi localizado.

Nota: Se desejar usar nosso arquivo XML base para conversão, a convenção de nomenclatura de seu XML customizado deverá ser sufixada apropriadamente. Por exemplo, Custom_File_YFS_getOrderDetails_input.xml usaria o arquivo base denominado YFS_getOrderDetails_input.xml.

O XSD gerado especifica o namespace de destino conforme mostrado abaixo:

<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 namespace é selecionado a partir do atributo xmlns no elemento raiz do XML de entrada e padronizado como http://www.sterlingcommerce.com/documentation.

Os arquivos XSD e DTD contêm atributos de tipo de consulta usados nas APIs de lista quando QryTypeSupported="Y" é configurado no elemento raiz do XML de entrada. De modo semelhante, os tipos de consulta complexos definidos para as APIs getItemList() e getOrganizationList() são representados nos arquivos XSD e DTD quando ComplexQuerySupported="Y" é configurado.

No entanto, em APIs, as seguintes exceções são exibidas nas DTDs uma vez que essas restrições não podem ser representadas em uma DTD pura, XSD ou ambas:
  • Se um XML contiver diversos atributos Extn, apenas a DTD gerada (não a XSD gerada) define um elemento Extn único que aparece como a união de todos os possíveis elementos Extn.
  • Atributos condicionalmente necessários. Por exemplo, é necessário especificar um grupo de atributos ou um outro grupo de atributos, como OrderHeaderKey ou EnterpriseCode/OrderNo.
  • A condição obrigatória de um nó depende de algum valor de atributo. Por exemplo, na API createOrder(), o nó OrderLine é necessário se DraftOrderFlag="N".
Para definir um tipo de dados customizado para um atributo no XSD gerado, execute as etapas a seguir:
  1. Assegure que você tenha estendido o arquivo datatypes.xml e o novo tipo de dados customizado esteja presente no diretório <runtime_sandbox>/xapidocs/api_javadocs/XSD/datatypes.xsd. Se o novo novo tipo de dados não estiver presente em datatypes.xsd, execute o comando a seguir para gerar o datatypes.xsd novamente com base nas extensões datatypes.xml.
    • Para Windows - execute deployer.cmd -t xapideployer
    • Para Linux - execute ./deployer.sh -t xapideployer
  2. Use o tipo de dados customizado, por exemplo, CustomDataType presente em datatypes.xsd para definir um atributo, por exemplo, CustomAttribute em seu XML de entrada presente no diretório <runtime_sandbox>/xapidocs/extn/input

    A seguir, um arquivo arquivo XML de amostra.

    <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>
  3. Execute a ferramenta xsdGenerator.xml para gerar o XSD para o XML de amostra. O XSD gerado contém o atributo CustomAttribute customizado mapeado para o tipo de dados customizado CustomDataType.