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 generatexsdgen.use.targetnamespacexsdgen.use.datatypeimport
Ad esempio:
sci_ant.sh -Dxsdgen.use.targetnamespace=N
-Dxsdgen.use.datatypeimport=N -f xsdGenerator.xml generate| 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.
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> | 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:
|
| 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:
|
| 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" ".
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à.
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.
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".
- 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".
- Assicurarsi di aver esteso il file
datatypes.xmle 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 indatatypes.xsd, eseguire il seguente comando per rigenerare ildatatypes.xsdin base alle estensionidatatypes.xml.- Per Windows - eseguire
deployer.cmd -t xapideployer - Per Linux - eseguire
./deployer.sh -t xapideployer
- Per Windows - eseguire
- Utilizzare il tipo di dati personalizzato, ad esempio
CustomDataTypepresente indatatypes.xsdper definire un attributo, ad esempioCustomAttributenell'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> - Eseguire il tool
xsdGenerator.xmlper generare XSD per l'XML di esempio. L'XSD generato contiene l'attributoCustomAttributepersonalizzato associato al tipo dati personalizzatoCustomDataType.