O propunere pentru reprezentarea structurilor grafice in JSON.

Schimbari

Ianuarie 2020 – Actualizat la versiunea 2 de Travis Giggy

  • Modificare majora – nodurile s-au schimbat dintr-o matrice / lista intr-o harta / dictionar
  • Modificari minore – referinta JSONSchema actualizata, adaugat inapoi atributul id de nivel superior
  • Am curatat definitiile JSONSchema profitand de actualizarile JSONSchema

Ianuarie 2021 – Actualizat cu suport hipergraf de mohawk2

  • S-au adaugat hiperborduri la specificatii

Principii de proiectare

  • Structura graficului documentului
  • Utilizati nume de proprietati semnificative care reflecta tipul semantic al valorii.
  • Numele proprietatilor nu trebuie sa fie excesiv de lungi.
  • Numele proprietatilor ar trebui sa fie plural atunci cand valoarea este o matrice.
  • Proprietatile care permit o valoare nula pot fi omise.
  • Definiti o schema grafica JSON in scopul validarii continutului.

Prezentare generala a structurii (versiunea 2)

obiect noduri

Un obiect nod / harta reprezinta noduri intr-un grafic. Fiecare cheie din obiectul noduri este identificatorul unic pentru nod. Obiectul nod este valoarea cheii Harta.

proprietatile obiectului nodului

  • proprietatea eticheta ofera un afisaj text pentru un obiect. Valoarea sa este definita ca un sir JSON .
  • proprietatea metadate permite date personalizate despre un obiect. Valorile sale sunt definite ca un obiect JSON.

matrice de margine

Marginile sunt o serie de obiecte, fiecare dintre ele reprezentand o margine in grafic.

proprietati de margine

  • proprietatea sursa face referire la valoarea cheie a sursei [obiect nod] (# obiect nod). Valoarea sa este definita ca un sir JSON .
  • proprietatea relatiei ofera interactiunea intre nodurile sursa si tinta. Valoarea sa este definita ca un sir JSON .
  • proprietatea tinta face referire la valoarea cheie a obiectului nod tinta. Valoarea sa este definita ca un sir JSON .
  • proprietatea directionata ofera modul de margine (de exemplu, directionat sau nedirectionat). Valoarea sa este JSON adevarat pentru regizat si JSON fals pentru nedirectionat. Directia muchiei este determinata de proprietatea graph.directed daca nu este prezenta.
  • proprietatea metadate permite date personalizate despre un obiect. Valorile sale sunt definite ca un obiect JSON.

matrice de hiperge

Hiperbordurile sunt fie nedirectionate – adica un set de noduri – fie directionate cu un set de noduri sursa si un set de noduri tinta

proprietati hiperge

obiect grafic

Un obiect grafic reprezinta un singur grafic conceptual.

proprietatile graficului

  • Proprietatea id (optionala) ofera un identificator pentru acest obiect grafic
  • Proprietatea de tip ofera o clasificare pentru un obiect. Valoarea sa este definita ca un sir JSON .
  • proprietatea eticheta ofera un afisaj text pentru un obiect. Valoarea sa este definita ca un sir JSON .
  • proprietatea directionata ofera modul grafic (de ex. directionat sau nedirectionat). Valoarea sa este JSON adevarat pentru regizat si JSON fals pentru nedirectionat. Aceasta proprietate implicita este JSON true, indicand un grafic directionat.
  • Proprietatea noduri furnizeaza nodurile din grafic. Valoarea sa este o harta / dictionar de obiecte nod – cheia harta fiind identificatorul nodului.
  • proprietatea margini ofera marginile din grafic. Valoarea sa este o serie de obiecte de margine.
  • proprietatea hyperedges ofera hipergetii din grafic. Valoarea sa este o serie de obiecte hiperge.
  • proprietatea metadate permite date personalizate despre un obiect. Valorile sale sunt definite ca un obiect JSON.

Restrictie curenta asupra uneia dintre margini, hiperborduri nedirectionate sau hiperborduri directionate. Daca aceasta nu este o restrictie utila, va rugam sa postati un caz de utilizare in Probleme.

obiect grafice

Un obiect grafic grupeaza zero sau mai multe obiecte graf intr-un singur document JSON.

  • Obiectul grafic este definit ca o matrice JSON .

Exemple

Exemple suplimentare

grafic unic gol

gol multi grafic

grafic unic numai pentru noduri

{“graph”: {“nodes”: {“A”: {}, “B”: {}}}}

noduri / margini grafic unic

{“graph”: {“nodes”: {“A”: {}, “B”: {}}, “margini”: [{“source”: “A”, “target”: “B”}]} }

hiperborduri grafic unic

{“graph”: {“nodes”: {“A”: {}, “B”: {}}, “hyperedges”: [{“nodes”: [“A”, “B”], “relation”: „asociat”, „metadate”: {}}]}}

grafic unic complet

{“grafic”: {“directionat”: fals, “tip”: “tip grafic”, “eticheta”: “eticheta grafic”, “metadate”: {“definite de utilizator”: “valori”}, “noduri”: {“0”: {“label”: “eticheta nod (0)”, “metadate”: {“type”: “tip nod”, “definite de utilizator”: “valori”}}, “1”: {” label “:” eticheta nodului (1) “,” metadate “: {” type “:” tip nod “,” definite de utilizator “:” valori “}}},” margini “: [{” source “:” 0 “,” relation “:” relatie de margine “,” tinta “:” 1 “,” indreptat “: fals,” eticheta “:” eticheta de margine “,” metadate “: {” definite de utilizator “:„valori”}}]}}}

grafic complet multi

{“grafice”: [{“indreptate”: adevarat, “tip”: “tip de grafic”, “eticheta”: “eticheta de grafic”, “metadate”: {“definite de utilizator”: “valori”}, “noduri” : {“0”: {“label”: “eticheta nod (0)”, “metadate”: {“type”: “tip nod”, “definite de utilizator”: “valori”}}, “1”: { “label”: “eticheta nodului (1)”, “metadate”: {“type”: “tip nod”, “definite de utilizator”: “valori”}}}, “margini”: [{“source”: ” 0 “,” relatie “:” relatie de margine “,” tinta “:” 1 “,” indreptat “: adevarat,” eticheta “:” eticheta de margine “,” metadate “: {” definita de utilizator “:”valori”}}]}, {“directionat”: adevarat, “tip”: “tip grafic”, “eticheta”: “eticheta grafic”, “metadate”: {“definite de utilizator”: “valori”}, ” noduri “: {” 0 “: {” eticheta “:” eticheta nod (0) “,” metadate “: {” definite de utilizator “:” valori “}},” 1 “: {” eticheta “:” eticheta nod (1) “,” metadate “: {” definite de utilizator “:” valori “}}},” margini “: [{” sursa “:” 1 “,” relatie “:” relatie de margine “,” tinta “: „0”, „regizat”: adevarat, „eticheta”: „eticheta de margine”, „metadate”: {„definite de utilizator”: „valori”}}]}]}adevarat, “tip”: “tip grafic”, “eticheta”: “eticheta grafic”, “metadate”: {“definite de utilizator”: “valori”}, “noduri”: {“0”: {“eticheta”: “eticheta nod (0)”, “metadate”: {“definite de utilizator”: “valori”}}, “1”: {“eticheta”: “eticheta nod (1)”, “metadate”: {“utilizator- definit “:” valori “}}},” margini “: [{” sursa “:” 1 “,” relatie “:” relatie de margine “,” tinta “:” 0 “,” indreptat “: adevarat,” eticheta ” : “eticheta de margine”, “metadate”: {“definite de utilizator”: “valori”}}]}]}adevarat, “tip”: “tip grafic”, “eticheta”: “eticheta grafic”, “metadate”: {“definite de utilizator”: “valori”}, “noduri”: {“0”: {“eticheta”: “eticheta nod (0)”, “metadate”: {“definite de utilizator”: “valori”}}, “1”: {“eticheta”: “eticheta nod (1)”, “metadate”: {“utilizator- definit “:” valori “}}},” margini “: [{” sursa “:” 1 “,” relatie “:” relatie de margine “,” tinta “:” 0 “,” indreptat “: adevarat,” eticheta ” : “eticheta de margine”, “metadate”: {“definite de utilizator”: “valori”}}]}]}metadata “: {” definite de utilizator “:” valori “},” noduri “: {” 0 “: {” eticheta “:” eticheta nod (0) “,” metadate “: {” definite de utilizator “:” valori “}},” 1 “: {” label “:” eticheta nodului (1) “,” metadata “: {” definite de utilizator “:” valori “}}},” margini “: [{” sursa “:” 1 “,” relatie “:” relatie de margine “,” tinta “:” 0 “,” indreptat “: adevarat,” eticheta “:” eticheta de margine “,” metadate “: {” definite de utilizator “:” valori “} }]}]}metadata “: {” definite de utilizator “:” valori “},” noduri “: {” 0 “: {” eticheta “:” eticheta nod (0) “,” metadate “: {” definite de utilizator “:” valori “}},” 1 “: {” label “:” eticheta nodului (1) “,” metadata “: {” definite de utilizator “:” valori “}}},” margini “: [{” sursa “:” 1 “,” relatie “:” relatie de margine “,” tinta “:” 0 “,” indreptat “: adevarat,” eticheta “:” eticheta de margine “,” metadate “: {” definite de utilizator “:” valori “} }]}]}”valori”}}, “1”: {“eticheta”: “eticheta nod (1)”, “metadate”: {“definite de utilizator”: “valori”}}}, “margini”: [{“sursa” : “1”, “relatie”: “relatie de margine”, “tinta”: “0”, “indreptat”: adevarat, “eticheta”: “eticheta de margine”, “metadate”: {“definite de utilizator”: “valori “}}]}]}}”valori”}}, “1”: {“eticheta”: “eticheta nod (1)”, “metadate”: {“definite de utilizator”: “valori”}}}, “margini”: [{“sursa” : “1”, “relatie”: “relatie de margine”, “tinta”: “0”, “indreptat”: adevarat, “eticheta”: “eticheta de margine”, “metadate”: {“definite de utilizator”: “valori “}}]}]}}{“user-defined”: “valori”}}]}]]}{“user-defined”: “valori”}}]}]]}

Schema

Schema graficului JSON (versiunea 2) este furnizata pentru formatul graficului JSON.

Tipul suportului

Tipul de suport pentru descrierea formatului graficului JSON este application / vnd.jgf + json . Abordarea de a utiliza un sufix de tip media ca + json este descrisa de RFC 6839.

In plus fata de tipul de suport, un parametru de tip suport de profil TREBUIE sa fie setat la o adresa URL care anuleaza referinta la schema JSON pentru JSON Graph Format. Utilizarea asteptata a parametrului de tip media de profil este definita de RFC 6906. De exemplu, pentru a comunica continut simplu in format JSON Graph, antetul Content-Type ar putea fi setat ca:

Tip continut: application / vnd.jgf + json

O schema copil al JSON Graph Format poate comunica schema sa JSON folosind suplimentare ale profilului parametri de tip media. Fiecare parametru de tip de suport de profil TREBUIE sa derespere o schema JSON. De exemplu, formatul de grafic BEL JSON ar putea fi comunicat ca:

Content-Type: application / vnd.jgf + json; profil = http: //jsongraphformat.info/schema.json; profil = http: //jsongraphformat.info/child-schemas/bel-json-graph.schema.json

Suport NPM

Puteti importa schema in proiectele dvs. JS instaland-o prin NPM si solicitand-o.

npm install – salveaza json-graph-specification
var JSONGraph = require (‘json-graph-specification’)

Clienti

  1. jay-gee-eff – Un pachet npm pentru manipularea fisierelor JGF din nodejs.
  2. jay-gee-eff-for-web – Un pachet npm pentru utilizarea graficelor JGF cu OOP in web, adica browsere web, fara capacitati de gestionare a fisierelor, dar un set de caracteristici JGF complet.

Teste de proiect

Vezi TESTARE.

Standarde conexe {#links}

Datele grafice in JSON sunt de obicei modelate in formate ad-hoc specifice aplicatiei. In plus, exista mai multe formate de grafice bazate pe text:

  • Limbajul de modelare a graficelor (GML)
  • DOT (sintaxa graphviz)
  • Formatul Pajekt NET
  • Netdraw format VNA
  • Format UCINET DL
  • Trivial Graph Format (TGF)
  • Format GUESS (GDF)
  • Format Tulip TLP

si formate grafice bazate pe XML:

  • Limbaj de marcare a graficelor directionate (DGML)
  • Format XML de schimb de grafice (GEXF)
  • Limba eXchange Graph (GXL)
  • GraphML
  • DotML (reprezentare XML a DOT)
  • XGMML (reprezentare XML a GML)

Mai multe formate de grafice semi-standardizate bazate pe JSON se gasesc in aplicatii, de exemplu Cytoscape JSON. Graficele simple pot fi exprimate si in format CSV.

Link-uri

  • Schema JSON