Associazione dello schema C e C++ a JSON

Il programma di utilità DFHLS2JS supporta le associazioni tra i tipi di dati C e C + + e le definizioni di schema JSON.

I nomi C e C++ vengono convertiti in nomi JSON in base alle seguenti regole:
  1. I caratteri non validi nei nomi delle proprietà JSON vengono sostituiti con ' X '.

    Ad esempio, monthly-total viene convertito in monthlyXtotal.

  2. I nomi duplicati vengono resi univoci aggiungendo una o più cifre numeriche.

    Ad esempio, due istanze di year vengono convertite in year e year1.

DFHLS2JS associa i tipi di dati C e C + + agli elementi dello schema in base alla seguente tabella. I tipi C e C++ non visualizzati nella tabella non sono supportati da DFHLS2JS. Il qualificatore _Packed è supportato per le strutture. Sono valide le seguenti limitazioni:
  • I file di intestazione devono contenere un'istanza struct di livello superiore.
  • Non è possibile dichiarare un tipo di struttura che contiene se stessa come membro.
  • I seguenti tipi di dati C e C++ non sono supportati:
    • decimal
    • long double
    • wchar_t (solo C++)
  • Quanto segue viene ignorato se sono presenti nel file di intestazione.
    Indicatori classe di storage:
    • auto
    • register
    • static
    • extern
    • mutable
    Qualificatori
    • const
    • volatile
    • _Export (solo C++)
    Indicatori di funzione
    • inline (solo C++)
    • virtual (solo C++)
    Valori iniziali
  • Il file di intestazione non deve contenere i seguenti elementi:
    • Unioni
    • Dichiarazioni di classe
    • Tipi di dati di enumerazione
    • Variabili di tipo Pointer
    • Dichiarazioni di template
    • Macro predefinite, ossia macro con nomi che iniziano e terminano con due caratteri di sottolineatura ( __ )
    • Sequenza di continuazione della riga (un simbolo \ seguito immediatamente da un carattere di nuova riga)
    • Dichiaratori di funzione prototipo
    • Direttive preprocessore
    • Campi bit
    • Parola chiave __cdecl (o _cdecl) (solo C++)
  • Il programmatore dell'applicazione deve utilizzare un compilatore a 32-bit per accertarsi che un int venga associato a 4 byte.
  • Le seguenti parole chiave C++ riservate non sono supportate:
    • explicit
    • using
    • namespace
    • typename
    • typeid
  • Se il parametro MAPPING-LEVEL è impostato su 1.2 o superiore e il parametro CHAR-VARYING è impostato su NULL, gli array di caratteri vengono associati a un string e vengono elaborati come stringhe con terminazione null.
  • Se il parametro MAPPING-LEVEL è impostato su 1.2 o su un valore più elevato ed il parametro CHAR-VARYING è impostato su BINARY, gli array di caratteri vengono associati a xsd:base64Binary ed elaborati come dati binari.
  • Se il parametro MAPPING-LEVEL è impostato su 1.2 o su un valore più alto ed il parametro CHAR-VARYING è impostato su COLLAPSE, <xsd:whiteSpace value="collapse"/> viene generato per le stringhe.
Tipo di dati C e C++ simpleType schema
char[ z ]

"type":"string"
"maxlength":
z
char16_t[ n ]

A livello di associazione 4.0 e successivo:


"type":"string"
"maxlength":
n

Al runtime, CICS® popola il campo della struttura dati dell'applicazione con i dati UTF-16 .

char[8]

Supportato al livello di associazione 3.0 e superiore quando DATETIME=PACKED15

"type":"string"
"format":"date-time"
Il formato della data/ora è definito da RFC3339.

char
short
int
long
long long

"type":"integer",
"minimum":- (
n
+ 1),
"maximum":
n
dove n è il valore massimo che può essere rappresentato dalla primitiva.

unsigned char
unsigned short
unsigned int
unsigned long
unsigned long long

"type":"integer",
"minimum":0,
"maximum":
n
dove n è il valore massimo che può essere rappresentato dalla primitiva.
bool
(solo C++)
"type":"boolean"
float
Supportato a livello di associazione 1.2 e successivo.
"type":"number",
"format":"float"
Nota: la rappresentazione dei dati HFP (Esadecimal Floating Point) di IBM® non è esattamente uguale alla rappresentazione IEEE-754-1985 utilizzata per JSON. Alcuni valori potrebbero non essere convertiti esattamente da una rappresentazione all'altra. Alcuni valori estremamente grandi o piccoli potrebbero non essere validi per i tipi di dati mobili. Alcuni valori possono perdere precisione quando vengono convertiti in o dalla rappresentazione HFP. Se è importante utilizzare conversioni precise, prendere in considerazione la sostituzione dei dati float con alternative a precisione fissa.
double
Supportato a livello di associazione 1.2 e successivo.
"type":"number",
"format":"double"
Nota: la rappresentazione dei dati IBM HFP (Esadecimal Floating Point) non è esattamente la stessa della rappresentazione IEEE-754-1985 utilizzata per JSON. Alcuni valori potrebbero non essere convertiti esattamente da una rappresentazione all'altra. Alcuni valori estremamente grandi o piccoli potrebbero non essere validi per i tipi di dati double. Alcuni valori possono perdere precisione quando vengono convertiti in o dalla rappresentazione HFP. Se è importante utilizzare conversioni precise, prendere in considerazione la sostituzione dei tipi di dati double con alternative a precisione fissa.
nome tipo [ n ] Per le primitive:

"type":"array"
"maxItems":
n
"minItems":
n
"items":{
"type":"object",
"properties":{
name
:{
type JSON
}
}
"required":[
name
]
}
Per le strutture:

"type":"array"
"maxItems":
n
"minItems":
n
"items":{
type JSON
}
Dove type JSON è la rappresentazione dello schema JSON del tipo C o C + +.