Preview this month - leap from requirements to deployable Note Web DSL!

Note Web PaaS DSL grammer has evolved in NW8 to support:

  • definition of multiple boards tiled by web notes, rendered with their specified aspect
  • definition of API gateways, CDN distributions with DNS registration
  • S3 bucket to be deployed with NW Context app (if any boards defined for the context)
  • AWS Lambda definition has been augmented with configuration of template (of implemented functionality, eg. CRUD)
  • data model for "app service", "container service", "kubernetes service", "lambda" can be defined by referencing an Entity defined elsewhere in DSL. The same is possible for Entities of "database instance" or "resource". Moreover, data model can be imported from a linked Note Web Form, as shown in previous post's video.

Please find updated Bakus-Naur Form of Note Web DSL below.

Read on - don't get discouraged if you're not used to reading programming language specifications. Grammar suited for taking notes, might imply some learning curve for seasonal developers or citizen developers or business users. Note In Web, Inc. takes care about this as well!

Stay tuned this month for a demo of how to get your CRUD (for example) cloud solution user stories converted directly into Note Web PaaS DSL and have it deployed, running and ready for data entry - all within half an hour (excluding input story editing)!

Obviously, it would be up to you to review suggested Note Web DSL code, adjust your user stories or requirements, if needed, and request another suggestion. Note Web version to be demoed this month won't trace Note Web DSL constructs onto original requirements, inform you of identified quality attributes, architecturally significant requirements, selected tactics or tradeoffs, nor will it provide formal documentation with diagrams.

However, this month's demo of Note Web design-deploy session would be in line with 2023 expectations set in this Note in Web, Inc. promo video.

<block> ::= (<contextStatement> | <statement>)+

<contextStatement> ::= "context" <string literal> ("runat" <string literal>|"repo" <string literal>)* INDENT (cloudStatement|dashboardStatement)+ DEDENT

<cloudStatement> ::= "user"
              | "bucket" <string literal>
              | "vpc" <stringLiteral> INDENT (<vpcContent>)+ DEDENT
              | <containerServiceStatement>
              | "kubernetes service" <string literal> "image" <string literal>
              | "app service" <string literal> "image" <string literal>
              | <lambdaStatement>
              | "queue" <string literal>
              | "load balancer" <string literal>
<resourceContent> ::= "relational table" <string literal>
              | "document table" <string literal>
              | <apiGatewayStatement>
              | <cdnStatement>
              | <containerClusterStatement>
              | <kubernetesClusterStatement>
              | <databaseClusterStatement>
              | <databaseInstanceStatement>
              | "resource" <string literal> "type" <string literal> "url" <string literal> INDENT (<resourceContent>)+ DEDENT

<lambdaStatement> ::= "lambda" <string literal> "template" <string literal> "ref" <string literal>

<apiGatewayStatement> ::= "api gateway" <string literal> INDENT
  ("ref" <string literal> "url" <string literal>)+ DEDENT

<cdnStatement> ::= "cdn" <string literal> INDENT
  ("ref" <string literal> "path" <string literal> "url" <string literal>)+ DEDENT

<dashboardStatement> ::= "dashboard" <string literal> INDENT ("web note" <string literal> "aspect" <string literal> "ref" <string literal>)+ DEDENT
<containerClusterStatement> ::= "container cluster" <string literal>
<kubernetesClusterStatement> ::= "kubernetes cluster" <string literal> "cidr" <string literal> "subnets" <string literal>
<databaseClusterStatement> ::= "database cluster" <string literal> "type" <string literal> INDENT <databaseInstanceStatement>+ DEDENT
<databaseInstanceStatement> ::= "database instance" <string literal> "type" <string literal> INDENT ("entity" <string literal> INDENT ("field" <string literal> "type" <string literal>)+ DEDENT)+ DEDENT

<containerServiceStatement> ::= "container service" <string literal> "image" <string literal> ("runat" <string literal> | "registerdns" <string literal> | "registerlb" <string literal> | "repo" <string literal> | "template" <string literal> | "package" <string literal> | "database type" <string literal> | "database url" <string literal> | "url" <string literal> | "subnets" <string literal> | "security groups" <string literal> | "config" <string literal> INDENT ("entity" <string literal> INDENT ("field" <string literal> "type" <string literal>)+ DEDENT)+ DEDENT

<vpcContent> ::= "vm" <string literal> "type" <string literal> "image" <string literal>

<statement> ::= "exit"
              | "read input" (<identifier> ",")* <identifier>
              | "call service" <identifier> "with" <stringLiteral> ("into" <identifier>|<string literal>)
              | "switch" ":" INDENT (<ifThen>)+ [otherwiseThen] DEDENT

<ifThen> ::= <condition> "->" INDENT <block> DEDENT

<otherwiseThen> ::= "otherwise" "->" INDENT <block> DEDENT

<condition> ::= <identifier> "==" <stringLiteral>

 




Note In Web, Inc. © September 2022-2024; Denys Havrylov Ⓒ 2018-August 2022