Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
MSDN Library

The Microsoft code name "M" Modeling Language Specification - Catalog

Microsoft Corporation

November 2009

[This content is no longer valid. For the latest information on "M", "Quadrant", SQL Server Modeling Services, and the Repository, see the Model Citizen blog.]

[This documentation targets the Microsoft SQL Server Modeling CTP (November 2009) and is subject to change in future releases. Blank topics are included as placeholders.]

Sections:
1: Introduction to "M"
2: Lexical Structure
3: Text Pattern Expressions
4: Productions
5: Rules
6: Languages
7: Types
8: Computed and Stored Values
9: Expressions
10: Module
11: Attributes
12: Catalog
13: Standard Library
14: Glossary

12 Catalog

module Language.Catalog

{

  export CollectionTypes;

  export ComputedValues;

  export ConstantKinds;

  export Constants;

  export Declarations;

  export EntityTypes;

  export ExpressionKinds;

  export Expressions;

  export Extents;

  export Fields;

  export IdentityFields;

  export Imports;

  export IntrinsicTypes;

  export Languages;

  export MembershipConstraints;

  export Parameters;

  export Types;

  export UniqueConstraints;

  CollectionTypes : {{

    Base : Types;

    MinimumCount : Integer64 => 0;

    MaximumCount : Integer64? => null;

    ElementType : Types;

  }*} where identity(Base);

  ComputedValueGroups : {{

       Declaration : Declarations;

  }*} where identity(Declaration);

  ComputedValues : {{

       Id : Integer32 => AutoNumber;

       ComputedValueGroup : ComputedValueGroups;

       ReturnType : Types;

       Body : Text?;

  }*} where identity(Id);

  Constants : {{

    Expression : Expressions;

    ConstantKind : ConstantKinds;

    Value : General;

  }*} where identity(Expression);

  type ConstantKinds : Text where value in {

    "Null","Binary","DateTime","DateTimeOffset","Decimal","Guid","Integer",

    "Logical","Scientific","Text","Time","Unsigned" };

  // Root of the things M authors can declare (types, extents, computed values,languages)

  Declarations : {{

    Id : Integer32 => AutoNumber;

    Name : Text;

    DefinedIn : Modules;

    HasSyntheticName : Logical => false;

    Exported : Logical => false;

    Kind : Text where value in { "Type", "Extent", "ComputedValue", "Language" };

  }*} where identity(Id);

  EntityTypes : {{

    Base : Types;

    Nullable : Logical => false;

  }*} where identity(Base);

  Extents : {{

    Declaration : Declarations;

    ExtentType : Types;

  }*} where identity(Declaration);

  Expressions : {{

    Id : Integer32 => AutoNumber;

    ExpressionType : Types;

    ExpressionKind : ExpressionKinds;

  }*} where identity(Id);

  type ExpressionKinds : Text where value in {

    "Coalesce","Conditional","Constant","GraphExpressionSymbolo","Invocation",

    "MemberAccess","SelectExpressionSymbol","TypeAscription","TypeReference",

    "VariableReference","WhereExpressionSymbol","FromExpressionSymbol",

    "IntoExpressionSymbol","JoinExpressionSymbol","LetExpressionSymbol"

  };

  Fields : {{

    Id : Integer32 => AutoNumber;

    Name : Text;

    Position : Integer16;     // Position of field in entity declaration

    FieldType : Types;        // Type of this field

    AutoGenerated : (Text where value in { "Identity", "IdSequence", "NewGuid" })?;

    EntityType : EntityTypes; // EntityType that this field belongs to

  }*} where identity(Id),unique(Position,EntityType);

  IdentityFields : {{

    Id : Integer32 => AutoNumber;

    EntityType : EntityTypes;

    Position : Integer16; // Position in the identity constraint declaration

    Field : Fields;

  }*} where identity(Id),unique(EntityType,Position),unique(Field);

  Imports : {{

    Id : Integer32 => AutoNumber;

    ImportingModule : Modules;

    Kind : Text where value in { "Module", "Member" };

  }*} where identity(Id);

  ModuleImports : {{

    Id : Imports;

    Module : Modules;

  } where identity(Id), value.Module.Id != value.Id.ImportingModule.Id *};

  MemberImports : {{

    Id : Imports;

    Member : Declarations where value.HasSyntheticName == false;

  } where identity(Id), value.Member.DefinedIn.Id != value.Id.ImportingModule.Id *};

  IntrinsicTypes : {{

    Base : Types;

    Nullable : Logical => false;

    // Min/Max are used to record length constraints on Text/Binary, range constraints on integer numerics, nonsensical for Logical, Guid

    Min : Integer64 => 0;

    Max : Integer64?;

  }*} where identity(Base);

  Languages : {{

    Declaration : Declarations;

  }*} where identity(Declaration);

  MembershipConstraints : {{

    Id : Integer32 => AutoNumber;

    Kind : Text where value in { "In", "Subset", "Superset" };

    TargetExtent : Extents;

  }*} where identity(Id);

  Modules : {{

    Id : Integer32 => AutoNumber;

    Name : Text where value.Count <=400;

  }*} where identity(Id),unique(Name);

  Parameters : {{

    Id : Integer32 => AutoNumber;

    ComputedValue : ComputedValues;

    Position : Integer16;

    Name : Text where value.Count <=400;

    ParameterType : Types;

  }*} where identity(Id),unique(ComputedValue,Position),unique(ComputedValue,Name);

  Types : {{

    Declaration : Declarations;

    BuiltInType : Text; // Named of standard library type upon which this type is based.

    MembershipConstraint : MembershipConstraints?;

    ConstraintExpression : Text?;

  }*} where identity(Declaration);

  UniqueConstraints : {{

    Id : Integer32 => AutoNumber;

    CollectionType : CollectionTypes;

  }*} where identity(Id);

  UniqueFields : {{

    Id : Integer32 => AutoNumber;

    UniqueConstraint : UniqueConstraints;

    Position : Integer16; // Position in the unique constraint declaration

    Field : Fields;

  }*} where identity(Id),unique(UniqueConstraint,Position);

}

Show:
© 2015 Microsoft