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 generatexsdgen.use.targetnamespacexsdgen.use.datatypeimport
Por exemplo,
sci_ant.sh -Dxsdgen.use.targetnamespace=N
-Dxsdgen.use.datatypeimport=N -f xsdGenerator.xml generate| 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.
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> | 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:
|
| 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:
|
| 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 "".
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.
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.
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.
- 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".
- Assegure que você tenha estendido o arquivo
datatypes.xmle 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 emdatatypes.xsd, execute o comando a seguir para gerar odatatypes.xsdnovamente com base nas extensõesdatatypes.xml.- Para Windows - execute
deployer.cmd -t xapideployer - Para Linux - execute
./deployer.sh -t xapideployer
- Para Windows - execute
- Use o tipo de dados customizado, por exemplo,
CustomDataTypepresente emdatatypes.xsdpara definir um atributo, por exemplo,CustomAttributeem seu XML de entrada presente no diretório <runtime_sandbox>/xapidocs/extn/inputA 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> - Execute a ferramenta
xsdGenerator.xmlpara gerar o XSD para o XML de amostra. O XSD gerado contém o atributoCustomAttributecustomizado mapeado para o tipo de dados customizadoCustomDataType.