Skip to content
Search

    The Nature of Models

    Introduces the fundamental principles of CDS models.

    Models in cds are plain JavaScript objects conforming to the Core Schema Notation (CSN). They can be parsed from .cds sources, read from .json or .yaml files or dynamically created in code at runtime.

    The following ways and examples of creating models are equivalent:

    In Plain Coding at Runtime

    const cds = require('@sap/cds')
    
    // define the model
    var model = {definitions:{
        Products: {kind:'entity', elements:{
            ID: {type:'Integer', key:true},
            title: {type:'String', length:11, localized:true},
            description: {type:'String', localized:true},
        }},
        Orders: {kind:'entity', elements:{
            product: {type:'Association', target:'Products'},
            quantity: {type:'Integer'},
        }},
    }}
    
    // do something with it
    console.log (cds.compile.to.yaml (model))
    

    Parsed at Runtime

    const cds = require('@sap/cds')
    
    // define the model
    var model = cds.parse (`
        entity Products {
            key ID: Integer;
            title: localized String(11);
            description: localized String;
        }
        entity Orders {
            product: Association to Products;
            quantity: Integer;
        }
    `)
    
    // do something with it
    console.log (cds.compile.to.yaml (model))
    

    From .cds Source Files

    // some.cds source file
    entity Products {
        key ID: Integer;
        title: localized String(11);
        description: localized String;
    }
    entity Orders {
        product: Association to Products;
        quantity: Integer;
    }
    

    Read/parse it, and do something with it, for example:

    const cds = require('@sap/cds')
    cds.get('./some.cds') .then (cds.compile.to.yaml) .then (console.log)
    

    Which is equivalent to: cds ./some.cds -2 yaml using the CLI

    From .json Files

    {"definitions": {
        "Products": {
            "kind": "entity",
            "elements": {
                "ID": { "type": "Integer", "key": true },
                "title": { "type": "String", "length": 11, "localized": true },
                "description": { "type": "String", "localized": true }
            }
        },
        "Orders": {
            "kind": "entity",
            "elements": {
                "product": { "type": "Association", "target": "Products" },
                "quantity": { "type": "Integer" }
            }
        }
    }}
    
    const cds = require('@sap/cds')
    cds.get('./some.json') .then (cds.compile.to.yaml) .then (console.log)
    

    From Other Frontends

    You can add any other frontend instead of using CDL; it’s just about generating the respective CSN structures, most easily as .json. For example, different parties already added these frontends:

    • ABAP CDS 2 csn
    • OData EDMX 2 csn
    • Fiori annotation.xml 2 csn
    • i18n properties files 2 csn
    • Java/JPA models 2 csn

    Processing Models

    All model processing and compilation steps, which can be applied subsequently just work on the basis of plain CSN objects. There’s no assumption about and no lock-in to a specific source format.