MDrivenText
No edit summary
(Adding page to Category:TOC because it contains a TOC.)
 
(17 intermediate revisions by 3 users not shown)
Line 1: Line 1:
Proposed new ViewModel data textual representation.
This is the proposed new ViewModel data textual representation.


Goals: Text based modeling, more to-the-point, less bloated, easier to write format than json (specially true if you consider attribute values that in turn are strings that may have special chars like ',",{ etc )
'''Goals:''' Text-based modeling, more to-the-point, less bloated, in an easier-to-write format than JSON (especially true if you consider attribute values that in turn are strings that may have special chars like ',",{ etc).


How does the format look:
====== How the Format Looks: ======
  SomeViewModelName ValueOfFirstColumn{   
  viewmodel ValueOfFirstColumn{   
   NameOfAColumn{ValueOfThatColumn}   
   column NameOfAColumn{ValueOfThatColumn}   
   NameOfAColumn1{ValueOfThatColumn}   
   column NameOfAColumn1{ValueOfThatColumn}   
   NameOfAColumn2{ValueOfThatColumn}   
   column NameOfAColumn2{ValueOfThatColumn}   
   NameOfAColumn3{ValueOfThatColumn}   
   column NameOfAColumn3{ValueOfThatColumn}   
   NameOfColumnWithNesting ValueOfFirstColumnOfNestedObject{    NameOfColumnOfNestedObject{ValueOfThatColumn}   
   nesting ValueOfFirstColumnOfNestedObject{     
  NameOfColumnWithNesting ValueOfFirstColumnOfNestedObject{    NameOfColumnOfNestedObject{ValueOfThatColumn}   
    column NameOfAColumn{ValueOfThatColumn}   
  NameOfColumnWithNesting ValueOfFirstColumnOfNestedObject{    NameOfColumnOfNestedObject{ValueOfThatColumn}   
    column NameOfAColumn1{ValueOfThatColumn}   
  NameOfColumnWithNesting ValueOfFirstColumnOfNestedObject{    NameOfColumnOfNestedObject{ValueOfThatColumn}  }   
    column NameOfAColumn2{ValueOfThatColumn}   
   NameOfColumnWithOtherNesting ValueOfFirstColumnOfNestedObject{    NameOfColumnOfNestedObject{ValueOfThatColumn}   
    column NameOfAColumn3{ValueOfThatColumn}   
  NameOfColumnWithOtherNesting ValueOfFirstColumnOfNestedObject{    NameOfColumnOfNestedObject{ValueOfThatColumn}   
    }   
  NameOfColumnWithOtherNesting ValueOfFirstColumnOfNestedObject{    NameOfColumnOfNestedObject{ValueOfThatColumn}   
   
  NameOfColumnWithOtherNesting ValueOfFirstColumnOfNestedObject{    NameOfColumnOfNestedObject{ValueOfThatColumn}  }   
   nesting ValueOfFirstColumnOfNestedObject{     
  }
    column NameOfAColumn{ValueOfThatColumn}   
An Example if the ViewModel is named "class", has a nesting "attribute" and another nesting "role"
    column NameOfAColumn1{ValueOfThatColumn}   
    column NameOfAColumn2{ValueOfThatColumn}   
    column NameOfAColumn3{ValueOfThatColumn}   
    }   
  }
 
An example of when the ViewModel is named "Class", has a nesting "Attribute" and another nesting "Role":
  class Thing{   
  class Thing{   
   SuperClass{SomeSuper}   
   SuperClass{SomeSuper}   
Line 31: Line 37:
     RoleClass{TheRoleClass}  }  
     RoleClass{TheRoleClass}  }  
  }
  }
How does the format differ from json?
* - json has "" on identifiers and some values
* - json will make it problematic to have values that have special chars like "
* - json handles arrays differently than properties with [ enclosures
* - MDrivenText has special meaning ViewModel/Nesting classifier seperate from other properties
* - json must handle mulltilinks as arrays - MDrivenText collects based in Nesting classifier to build lists
What are the use-cases?


Initially it will be used in MDrivenDesigner to provide textbased editing of classes, statemachines, viewmodels and actions. This in turn will be the initial format when experimenting with other ways (than MDrivenDesigner) to change the model
====== Definition of the Format ======
classifier+space+Key{ ===content===}
The ===content=== is defined as:  <code>[classifier+space+]Key{===content===}</code>
 
Every key must be unique in its list.
 
Format treats multi or single relations the same - and to a certain extent, even attributes.
 
A list property can be set in 2 ways:
* <code>classifier+space+key{}</code> repeated with unique keys
* or <code><nowiki>nameoflist{key1{} key2{} key3{}}</nowiki></code> (explicit form)
Why have classifiers and not always use the explicit form: easier for the eye to read and resembles C#.
 
What are classifiers: The definition of the target structure is a ViewModel, ViewModelName, and NestingNames
 
====== How does the format differ from JSON? ======
* JSON has <code>""</code> on identifiers - MDrivenText does not.
 
* JSON makes heavy use of commas as separators - MDrivenText does not.
* JSON handles arrays differently than properties with <code>[</code> enclosures; MDrivenText derives this knowledge from context.
* MDrivenText has a special meaning ViewModel/Nesting classifier separate from other properties.
* JSON must handle multi-links as arrays whereas MDrivenText collects keys based on the Nesting classifier to build lists.
* MDrivenText only has three language fixed elements: the {}, space, and double quote - the first builds structure, the second separates definitions, and the third is standard string enclosure. All other characters are part of the content.
 
====== What are use-cases? ======
Initially, a use-case will be used in MDrivenDesigner to provide text-based editing of classes, Statemachines, ViewModels, and Actions. This in turn will be the initial format when experimenting with other ways (than MDrivenDesigner) to change the model.


How will the format be implemented - is this a new transformation?  
'''How will the format be implemented - is this a new transformation?'''
* We will use TajSon functionality and route all logic through the TajSon Mechanisms.
Plans are to allow for a generic editable textual representation of any ViewModel.
[[Category:MDrivenStart]]
{{Edited|July|12|2024}}


We will use TajSon functionality and route all logic through the TajSon Mechanisms
[[Category:TOC]]

Latest revision as of 13:31, 26 March 2024

This is the proposed new ViewModel data textual representation.

Goals: Text-based modeling, more to-the-point, less bloated, in an easier-to-write format than JSON (especially true if you consider attribute values that in turn are strings that may have special chars like ',",{ etc).

How the Format Looks:
viewmodel ValueOfFirstColumn{  
  column NameOfAColumn{ValueOfThatColumn}  
  column NameOfAColumn1{ValueOfThatColumn}  
  column NameOfAColumn2{ValueOfThatColumn}  
  column NameOfAColumn3{ValueOfThatColumn}  
  nesting ValueOfFirstColumnOfNestedObject{    
    column NameOfAColumn{ValueOfThatColumn}  
    column NameOfAColumn1{ValueOfThatColumn}  
    column NameOfAColumn2{ValueOfThatColumn}  
    column NameOfAColumn3{ValueOfThatColumn}  
    }  
    
  nesting ValueOfFirstColumnOfNestedObject{    
    column NameOfAColumn{ValueOfThatColumn}  
    column NameOfAColumn1{ValueOfThatColumn}  
    column NameOfAColumn2{ValueOfThatColumn}  
    column NameOfAColumn3{ValueOfThatColumn}  
    }  
}  

An example of when the ViewModel is named "Class", has a nesting "Attribute" and another nesting "Role":

class Thing{  
  SuperClass{SomeSuper}  
  attribute Attribute1{    Type{string}  }  
  role Detail2{  
    Cardinality{0..*}    
    TargetType{Detail}      
    BackName{Thing2}
    BackCardinality{0..1}
    Aggregation{composite}
    IsNavigable{true}
    RoleClass{TheRoleClass}  } 
}
Definition of the Format
classifier+space+Key{ ===content===}

The ===content=== is defined as: [classifier+space+]Key{===content===}

Every key must be unique in its list.

Format treats multi or single relations the same - and to a certain extent, even attributes.

A list property can be set in 2 ways:

  • classifier+space+key{} repeated with unique keys
  • or nameoflist{key1{} key2{} key3{}} (explicit form)

Why have classifiers and not always use the explicit form: easier for the eye to read and resembles C#.

What are classifiers: The definition of the target structure is a ViewModel, ViewModelName, and NestingNames

How does the format differ from JSON?
  • JSON has "" on identifiers - MDrivenText does not.
  • JSON makes heavy use of commas as separators - MDrivenText does not.
  • JSON handles arrays differently than properties with [ enclosures; MDrivenText derives this knowledge from context.
  • MDrivenText has a special meaning ViewModel/Nesting classifier separate from other properties.
  • JSON must handle multi-links as arrays whereas MDrivenText collects keys based on the Nesting classifier to build lists.
  • MDrivenText only has three language fixed elements: the {}, space, and double quote - the first builds structure, the second separates definitions, and the third is standard string enclosure. All other characters are part of the content.
What are use-cases?

Initially, a use-case will be used in MDrivenDesigner to provide text-based editing of classes, Statemachines, ViewModels, and Actions. This in turn will be the initial format when experimenting with other ways (than MDrivenDesigner) to change the model.

How will the format be implemented - is this a new transformation?

  • We will use TajSon functionality and route all logic through the TajSon Mechanisms.

Plans are to allow for a generic editable textual representation of any ViewModel.

This page was edited 46 days ago on 03/26/2024. What links here