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);
}