Generatore DTD e XSD

Ogni applicazione API utilizza XML di input, output e di errori standard. Questi XML sono conformi al DTD (Document Type Definition) correlato.

Ad esempio, considerare il seguente XML:

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

Il DTD corrispondente per questo XML è:

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

Per creare tali DTD per l'XML esteso, uno strumento denominato xsdGenerator.xml viene fornito nella directory <runtime_sandbox>/bin . Questo strumento converte un file XML formattato in modo speciale in un DTD e XSD (XML Schema Definition). Il comando per eseguire lo strumento è:

Prima di eseguire il comando seguente, assicurarsi di aver generato i documenti API. Per ulteriori informazioni, vedere Generazione e accesso a Javadoc.

sci_ant.sh -f xsdGenerator.xml generate
È possibile anche passare le seguenti proprietà come argomenti della riga comandi:
  • xsdgen.use.targetnamespace
  • xsdgen.use.datatypeimport

Ad esempio:

sci_ant.sh  -Dxsdgen.use.targetnamespace=N
-Dxsdgen.use.datatypeimport=N -f xsdGenerator.xml generate
La seguente tabella contiene informazioni sulle proprietà del generatore XSD:
Campi Descrizione
xsdgen.use.targetnamespace Facoltativo. Il valore predefinito è Y. Se impostato su Y, i file XSD vengono generati con uno spazio dei nomi di destinazione definito.
xsdgen.use.datatypeimport Facoltativo. Il valore predefinito è Y. Se impostato su Y, tutti i file XSD fanno riferimento a un singolo file XSD comune contenente tutte le definizioni di tipo di dati comuni. Se impostato su N, ogni file XSD viene creato con una copia delle definizioni di database al suo interno.

Navigare nella cartella <runtime_sandbox>/xapidocs/extn/ e creare una cartella input. Quindi, inserire i file XML nella cartella creata input. I file DTD e XSD risultanti sono collocati rispettivamente nelle directory <runtime_sandbox>/xapidocs/extn/output/dtd e <runtime_sandbox>/xapidocs/extn/output/xsd.

Nota: quando xsdgen.use.datatypeimport è impostato su 'Y', genererà il file datatypes.xsd aggiornato nella directory <runtime_sandbox>/xapidocs/extn/output/xsd in base all'unione datatypes.xml , incluse le estensioni del tipo di dati.

Considerare il seguente XML di esempio che potrebbe essere collocato nella directory di immissione e convertito in un 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>
La seguente tabella contiene descrizioni di attributi speciali per XML:
Campi Descrizione
yfc:QryTypeSupported Questo attributo determina se la funzionalità del tipo di query è supportata o meno per gli attributi in questo elemento. Se impostato su Y, diventa effettivo per tutti gli elementi.
yfc:ComplexQuerySupported Questo attributo specifica se è supportato o meno un tipo di query complessa. Questo attributo può essere solo presente nell'elemento root.
yfc: XSDType Il nome del tipo da utilizzare per la definizione dello schema dell'elemento root.
yfc: DTDOccurrence
Questo attributo può contenere uno dei seguenti valori:
  • OBBLIGATORIO - Questo elemento deve essere presente se è presente l'elemento parent.
  • ZeroOrOne - Questo elemento è facoltativo, ma può essere presente solo una volta.
  • ZeroOrMany - Questo elemento è facoltativo, ma può essere presente più volte.
  • OneOrMany - Questo elemento è obbligatorio e può essere presente più volte.
yfc:UseEntityOrdering
Questo attributo determina se tutti gli elementi secondari di primo livello di un elemento sono ordinati nella sequenza in cui si trovano negli xmls dell'entità. Questo attributo può contenere uno dei seguenti valori:
  • true - Tutti gli elementi figlio di primo livello di un elemento vengono ordinati nella sequenza in cui si trovano nell'entità xmls.
  • false - Gli elementi secondari di primo livello di un elemento non sono ordinati nella sequenza in cui si trovano nell'entità xmls.
xmlns Lo spazio dei nomi da usare per il targetNameSpace nell'XSD di output. Questo attributo ha effetto solo se è presente nell'elemento root.

Gli attributi con valori di REQUIRED vengono generati come attributi richiesti in DTD e XSD. Tuttavia, un attributo obbligatorio esistente non può essere contrassegnato come facoltativo.

I valori attributo possono essere specificati anche per fornire ulteriori vincoli. Un elenco di opzioni è separato da una barra verticale (|). Il valore dell'attributo deve essere una delle opzioni fornite. Ciò è supportato solo per i tipi di dati basati sulle stringhe. I valori vengono ritagliati del carattere spazio se il valore stesso è costituito interamente da spazi, nel qual caso l'opzione enumerata rimane invariata.

Ad esempio, SomeAttr="A | B | C | |" risulta in opzioni valide di "A", "B", "C", " "e" ".

Nota: i DTD non supportano valori enumerati contenenti solo caratteri spazio. Pertanto, le limitazioni di questo tipo non possono essere rappresentate nel DTD.

Gli XML di input e output predefiniti che possono agire come base per l'XML personalizzato si trovano nella directory <runtime_sandbox>/xapidocs/xmlstruct/ . Notare inoltre che i dati DTDOccurrence e REQUIRED forniti per le tabelle standard vengono dedotti dal file di base nella directory xmlstruct e non è necessario fornirlo. Se vengono fornite, le informazioni esistenti vengono sovrascritte da tutte le nuove informazioni presenti negli XML personalizzati. I tipi di dati e le informazioni di relazione richiesti vengono ottenuti dagli XML di entità.

Nota: non inserire gli XML personalizzati nella directory xmlstruct.

Di conseguenza, quando lo strumento viene eseguito, questi file XML di base vengono utilizzati come valori predefiniti per i file XML personalizzati, che devono contenere solo le modifiche apportate dall'utente, ad esempio gli elementi e attributi estesi. Ciò consente futuri aggiornamenti per modificare in modo sicuro i file XML nella directory xmlstruct. Rieseguendo lo strumento di creazione XSD, si selezionano automaticamente questi aggiornamenti.

Il file XML appropriato nella directory xmlstruct associata all'XML personalizzato viene identificato dal nome file. L'XML personalizzato può iniziare con un prefisso facoltativo seguito da un carattere di sottolineatura e dal nome file di base. Ad esempio, un file XML personalizzato chiamato Custom_File_YFS_getOrderDetails_input.xml fa riferimento al file YFS_getOrderDetails_input.xml nella directory xmlstruct.

Tuttavia, la convenzione di denominazione è facoltativa. Ad esempio, si può anche nominare l'XML personalizzato sampleCustomApi.xml, ma non viene utilizzato alcun file di base. In tal caso, lo strumento emette un messaggio informativo per indicare che non viene trovato alcun XML di base.

Nota: se si desidera utilizzare il file XML di base per la conversione, la convenzione di denominazione dell'XML personalizzato deve avere un suffisso appropriato. Ad esempio, Custom_File_YFS_getOrderDetails_input.xml utilizzerà il file di base denominato YFS_getOrderDetails_input.xml.

L'XSD generato specifica lo spazio dei nomi di destinazione come mostrato di seguito:

<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">

Questo spazio dei nomi viene prelevato dall'attributo xmlns sull'elemento root dell'XML di input e viene impostato sul valore predefinito http://www.sterlingcommerce.com/documentation.

I file XSD e DTD contengono attributi del tipo di query utilizzati nelle API di elenco quando QryTypeSupported="Y" viene impostato nell'elemento root dell'XML di input. Allo stesso modo, i tipi di query complesse definite per le API getItemList( ) e getOrganizationList( ) sono rappresentate nei file XSD e DTD quando è impostato ComplexQuerySupported="Y".

Tuttavia, nelle API vengono mostrate le seguenti eccezioni nei DTD poiché questi vincoli non possono essere rappresentati in un DTD puro, XSD o entrambi:
  • Se un XML contiene più attributi Extn, il DTD generato (XSD non generato) definisce un singolo elemento Extn che viene visualizzato come unione di tutti i possibili elementi Extn.
  • Attributi richiesti in modo condizionale. Ad esempio, è necessario specificare un gruppo di attributi o un altro gruppo di attributi come OrderHeaderKey o EnterpriseCode/OrderNo.
  • La condizione obbligatoria di un nodo dipende da alcuni valori di attributo. Ad esempio, nell'API createOrder( ), il nodo OrderLine è necessario se il nodo DraftOrderFlag="N".
Per definire un tipo di dati personalizzato per un attributo nell'XSD generato, effettuare le seguenti operazioni:
  1. Assicurarsi di aver esteso il file datatypes.xml e che il nuovo tipo di dati personalizzato sia presente nella directory <runtime_sandbox>/xapidocs/api_javadocs/XSD/datatypes.xsd. Se il nuovo tipo di dati non è presente in datatypes.xsd, eseguire il seguente comando per rigenerare il datatypes.xsd in base alle estensioni datatypes.xml .
    • Per Windows - eseguire deployer.cmd -t xapideployer
    • Per Linux - eseguire ./deployer.sh -t xapideployer
  2. Utilizzare il tipo di dati personalizzato, ad esempio CustomDataType presente in datatypes.xsd per definire un attributo, ad esempio CustomAttribute nell'XML di input presente nella directory <runtime_sandbox>/xapidocs/extn/input .

    Di seguito è riportato un esempio di file 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>
  3. Eseguire il tool xsdGenerator.xml per generare XSD per l'XML di esempio. L'XSD generato contiene l'attributo CustomAttribute personalizzato associato al tipo dati personalizzato CustomDataType .