Come posso rappresentare un diagramma di flusso, completo di logica condizionale usando JSON o XML?

4

Una parte di un progetto a cui sto lavorando è uno script interattivo per il personale del call center. Praticamente tutte le possibilità a cui posso pensare in questo caso possono essere rappresentate sulla carta come un diagramma di flusso, motivo per cui realizzerò un "generatore di script" interattivo che è essenzialmente un generatore di diagrammi di flusso in HTML5 / JS. Questo mi consentirà di aggiungere la logica condizionale agli script, in modo che all'agente possa essere richiesto di dire qualcosa di specifico in base alla risposta della persona chiamata.

Attualmente sono bloccato nella fase di pianificazione: come posso rappresentare ogni script / diagramma di flusso nel mio sistema? Ho bisogno di qualcosa che possa essere completamente rappresentato usando JSON o XML, dato che il sistema è basato sul web.

    
posta leylandski 21.10.2015 - 16:44
fonte

3 risposte

6

In effetti, un diagramma di flusso è solo un grafico di fantasia. Quindi, avrai nodi e bordi. I nodi avranno testo, (facoltativamente) posizione / dimensione e ID univoci. I bordi avranno una coppia di nodi e un nome.

Quindi, supponiamo di avere, "Chiedi all'utente il loro nome.Se il loro nome è Bob, complimentali.Altrimenti, riattacca."

Qualcosa del genere:

var JsonGraph = {
    Root: 1,
    Nodes: {
        1: {Text: "Ask user their name.  Is their name Bob?"},
        2: {Text: "Compliment the user."},
        3: {Text: "Hang up on the user."}
    },
    Edges: [
        {Source:1,Destination:2,Text:"yes"},
        {Source:1,Destination:3,Text:"no"}
    ]
}

Il testo Edge diventa un pulsante all'interno della procedura guidata. Il testo del nodo si trasforma nel testo all'interno della procedura guidata.

    
risposta data 21.10.2015 - 17:54
fonte
2

Durante la scrittura di GoJS abbiamo risolto questo problema con le seguenti regole per i dati:

  • Ogni nodo ha un key , che deve essere univoco
  • I collegamenti possono essere rappresentati in due modi: in modo Tree-like (TreeModel) o come entità oggetto JSON separate (GraphLinksModel)

Se il diagramma di flusso o diagramma viene creato in modo Tree, con un solo genitore per nodo, non è necessario separare i dati JSON per i collegamenti. Invece, ogni nodo può specificare il proprio key ma anche la sua chiave genitore (come parent o qualche altro identificatore), e questo ti dà abbastanza informazioni per rendere ogni link nel grafico.

Alcuni esempi semplificati di JSON per un TreeModel (da Editor organigramma ). Il JSON per i nodi descrive ciascuno con una chiave e descrive la relazione genitore con un'altra chiave:

{"key":"1", "name":"Stella" },
{"key":"2", "name":"Luke", "parent":"1"},
{"key":"3", "name":"Meg", "parent":"2"},

L'altro modo è di avere ogni link rappresentato dal proprio oggetto JSON, ma a differenza dei nodi, i collegamenti non hanno effettivamente bisogno di avere i propri valori di key , devono solo avere un to e from valore che specifica le due chiavi del nodo a cui il collegamento si connette.

L'esempio State Chart utilizza un GraphLinksModel, quindi un oggetto JSON per ogni nodo e ciascun link:

"nodeDataArray": [
  { "id": 0, "text": "Initial" },
  { "id": 1, "text": "First down" },
  { "id": 2, "text": "First up" }
],
"linkDataArray": [
  { "from": 0, "to": 0, "text": "up or timer" },
  { "from": 0, "to": 1, "text": "down" },
  { "from": 1, "to": 0, "text": "up (moved)" },
  ...

Ciò consente più genitori, più collegamenti tra nodi, connessioni a due vie, ecc.

    
risposta data 18.04.2016 - 17:44
fonte
0

I documenti JSON consistono in: dizionari (coppie di valori-chiave), matrici, stringhe, numeri, valori booleani e valori null, dove i valori nei dizionari e negli elementi delle matrici sono nuovamente gli stessi oggetti.

Una volta che hai organizzato i tuoi dati in quel modo, la traduzione in JSON è banale (di solito hai una libreria che fa una singola chiamata).

    
risposta data 22.10.2015 - 20:53
fonte

Leggi altre domande sui tag