Rust implementation of NextGraph, a Decentralized and local-first web 3.0 ecosystem
https://nextgraph.org
byzantine-fault-tolerancecrdtsdappsdecentralizede2eeeventual-consistencyjson-ldlocal-firstmarkdownocapoffline-firstp2pp2p-networkprivacy-protectionrdfrich-text-editorself-hostedsemantic-websparqlweb3collaboration
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
875 lines
35 KiB
875 lines
35 KiB
// Copyright (c) 2022-2024 Niko Bonnieure, Par le Peuple, NextGraph.org developers
|
|
// All rights reserved.
|
|
// Licensed under the Apache License, Version 2.0
|
|
// <LICENSE-APACHE2 or http://www.apache.org/licenses/LICENSE-2.0>
|
|
// or the MIT license <LICENSE-MIT or http://opensource.org/licenses/MIT>,
|
|
// at your option. All files in the project carrying such
|
|
// notice may not be copied, modified, or distributed except
|
|
// according to those terms.
|
|
|
|
// "post/rich", "post/md", "post/text", "post/html", "post/asciidoc", "page", "code", "code/*", "app", "app/z", "class", "schema", "schema/owl|rdfs|shacl|shex", "service", "service/rust", "service/deno", "contract", "app/n:xxx.xx.xx:", "app/o:",
|
|
// "query/sparql", "query/graphql", "query/text", "query/web",
|
|
// "data/graph", "data/json", "data/array", "data/map", "data/xml", "data/table", "data/collection", "data/board", "data/grid", "data/geomap",
|
|
// "e/email", "e/web", "e/http://[url of class in ontology]", "e/rdf" (read-only cache of RDF fetched from web2.0)
|
|
// "mc/text", "mc/link", "mc/card", "mc/pad",
|
|
// "doc/diagram","doc/chart", "doc/pdf", "doc/odf", "doc/latex", "doc/ps", "doc/music", "doc/maths", "doc/chemistry", "doc/braille", "doc/ancientscript",
|
|
// "media/image", "media/reel", "media/album", "media/video", "media/audio", "media/song", "media/subtitle", "media/overlay",
|
|
// "social/channel", "social/stream", "social/contact", "social/event", "social/calendar", "social/scheduler", "social/reaction"
|
|
// "prod/task", "prod/project", "prod/issue", "prod/form", "prod/filling", "prod/cad", "prod/slides", "prod/question", "prod/answer", "prod/poll", "prod/vote"
|
|
// "file", "file/iana/*", "file/gimp", "file/inkscape", "file/kdenlive", "file/blender", "file/openscad", "file/lyx", "file/scribus", "file/libreoffice", "file/audacity"
|
|
|
|
|
|
// application/vnd.api+json
|
|
|
|
// application/activity+json
|
|
|
|
// epub, dejavu,
|
|
// animation: snap, lottie, smil editor: https://github.com/HaikuTeam/animator/
|
|
|
|
export const official_classes = {
|
|
"post/rich": {
|
|
"ng:crdt": "YXml",
|
|
"ng:n": "Post - Rich Text", // editor: y-ProseMirror, viewer: https://www.npmjs.com/package/prosemirror-to-html-js or https://prosemirror.net/docs/ref/version/0.4.0.html#toDOM https://prosemirror.net/docs/ref/version/0.4.0.html#toHTML
|
|
"ng:a": "A Post with Rich Text, including images, links, formatted text, and embeds of other content",
|
|
"ng:o": "n:g:z:post:rich",
|
|
"ng:w": "n:g:z:post_rich_editor",
|
|
"ng:x": {
|
|
"as":true,
|
|
},
|
|
"ng:compat": ["as:Article"],
|
|
},
|
|
"post/md": {
|
|
"ng:crdt": "YXml",
|
|
"ng:n": "Post - MarkDown", // editor y-MilkDown, viewer: https://github.com/wooorm/markdown-rs
|
|
"ng:a": "A Post with MarkDown, including images, links, formatted text, and embeds of other content",
|
|
"ng:o": "n:g:z:post:md",
|
|
"ng:w": "n:g:z:post_md_editor",
|
|
"ng:x": {
|
|
"as":true,
|
|
},
|
|
"ng:compat": ["file/iana/text/markdown", "code/markdown","as:Article"],
|
|
},
|
|
"post/text": {
|
|
"ng:crdt": "YText",
|
|
"ng:n": "Post - Plain Text",
|
|
"ng:a": "A Post with Plain Text",
|
|
"ng:o": "n:g:z:post:text",
|
|
"ng:w": "n:g:z:code_editor",
|
|
"ng:x": {
|
|
"as":true,
|
|
},
|
|
"ng:compat": ["file/iana/text/plain", "code/plaintext","as:Article"],
|
|
},
|
|
"post/html": {
|
|
"ng:crdt": "YXml",
|
|
"ng:n": "Post - TinyMCE",
|
|
"ng:x": {
|
|
"as":true,
|
|
},
|
|
"ng:a": "A Post based on TinyMCE, including images, links, formatted text, and embeds of other content",
|
|
"ng:compat": ["as:Article"],
|
|
},
|
|
"post/asciidoc": { // display with https://github.com/asciidoctor/asciidoctor.js/
|
|
"ng:crdt": "YText",
|
|
"ng:n": "Post - AsciiDoc",
|
|
"ng:a": "A Post based on AsciiDoc format",
|
|
"ng:x": {
|
|
"as":true,
|
|
},
|
|
"ng:compat": ["as:Article"],
|
|
},
|
|
"page": {
|
|
"ng:crdt": "YXml",
|
|
"ng:n": "Page", // based on GrapeJS, VvvebJs, or Astro ?
|
|
"ng:a": "A Page and Site builder",
|
|
"ng:compat": [],
|
|
},
|
|
"code": {
|
|
"ng:crdt": "YText",
|
|
"ng:n": "Source Code", // edited with CodeMirror, displayed with highlight.js
|
|
"ng:a": "A Source Code file. many languages supported",
|
|
"ng:o": "n:g:z:pre",
|
|
"ng:w": "n:g:z:code_editor",
|
|
"ng:compat": ["code/*","file/iana/text/javascript","file/iana/text/css","file/iana/text/html","file/iana/text/markdown", "file/iana/application/xml",
|
|
"file/iana/application/yaml", "file/iana/text/xml", "file/iana/application/xhtml+xml"],
|
|
},
|
|
"app": {
|
|
"ng:n": "Official App",
|
|
"ng:a": "App provided by NextGraph platform",
|
|
},
|
|
"app/z": {
|
|
"ng:crdt": "Elmer",
|
|
"ng:n": "Application", // Editor: Monaco
|
|
"ng:a": "Create an Application based on NextGraph Framework",
|
|
"ng:o": "n:g:z:app_store",
|
|
"ng:w": "n:g:z:app_editor",
|
|
"ng:include": ["schema/*","service/*","code","file"],
|
|
"ng:compat": ["code/svelte"],
|
|
},
|
|
"class": {
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "Class",
|
|
"ng:a": "Define a custom Class for your data",
|
|
"ng:x": {
|
|
"rdfs":true,
|
|
},
|
|
"ng:compat": ["rdfs:Class"],
|
|
},
|
|
"schema/rdfs": {
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "Schema - RDFS",
|
|
"ng:a": "Define the Schema, Ontology or Vocabulary for your data and the relations between them, with RDFS",
|
|
"ng:o": "n:g:z:json_ld_editor", // default viewer
|
|
"ng:w": "n:g:z:ontology_editor", // default editor
|
|
"ng:x": {
|
|
"rdfs":true,
|
|
},
|
|
"ng:include": ["data/graph"],
|
|
"ng:compat": ["rdfs:*","class"],
|
|
},
|
|
"schema/owl": { // display with https://github.com/VisualDataWeb/WebVOWL
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "Schema - OWL",
|
|
"ng:a": "Define the Schema, Ontology or Vocabulary for your data and the relations between them, with OWL",
|
|
"ng:o": "n:g:z:owl_viewer", // default viewer
|
|
"ng:w": "n:g:z:ontology_editor", // default editor
|
|
"ng:x": {
|
|
"owl":true,
|
|
},
|
|
"ng:include": ["data/graph"],
|
|
"ng:compat": ["owl:Ontology"],
|
|
},
|
|
"schema/shacl": {
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "Schema - SHACL",
|
|
"ng:a": "Define the Schema, Ontology or Vocabulary for your data and the relations between them, with SHACL",
|
|
"ng:o": "n:g:z:json_ld_editor", // default viewer
|
|
"ng:w": "n:g:z:ontology_editor", // default editor
|
|
"ng:x": {
|
|
"sh":true,
|
|
},
|
|
"ng:include": ["data/graph"],
|
|
"ng:compat": ["sh:Shape", "file/iana/text/shaclc" ],
|
|
},
|
|
"schema/shex": {
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "Schema - SHEX",
|
|
"ng:a": "Define the Schema, Ontology or Vocabulary for your data and the relations between them, with SHEX",
|
|
"ng:o": "n:g:z:json_ld_editor", // default viewer
|
|
"ng:w": "n:g:z:ontology_editor", // default editor
|
|
"ng:x": {
|
|
"shex":true,
|
|
},
|
|
"ng:include": ["data/graph"],
|
|
"ng:compat": ["shex:*", "file/iana/text/shex", "code/shexc" ],
|
|
},
|
|
"service": {
|
|
"ng:n": "Internal Service",
|
|
"ng:a": "Service provided by NextGraph framework",
|
|
"ng:o": "n:g:z:service_invoke", // default viewer
|
|
},
|
|
"service/rust": {
|
|
"ng:crdt": "YText",
|
|
"ng:n": "Service - Rust", // edited with CodeMirror, displayed with highlight.js
|
|
"ng:a": "Service written in Rust and compiled to WASM",
|
|
"ng:o": "external_service_invoke", // default viewer
|
|
"ng:w": "n:g:z:service_editor", // default editor
|
|
"ng:compat": ["code/rust", "file/iana/application/wasm"],
|
|
},
|
|
"service/deno": {
|
|
"ng:crdt": "YText",
|
|
"ng:n": "Service - Deno/JS", // edited with CodeMirror, displayed with highlight.js
|
|
"ng:a": "Service written in JS/TS for Deno or NodeJS",
|
|
"ng:o": "external_service_invoke", // default viewer
|
|
"ng:w": "n:g:z:service_editor", // default editor
|
|
"ng:compat": ["code/javascript", "code/typescript", "file/iana/text/javascript", "file/iana/application/node"],
|
|
},
|
|
"contract": {
|
|
"ng:crdt": "YText",
|
|
"ng:n": "Contract", // edited with CodeMirror, displayed with highlight.js
|
|
"ng:a": "Smart Contract with Rust or JS code",
|
|
"ng:compat": ["code/rust", "file/iana/application/wasm", "code/javascript", "code/typescript", "file/iana/text/javascript", "file/iana/application/node"],
|
|
},
|
|
"query/sparql": {
|
|
"ng:crdt": "YText",// uses ng:default_graph and ng:named_graph predicates
|
|
"ng:n": "SPARQL Query", // edited with YASGUI or Sparnatural, displayed with highlight.js https://github.com/highlightjs/highlightjs-turtle/tree/master
|
|
"ng:a": "Saved SPARQL Query that can be invoked",
|
|
"ng:o": "n:g:z:sparql:invoke",
|
|
"ng:w": "n:g:z:sparql_query:yasgui",
|
|
"ng:compat": ["code/sparql", "file/iana/application/sparql-query"],
|
|
},
|
|
"query/sparql_update": {
|
|
"ng:crdt": "YText",// uses ng:default_graph and ng:named_graph predicates
|
|
"ng:n": "SPARQL Update", // edited with YASGUI, displayed with highlight.js https://github.com/highlightjs/highlightjs-turtle/tree/master
|
|
"ng:a": "Saved SPARQL Update that can be invoked",
|
|
"ng:o": "n:g:z:sparql:invoke",
|
|
"ng:w": "n:g:z:sparql_update:yasgui",
|
|
"ng:compat": ["code/sparql", "file/iana/application/sparql-update"],
|
|
},
|
|
"query/graphql": {
|
|
"ng:crdt": "YText", // uses ng:default_graph predicate
|
|
"ng:n": "GraphQL Query", // edited with https://github.com/graphql/graphiql or https://github.com/graphql-editor/graphql-editor, displayed with highlight.js
|
|
"ng:a": "Saved GraphQL Query that can be invoked",
|
|
"ng:o": "n:g:z:graphql:invoke",
|
|
"ng:w": "n:g:z:graphql_query",
|
|
"ng:compat": ["code/graphql", "file/iana/application/graphql+json"],
|
|
},
|
|
"query/text": {
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "Text Search",
|
|
"ng:a": "Saved Text Search and its results",
|
|
"ng:compat": [],
|
|
},
|
|
"query/web": {
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "Web Search",
|
|
"ng:a": "Saved Web Search and its results",
|
|
"ng:compat": [],
|
|
},
|
|
"data/graph": {
|
|
"ng:crdt": "Graph", // https://github.com/highlightjs/highlightjs-turtle/tree/master
|
|
"ng:n": "Graph",
|
|
"ng:a": "Define the Graph of your data with Semantic Web / Linked Data",
|
|
"ng:o": "n:g:z:json_ld_editor", // default viewer
|
|
"ng:w": "n:g:z:json_ld_editor", // default editor
|
|
"ng:x": {
|
|
"rdf":true,
|
|
"xsd":true,
|
|
},
|
|
"ng:compat": [ "rdf:*", "xsd:*", "file/iana/text/n3", "file/iana/text/rdf+n3", "file/iana/text/turtle", "file/iana/application/n-quads", "file/iana/application/trig", "file/iana/application/n-triples",
|
|
"file/iana/application/rdf+xml", "file/iana/application/ld+json"],
|
|
},
|
|
"data/json": {
|
|
"ng:crdt": "Automerge",
|
|
"ng:n": "JSON",
|
|
"ng:a": "JSON Data CRDT",
|
|
"ng:o": "n:g:z:json_editor", // default viewer
|
|
"ng:w": "n:g:z:json_editor", // default editor
|
|
"ng:compat": ["file/iana/application/json", "code:json"],
|
|
},
|
|
"data/array": {
|
|
"ng:crdt": "YArray",
|
|
"ng:n": "JSON Array",
|
|
"ng:a": "JSON Array CRDT",
|
|
"ng:o": "n:g:z:json_editor", // default viewer
|
|
"ng:w": "n:g:z:json_editor", // default editor
|
|
"ng:compat": ["file/iana/application/json", "code:json"],
|
|
},
|
|
"data/map": {
|
|
"ng:crdt": "YMap",
|
|
"ng:n": "JSON Map",
|
|
"ng:a": "JSON Map CRDT",
|
|
"ng:o": "n:g:z:json_editor", // default viewer
|
|
"ng:w": "n:g:z:json_editor", // default editor
|
|
"ng:compat": ["file/iana/application/json", "code:json"],
|
|
},
|
|
"data/xml": {
|
|
"ng:crdt": "YXml",
|
|
"ng:n": "XML",
|
|
"ng:a": "XML Data CRDT",
|
|
"ng:compat": ["file/iana/text/xml","file/iana/application/xml", "code:xml"],
|
|
},
|
|
"data/table": {
|
|
"ng:crdt": "Automerge", // see https://github.com/frappe/datatable
|
|
"ng:n": "Table", // see https://specs.frictionlessdata.io/table-schema displayed with pivot table see https://activetable.io/docs/data https://www.npmjs.com/package/pivottable https://socket.dev/npm/package/svelte-pivottable/alerts/0.2.0?tab=dependencies
|
|
"ng:a": "Data in a Table (columns and rows)",
|
|
"ng:o": "n:g:z:pivot",
|
|
"ng:compat": ["file/iana/application/sparql-results+json","file/iana/application/sparql-results+xml","file/iana/text/csv"],
|
|
},
|
|
"data/collection": {
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "Collection",
|
|
"ng:a": "An ordered list of items",
|
|
"ng:o": "n:g:z:list",
|
|
"ng:x": {
|
|
"as": true,
|
|
"rdf": true,
|
|
},
|
|
"ng:compat": ["as:Collection","rdf:List","rdf:Seq"],
|
|
},
|
|
"data/container": {
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "Container",
|
|
"ng:a": "An unordered list of items",
|
|
"ng:o": "n:g:z:list",
|
|
"ng:x": {
|
|
"rdf": true,
|
|
"rdfs": true,
|
|
"ldp": true,
|
|
},
|
|
"ng:compat": ["rdfs:member","ldp:contains","rdf:Bag","rdf:Alt"],
|
|
},
|
|
"data/board": {
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "Board",
|
|
"ng:a": "Whiteboard, infinite canvas to arrange your content in 2D",
|
|
"ng:o": "n:g:z:board",
|
|
"ng:include": [],
|
|
"ng:compat": [], //https://jsoncanvas.org/ https://www.canvasprotocol.org/ https://github.com/orgs/ocwg/discussions/25 https://infinitecanvas.tools/gallery/
|
|
},
|
|
"data/grid": {
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "Grid",
|
|
"ng:a": "Grid representation of a collection or container",
|
|
"ng:o": "n:g:z:grid",
|
|
"ng:include": ["data/container","data/collection","data/table","media/album"],
|
|
"ng:compat": [],
|
|
},
|
|
"data/geomap": { // https://github.com/leaflet/leaflet
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "Geo Map",
|
|
"ng:a": "Geographical Map",
|
|
"ng:x": {
|
|
"wgs": true,
|
|
"gn": true,
|
|
"as": true,
|
|
},
|
|
"ng:compat": ["as:Place","wgs:*","gn:*", "file/iana/application/geo+json", "file/iana/application/vnd.mapbox-vector-tile"], // see also https://github.com/topojson/topojson
|
|
},
|
|
"e/email": {
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "Email",
|
|
"ng:a": "Email content and headers",
|
|
"ng:x": {
|
|
"email": "http://www.invincea.com/ontologies/icas/1.0/email#" //https://raw.githubusercontent.com/twosixlabs/icas-ontology/master/ontology/email.ttl
|
|
},
|
|
"ng:compat": ["file/iana/message/rfc822","file/iana/multipart/related"],
|
|
},
|
|
"e/web": {
|
|
"ng:crdt": "Graph",
|
|
//https://www.npmjs.com/package/warcio https://github.com/N0taN3rd/node-warc
|
|
"ng:n": "Web Archive",
|
|
"ng:a": "Archive the content of a web page",
|
|
"ng:compat": ["file/iana/application/warc","file/iana/multipart/related"],
|
|
},
|
|
"e/rdf": {
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "RDF Archive",
|
|
"ng:a": "Archive the triples of an RDF resource dereferenced with HTTP",
|
|
"ng:include": ["data/graph"],
|
|
},
|
|
"mc/text": {
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "Text Selection",
|
|
"ng:a": "Text Selection copied into Magic Carpet",
|
|
},
|
|
"mc/link": {
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "Link",
|
|
"ng:a": "Link to a document kept in Magic Carpet",
|
|
},
|
|
"plato/card": {
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "Card",
|
|
"ng:a": "Card representation of a document",
|
|
"ng:o": "n:g:z:card",
|
|
},
|
|
"plato/pad": {
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "Pad",
|
|
"ng:a": "Pad representation of a document",
|
|
"ng:o": "n:g:z:pad",
|
|
},
|
|
"doc/diagram/mermaid" : {
|
|
"ng:crdt": "YText",
|
|
"ng:n": "Diagram - Mermaid",
|
|
"ng:a": "Describe Diagrams with Mermaid",
|
|
"ng:compat": ["file/iana/application/vnd.mermaid"]
|
|
},
|
|
"doc/diagram/drawio" : {
|
|
"ng:crdt": "YXml",
|
|
"ng:n": "Diagram - DrawIo",
|
|
"ng:a": "Draw Diagrams with DrawIo",
|
|
"ng:compat": ["file/iana/application/vnd.jgraph.mxfile","file/iana/application/x-drawio"]
|
|
},
|
|
"doc/diagram/graphviz" : {
|
|
"ng:crdt": "YText",
|
|
"ng:n": "Diagram - Graphviz",
|
|
"ng:a": "Describe Diagrams with Graphviz",
|
|
"ng:compat": ["file/iana/text/vnd.graphviz"]
|
|
},
|
|
"doc/diagram/excalidraw" : {
|
|
"ng:crdt": "Automerge",
|
|
"ng:n": "Diagram - Excalidraw",
|
|
"ng:a": "Collaborate on Diagrams with Excalidraw",
|
|
"ng:compat": ["file/iana/application/vnd.excalidraw+json"]
|
|
},
|
|
"doc/diagram/gantt" : { //https://github.com/frappe/gantt
|
|
"ng:crdt": "Automerge",
|
|
"ng:n": "Diagram - Gantt",
|
|
"ng:a": "Interactive gantt chart",
|
|
"ng:compat": []
|
|
},
|
|
"doc/diagram/flowchart" : { //https://github.com/adrai/flowchart.js
|
|
"ng:crdt": "YText",
|
|
"ng:n": "Diagram - Flowchart",
|
|
"ng:a": "flow chart diagrams",
|
|
"ng:compat": []
|
|
},
|
|
"doc/diagram/sequence" : { //https://github.com/bramp/js-sequence-diagrams
|
|
"ng:crdt": "YText",
|
|
"ng:n": "Diagram - Sequence",
|
|
"ng:a": "sequence diagrams",
|
|
"ng:compat": []
|
|
},
|
|
// checkout https://www.mindmaps.app/ but it is AGPL
|
|
"doc/diagram/markmap" : { //https://github.com/markmap/markmap
|
|
"ng:crdt": "YText",
|
|
"ng:n": "Diagram - Markmap",
|
|
"ng:a": "mindmaps with markmap",
|
|
"ng:compat": []
|
|
},
|
|
"doc/diagram/mymind" : { //https://github.com/markmap/markmap
|
|
"ng:crdt": "YText", // see MyMind format, MindMup JSON, FreeMind XML and MindMap Architect XML
|
|
"ng:n": "Diagram - Mymind",
|
|
"ng:a": "mindmaps with mymind",
|
|
"ng:compat": [] // https://github.com/ondras/my-mind/wiki/Saving-and-loading#file-formats
|
|
},
|
|
"doc/diagram/jsmind" : { //https://github.com/hizzgdev/jsmind
|
|
"ng:crdt": "Automerge",
|
|
"ng:n": "Diagram - jsmind",
|
|
"ng:a": "mindmaps with jsmind",
|
|
"ng:compat": [] // https://hizzgdev.github.io/jsmind/docs/en/1.usage.html
|
|
},
|
|
// DC and C3 have Crossfilter https://github.com/dc-js/dc.js http://crossfilter.github.io/crossfilter/ https://github.com/c3js/c3 http://dc-js.github.io/dc.js/
|
|
// take inspiration from https://github.com/metabase/metabase
|
|
// have a look at https://github.com/observablehq
|
|
// another open source dashboard with many data sources https://github.com/getredash/redash
|
|
// and another one https://github.com/apache/superset
|
|
// https://github.com/Rich-Harris/pancake
|
|
// https://github.com/williamngan/pts
|
|
// https://visjs.org/
|
|
"doc/viz/cytoscape" : {
|
|
"ng:crdt": "Automerge",
|
|
"ng:n": "Viz - Cytoscape",
|
|
"ng:a": "Graph theory (network) visualization",
|
|
"ng:compat": [] // https://github.com/cytoscape/cytoscape.js
|
|
},
|
|
"doc/viz/vega" : {
|
|
"ng:crdt": "Automerge",
|
|
"ng:n": "Viz - Vega",
|
|
"ng:a": "Grammar for interactive graphics",
|
|
"ng:compat": [] // https://vega.github.io/vega-lite/docs/ https://github.com/vega/editor
|
|
},
|
|
"doc/viz/vizzu" : {
|
|
"ng:crdt": "Automerge",
|
|
"ng:n": "Viz - Vizzu",
|
|
"ng:a": "Animated data visualizations and data stories",
|
|
"ng:compat": [] // https://github.com/vizzuhq/vizzu-lib
|
|
},
|
|
"doc/viz/plotly" : { //https://github.com/plotly/plotly.js
|
|
"ng:crdt": "Automerge",
|
|
"ng:n": "Viz - Plotly",
|
|
"ng:a": "Declarative charts",
|
|
"ng:compat": [] // https://github.com/cytoscape/cytoscape.js
|
|
},
|
|
"doc/viz/avail" : {
|
|
"ng:crdt": "Automerge",
|
|
"ng:n": "Viz - Avail",
|
|
"ng:a": "Time Data Availability Visualization",
|
|
"ng:compat": [] // https://github.com/flrs/visavail
|
|
},
|
|
"doc/chart/frappecharts" : {
|
|
"ng:crdt": "Automerge",
|
|
"ng:n": "Charts - Frappe",
|
|
"ng:a": "GitHub-inspired responsive charts",
|
|
"ng:compat": [] // https://github.com/frappe/charts
|
|
},
|
|
"doc/chart/financial" : {
|
|
"ng:crdt": "Automerge",
|
|
"ng:n": "Charts - Financial",
|
|
"ng:a": "Financial charts",
|
|
"ng:compat": [] //https://github.com/tradingview/lightweight-charts
|
|
},
|
|
// have a look at https://github.com/cube-js/cube and https://awesome.cube.dev/ and https://frappe.io/products
|
|
"doc/chart/apexcharts" : {
|
|
"ng:crdt": "Automerge",
|
|
"ng:n": "Charts - ApexCharts",
|
|
"ng:a": "Interactive data visualizations",
|
|
"ng:compat": [] // https://github.com/apexcharts/apexcharts.js
|
|
},
|
|
//realtime data with https://github.com/square/cubism
|
|
"doc/chart/billboard" : {
|
|
"ng:crdt": "Automerge",
|
|
"ng:n": "Charts - BillBoard",
|
|
"ng:a": "Interactive data visualizations based on D3",
|
|
"ng:compat": [] // https://github.com/naver/billboard.js
|
|
},
|
|
"doc/chart/echarts" : {
|
|
"ng:crdt": "Automerge",
|
|
"ng:n": "Charts - ECharts",
|
|
"ng:a": "Interactive charting and data visualization with Apache ECharts",
|
|
"ng:compat": [] // https://github.com/apache/echarts
|
|
},
|
|
"doc/chart/chartjs" : {
|
|
"ng:crdt": "Automerge",
|
|
"ng:n": "Charts - Chart.js",
|
|
"ng:a": "Simple yet flexible charting for designers & developers with Chart.js",
|
|
"ng:compat": [] // https://github.com/chartjs/Chart.js
|
|
},
|
|
// see if to provide plain D3, and also all the https://github.com/antvis libraries: G2, G6, L7, S2, X6. Have a look at AVA
|
|
"doc/pdf": {
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "PDF",
|
|
"ng:a": "upload and display a PDF file",
|
|
"ng:compat": ["file/iana/application/pdf"] // https://github.com/mozilla/pdf.js https://viewerjs.org/
|
|
},
|
|
"doc/odf": { //!!! becareful: AGPL
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "OpenDocumentFormat (ODF)",
|
|
"ng:a": "upload and display an ODF file",
|
|
"ng:compat": ["file/iana/application/vnd.oasis.opendocument*"] // https://webodf.org/ https://github.com/webodf/WebODF https://viewerjs.org/
|
|
},
|
|
// see also https://github.com/Mathpix/mathpix-markdown-it
|
|
"doc/latex": {
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "Latex",
|
|
"ng:a": "upload and display a Latex or Tex file",
|
|
"ng:compat": ["file/iana/application/x-tex","file/iana/text/x-tex"] // https://github.com/michael-brade/LaTeX.js https://github.com/mathjax/MathJax
|
|
},
|
|
"doc/ps": { //!!! becareful: AGPL https://github.com/ochachacha/ps-wasm
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "Postscript",
|
|
"ng:a": "upload and display a PostScript file",
|
|
"ng:compat": ["file/iana/application/postscript"] // https://www.npmjs.com/package/ghostscript4js
|
|
},
|
|
"doc/music/abc": { //https://github.com/paulrosen/abcjs
|
|
"ng:crdt": "YText",
|
|
"ng:n": "Music ABC",
|
|
"ng:a": "sheet music notation",
|
|
"ng:compat": []
|
|
},
|
|
"doc/music/guitar": { //https://github.com/birdca/fretboard
|
|
"ng:crdt": "YText",
|
|
"ng:n": "Music - Guitar",
|
|
"ng:a": "charts for guitar chords and scales",
|
|
"ng:compat": []
|
|
},
|
|
"doc/maths": { //https://github.com/KaTeX/KaTeX
|
|
"ng:crdt": "YText",
|
|
"ng:n": "Maths",
|
|
"ng:a": "TeX math rendering",
|
|
"ng:compat": ["file/iana/application/x-tex","file/iana/text/x-tex"]
|
|
},
|
|
"doc/chemistry": { //GPL!! https://github.com/aeris-data/ChemDoodle/tree/master/ChemDoodleWeb-8.0.0 or https://github.com/aseevia/smiles-3d-vue
|
|
"ng:crdt": "YText",
|
|
"ng:n": "Chemical",
|
|
"ng:a": "simplified molecular-input line-entry system (SMILES)",
|
|
"ng:compat": ["file/iana/chemical/x-daylight-smiles"] // https://en.wikipedia.org/wiki/SYBYL_line_notation and http://fileformats.archiveteam.org/wiki/Chemical_data
|
|
},
|
|
"doc/ancientscript": { //https://dn-works.com/ufas/
|
|
"ng:crdt": "YText", // use Unicode and special fonts
|
|
"ng:n": "Ancient Script",
|
|
"ng:a": "Ancient Script",
|
|
"ng:compat": []
|
|
},
|
|
"doc/braille": { //https://en.wikipedia.org/wiki/Braille_Patterns
|
|
"ng:crdt": "YText", // use Unicode and special fonts
|
|
"ng:n": "Braille Patterns",
|
|
"ng:a": "Braille Patterns",
|
|
"ng:compat": []
|
|
},
|
|
"media/image": {
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "Image",
|
|
"ng:a": "upload and display an image",
|
|
"ng:o": "n:g:z:media",
|
|
"ng:x": {
|
|
"as":true,
|
|
},
|
|
"ng:compat": ["file/iana/image*","as:Image"]
|
|
},
|
|
"media/reel": {
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "Reel",
|
|
"ng:a": "upload and display a Reel (video from mobile)",
|
|
"ng:o": "n:g:z:media",
|
|
"ng:compat": ["file/iana/video*"]
|
|
},
|
|
"media/video": {
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "Video",
|
|
"ng:a": "upload and display a Video (and film)",
|
|
"ng:o": "n:g:z:media",
|
|
"ng:x": {
|
|
"as":true,
|
|
},
|
|
"ng:compat": ["file/iana/video*","as:Video"]
|
|
},
|
|
"media/album": {
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "Album",
|
|
"ng:a": "Assemble several images and/or videos into an ordered Album",
|
|
"ng:o": "n:g:z:gallery",
|
|
"ng:include": ["data/collection"],
|
|
"ng:compat": []
|
|
},
|
|
"media/audio": {
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "Audio",
|
|
"ng:a": "upload and play an Audio file, Audio note or Voice message",
|
|
"ng:o": "n:g:z:media",
|
|
"ng:x": {
|
|
"as":true,
|
|
},
|
|
"ng:compat": ["file/iana/audio*","as:Audio"]
|
|
},
|
|
"media/song": {
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "Song",
|
|
"ng:a": "A song from an artist,album and/or lyrics",
|
|
"ng:o": "n:g:z:media",
|
|
"ng:x": {
|
|
"music": "http://purl.org/ontology/mo/",
|
|
},
|
|
"ng:compat": ["music:MusicalWork","music:MusicArtist", "music:Lyrics"]
|
|
// see also https://polifonia-project.eu/wp-content/uploads/2022/01/Polifonia_D2.1_V1.0.pdf
|
|
// Music ontology http://musicontology.com/docs/faq.html with data based on existing databases https://musicbrainz.org/doc/MusicBrainz_Database/Schema https://github.com/megaconfidence/open-song-database https://www.discogs.com/developers
|
|
},
|
|
"media/subtitle": { //https://captioneasy.com/subtitle-file-formats/
|
|
"ng:crdt": "YText",
|
|
"ng:n": "Subtitles",
|
|
"ng:a": "Subtitles",
|
|
"ng:compat": [] // TBD
|
|
},
|
|
"media/overlay": {
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "Overlay",
|
|
"ng:a": "Composition of an image, reel, text, icon, link, mention or other content into a layered content",
|
|
"ng:o": "n:g:z:media",
|
|
"ng:compat": []
|
|
},
|
|
"social/channel": {
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "Channel",
|
|
"ng:a": "Broadcast channel with subscribers",
|
|
"ng:compat": []
|
|
},
|
|
"social/stream": {
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "Stream",
|
|
"ng:a": "A document or store's stream branch",
|
|
"ng:compat": []
|
|
},
|
|
"social/contact": {
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "Contact",
|
|
"ng:a": "Contact: an Individual, Organization or Group",
|
|
"ng:x": {
|
|
"vcard":true,
|
|
"foaf": true,
|
|
},
|
|
"ng:include": ["data/graph"],
|
|
"ng:compat": ["foaf:Person","foaf:Agent","vcard:Individual", "vcard:Organization", "vcard:Group", "file/iana/text/vcard", "file/iana/application/vcard+json", "file/iana/application/vcard+xml" ],
|
|
},
|
|
"social/event": {
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "Event",
|
|
"ng:a": "An event occuring in specific location and time",
|
|
"ng:x": {
|
|
"as":true,
|
|
},
|
|
"ng:include": ["post/*"],
|
|
"ng:compat": ["as:Event"]
|
|
},
|
|
"social/calendar": {
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "Calendar",
|
|
"ng:a": "A calendar where events are gathered",
|
|
"ng:x": {
|
|
"as":true,
|
|
"time": true,
|
|
},
|
|
"ng:include": ["data/collection"],
|
|
"ng:compat": ["time:TemporalEntity", "file/iana/text/calendar", "file/iana/application/calendar+xml", "file/iana/application/calendar+json"] //https://www.rfc-editor.org/rfc/rfc5545
|
|
},
|
|
"social/scheduler": {
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "Scheduler",
|
|
"ng:a": "Helps finding a common time slot for several participants to a future event",
|
|
"ng:x": {
|
|
"as":true,
|
|
},
|
|
"ng:compat": ["as:Invite","as:Reject","as:Accept","as:TentativeAccept","as:TentativeReject"]
|
|
},
|
|
"social/reaction": {
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "Reaction",
|
|
"ng:a": "A reaction by user to some content",
|
|
"ng:x": {
|
|
"as":true,
|
|
},
|
|
"ng:compat": ["as:Like", "as:Dislike", "as:Listen", "as:Read", "as:View"]
|
|
},
|
|
"prod/task": {
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "Task",
|
|
"ng:a": "A task to be done",
|
|
"ng:x": {
|
|
"as":true,
|
|
"pair": "http://virtual-assembly.org/ontologies/pair#",
|
|
},
|
|
"ng:include": ["post/*"],
|
|
"ng:compat": ["pair:Task"] //see VTODO in iCalendar https://www.cs.utexas.edu/~mfkb/RKF/tree/components/specs/ontologies/Calendar-onto.html
|
|
// see todo and todoList of Mobilizon https://framagit.org/framasoft/mobilizon/-/blob/main/lib/federation/activity_stream/converter/todo.ex
|
|
// https://framagit.org/framasoft/mobilizon/-/blob/main/lib/federation/activity_stream/converter/todo_list.ex
|
|
},
|
|
"prod/project": {
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "Project",
|
|
"ng:a": "A project management / KanBan",
|
|
"ng:x": {
|
|
"as":true,
|
|
"pair": "http://virtual-assembly.org/ontologies/pair#",
|
|
},
|
|
"ng:include": ["post/*"],
|
|
"ng:compat": ["pair:Project"]
|
|
},
|
|
// see SRO https://www.researchgate.net/publication/350158531_From_a_Scrum_Reference_Ontology_to_the_Integration_of_Applications_for_Data-Driven_Software_Development
|
|
// https://ceur-ws.org/Vol-1442/paper_4.pdf
|
|
// see focalbaord, specially for their import scripts https://github.com/mattermost/focalboard/tree/main/import
|
|
// and their data model https://github.com/mattermost/focalboard/tree/main/server/model
|
|
// https://github.com/leif81/bzkanban
|
|
// https://github.com/HigorLoren/donko (react)
|
|
// https://github.com/trobonox/kanri (GPL, Vue)
|
|
// https://github.com/waterrmalann/kards (vanilla JS)
|
|
// see also https://github.com/wekan/wekan
|
|
// see also https://taiga.io/ (for inspiration. as it is AGPL and python)
|
|
// see also https://github.com/plankanban/planka (for inspiration. as it is AGPL and React)
|
|
// see also https://kolaente.dev/vikunja/vikunja (for inspiration. AGPL. Vue and Go)
|
|
// see also https://github.com/laurent22/joplin/ (for inspiration. AGPL)
|
|
// see also https://github.com/SrGMC/kanbana
|
|
/// svelte: https://github.com/V-Py/svelte-kanban
|
|
// https://github.com/supabase-community/svelte-kanban
|
|
// https://github.com/therosbif/kanban
|
|
"prod/issue": {
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "Issue",
|
|
"ng:a": "An issue to be solved",
|
|
"ng:x": {
|
|
"as":true,
|
|
"pair": "http://virtual-assembly.org/ontologies/pair#",
|
|
},
|
|
"ng:include": ["prod/task"],
|
|
"ng:compat": ["pair:Challenge"]
|
|
},
|
|
//https://github.com/go-gitea/gitea/issues/20232
|
|
// datamodel of gitea issues: https://github.com/go-gitea/gitea/blob/165346c15c6d021028a65121e692a17ffc927e2c/models/issue.go#L35-L79
|
|
"prod/form": {
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "Form",
|
|
"ng:a": "A form to be filled-in",
|
|
"ng:x": {
|
|
"form" : "http://rdf.danielbeeke.nl/form/form-dev.ttl#",
|
|
},
|
|
"ng:compat": ["form:*","file/iana/application/schema+json"]
|
|
},
|
|
// https://jsonforms.io/docs/
|
|
// https://github.com/jsonform/jsonform
|
|
// https://jsonforms.io/docs/integrations/vue
|
|
// >>> https://github.com/json-editor/json-editor
|
|
// or >>> https://github.com/webgme/svelte-jsonschema-form
|
|
// or >>> https://github.com/restspace/svelte-schema-form
|
|
// see https://ceur-ws.org/Vol-1515/regular14.pdf
|
|
// and https://github.com/protegeproject/facsimile
|
|
// https://www.drupal.org/project/webform
|
|
// see https://www.semantic-mediawiki.org/wiki/Extension:Page_Forms
|
|
// https://www.mediawiki.org/wiki/Extension:Page_Forms
|
|
// https://rdf-form.danielbeeke.nl/
|
|
// consider using Shapes
|
|
"prod/filling": {
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "Form filling",
|
|
"ng:a": "A form that has been filled-in",
|
|
"ng:compat": []
|
|
},
|
|
"prod/cad": { // https://mattferraro.dev/posts/cadmium
|
|
"ng:crdt": "Automerge",
|
|
"ng:n": "CAD",
|
|
"ng:a": "CADmium",
|
|
"ng:compat": []
|
|
},
|
|
"prod/slides": { //https://github.com/hakimel/reveal.js
|
|
//https://pandoc.org/MANUAL.html#slide-shows
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "Slides",
|
|
"ng:a": "Slides and presentations",
|
|
"ng:include": ["post/*"],
|
|
"ng:compat": []
|
|
},
|
|
"prod/question" : {
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "Question",
|
|
"ng:a": "A question that needs answers",
|
|
"ng:x": {
|
|
"as":true,
|
|
},
|
|
"ng:include": ["post/*"],
|
|
"ng:compat": ["as:Question"]
|
|
},
|
|
"prod/answer" :{
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "Answer",
|
|
"ng:a": "An answer to a question",
|
|
"ng:x": {
|
|
"as":true,
|
|
},
|
|
"ng:include": ["post/*"],
|
|
"ng:compat": ["as:Note"]
|
|
},
|
|
"prod/poll" : {
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "Poll",
|
|
"ng:a": "A poll where people will vote",
|
|
"ng:x": {
|
|
"as":true,
|
|
},
|
|
"ng:include": ["post/*"],
|
|
"ng:compat": ["as:Question"]
|
|
},
|
|
"prod/vote" : {
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "Vote",
|
|
"ng:a": "A vote cast for a Poll",
|
|
"ng:x": {
|
|
"as":true,
|
|
},
|
|
"ng:compat": ["as:Note"]
|
|
},
|
|
"file" : {
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "File",
|
|
"ng:a": "Binary file",
|
|
"ng:o": "n:g:z:file_viewer",
|
|
"ng:w": "n:g:z:file_viewer",
|
|
"ng:compat": []
|
|
},
|
|
"file/ng/wallet" : {
|
|
"ng:n": "NextGraph Wallet File",
|
|
"ng:a": "NextGraph Wallet File (.ngw)",
|
|
"ng:compat": []
|
|
},
|
|
"file/ng/doc" : {
|
|
"ng:n": "NextGraph Document File",
|
|
"ng:a": "NextGraph Document File (.ngd)",
|
|
"ng:compat": []
|
|
},
|
|
"file/ng/html" : {
|
|
"ng:n": "NextGraph Document Html",
|
|
"ng:a": "NextGraph Document Html standalone file",
|
|
"ng:compat": []
|
|
},
|
|
"file/text" : {
|
|
"ng:crdt": "Graph",
|
|
"ng:n": "File",
|
|
"ng:a": "Text file",
|
|
"ng:o": "n:g:z:file_viewer",
|
|
"ng:w": "n:g:z:file_viewer",
|
|
"ng:compat": ["file/iana/text/*", "file/iana/image/svg+xml", "file/iana/application/n-quads", "file/iana/application/trig", "file/iana/application/n-triples", "file/iana/application/rdf+xml", "file/iana/application/ld+json",
|
|
"file/iana/application/xml", "file/iana/application/yaml", "file/iana/application/xhtml+xml", "file/iana/application/node","file/iana/application/sparql-results+json","file/iana/application/sparql-results+xml",
|
|
"file/iana/message/rfc822","file/iana/multipart/related", "file/iana/text/vnd.graphviz", "file/iana/application/vnd.excalidraw+json", "file/iana/application/x-tex","file/iana/text/x-tex",
|
|
"file/iana/application/vcard+json", "file/iana/application/vcard+xml", "file/iana/text/calendar", "file/iana/application/calendar+xml", "file/iana/application/calendar+json",
|
|
"file/iana/application/schema+json", "file/iana/application/geo+json", "file/iana/application/json" ]
|
|
},
|
|
|
|
}; |