## GSchemaBodyElements - x
Element: Using, optional, Type: TUsing - x
Element: Association, optional, Type: TAssociation - x
Element: ComplexType, optional, Type: TComplexType - x
Element: EntityType, optional, Type: TEntityType - x
Element: EnumType, optional, Type:TEnumType - x
Element: ValueTerm, optional, Type: TValueTerm - x
Element: Function, optional, Type: TFunction - x
Element: Annotations, optional, Type: TAnnotations - x
Element: EntityContainer, Required, Type EntityContainer - x
Used By: TSchema - x

## GEmptyElementExtensibility - x
Element: Documentation, optional, Type:TDocumentation
Used By: TEnumTypeMember - x
Used By: TFunctionImportParameter - x
Used By: TNavigationProperty - x
Used By: TOnAction - x
Used By: TReferenceType - x
Used By: TTypeRef - x
Used By: TUsing - x
Used By: EntityContainer\AssociationSet - x


## GExpression - x
Element: String, optional, Type: TStringConstantExpression - x \ Resolved: should be type xs:string
Element: Binary, optional, Type: TBinaryConstantExpression - x \ Resolved: should be type xs:hexBinary
Element: Int, optional, Type: TIntConstantExpression - x \ Resolved: should be type  xs:integer
Element: Float, optional, Type: TFloatConstantExpression - x \ Resolved: should be type xs:double
Element: Guid, optional, Type: TGuidConstantExpression - x \ Resolved: should be type TGuidLiteral
Element: Decimal, optional, Type: TDecimalConstantExpression - x \ Resolved: should be type xs:decimal
Element: Bool, optional, Type: TBoolConstantExpression - x \ Resolved: should be type xs:boolean
Element: DateTime, optional, Type: TDateTimeOffsetConstantExpression - x \ Resolved: should be type xs:dateTime
Element: Enum, optional, Type: TEnumConstantExpression - x \ Resolved: should be type TQualifiedName
Element: Path, optional, Type: TPathExpression - x (down to here wtf? - they're listed as primitive types in code, not objects)  \ Resolved: should be type TQualifiedName
Element: If, optional, Type: TIfExpression - x
Element: Record, optional, Type: TRecordExpression - x
Element: Collection, optional, Type: TCollectionExpression - x
Element: TypeAssert, optional, Type: TTypeAssertExpression - x
Element: TypeTest, optional, Type: TTypeTestExpression - x
Element: FunctionReference, optional, Type: TFunctionReferenceExpression - x
Element: EntitySetReference, optional, Type: TEntitySetReferenceExpression - x
Element: AnonymousFunction, optional, Type: TAnonymousFunctionExpression - x
Element: ParameterReference, optional, Type: TParameterReferenceExpression - x
Element: Apply, optional, Type: TApplyExpression - x
Element: PropertyReference, optional, Type: TPropertyReferenceExpression - x
Element: ValueTermReference, optional, Type: TValueTermReferenceExpression - x
Used By: TAnonymousFunctionExpression, Must have at most ONE Element with value. - x
Used By: TApplyExpression\AppliedFunction - x
Used By: TApplyExpression\Arguments - x
Used By: TCollectionExpression - x
Used By: TIfExpression, Must have exactly THREE Elements with value. - x
Used By: TOperand, Must have at most ONE Element with value. - x
Used By: TPropertyReferenceExpression - x
Used By: TPropertyValue, Must have exactly ONE Elements with value. - x
Used By: TValueAnnotation, Must have at most ONE Element with value. - x
Used By: TValueTermReferenceExpression - x


## GInlineExpressions - x
Element: String, optional, Type: xs:string - x
Element: Binary, optional, Type: xs:hexBinary - x
Element: Int, optional, Type: xs:integer - x
Element: Float, optional, Type: xs:double - x
Element: Guid, optional, Type: xs:TGuidLiteral - x
Element: Decimal, optional, Type: xs:decimal - x
Element: Bool, optional, Type: xs:boolean - x
Element: DateTime, optional, Type: xs:dateTime - x
Element: DateTimeOffset, optional, Type: xs:dateTime - x
Element: Enum, optional, Type: xs:TQualifiedName - x
Element: Path, optional, Type: xs:TQualifiedName - x
Used By: TOperand - x
Used By: TPropertyValue - x
Used By: TTypeAnnotation - x
Used By: TValueAnnotation - x


## TOperations - x
Element: OnDelete, optional, Type: TOnAction - x

Used By: TAssociationEnd - x

## TFacetAttributes
Element: Nullable, optional, Type: xs:boolean
Element: DefaultValue, optional, Type: xs:string - x
Element: MaxLength, optional, Type: TMaxLengthFacet - x
Element: FixedLength, optional, Type: TIsFixedLengthFacet - x
Element: Precision, optional, Type: TPrecisionFacet - x
Element: Scale, optional, Type: TScaleFacet - x
Element: Unicode, optional, Type: TIsUnicodeFacet - x
Element: Collation, optional, Type: TOnAction - x (wtf?) / Resolved: note issue, Type should be TCollationFacet
Element: SRID, optional, Type: TSridFacet - x
Used By: TCollectionType - x
Used By: TFunction - x
Used By: TFunctionParameter - x
Used By: TFunctionReturnType - x
Used By: TProperty - x
Used By: TTypeAssertExpression - x
Used By: TTypeRef - x
Used By: TTypeTestExpression - x
Used By: TValueTerm - x



## TCommonPropertyAttributes - x
Element: Name, Required, Type: TSimpleIdentifier - x
Element: Type, Required, Type: TPropertyType (wtf?) - x / Resolved: TPropertyType is a SimpleType defiend as IsOKTrait the type string should match TPropertyType
Element: Nullable, Optional, Type: boolean, Default True - x
Element: DefaultValue, Optional, Type: string - x
Element: MaxLength, Optional, Type: TMaxLengthFacet - x
Element: FixedLength, Optional, Type: TIsFixedLengthFacet - x
Element: Precision, Optional, Type: TPrecisionFacet - x
Element: Scale, Optional, Type: TScaleFacet - x
Element: Unicode, Optional, Type: TIsUnicodeFacet - x
Element: Collation, Optional, Type: TCollationFacet - x
Element: SRID, Optional, Type: TSridFacet - x
Element: ConcurrencyMode, Optional, Type: TConcurrencyMode - x
Element: SetterAccess, Optional, Type: cg:TAccess - x
Element: GetterAccess, Optional, Type: cg:TAccess - x
Used By: TEntityProperty - x
Used By: TComplexTypeProperty - x

## TFunctionImportParameterAttributes - x
Element: Name, Required, Type: TSimpleIdentifier - x
Element: Type, Required, Type: TFunctionImportParameterAndReturnType - x
Element: Mode, Optional, Type: TParameterMode - x
Element: MaxLength, Optional, Type: TMaxLengthFacet - x
Element: Precision, Optional, Type: TPrecisionFacet - x
Element: Scale, Optional, Type: TScaleFacet - x
Element: SRID, Optional, Type: TSridFacet - x
Used By: TFunctionImportParameter - x


## TFunctionImportAttributes - x
Element: Name, Required, Type: TSimpleIdentifier - x
Element: ReturnType, Optional, Type: TFunctionImportParameterAndReturnType - x
Element: EntitySet, Optional, Type: TSimpleIdentifier (entitySet is flagged as TOperandType) - x
Element: IsComposable, Optional, Type: boolean - x
Element: IsSideEffecting, Optional, Type: boolean - x
Element: IsBindable, Optional, Type: boolean - x
Element: MethodAccess, Optional, Type: cg:TAccess - x
Used By: EntityContainer\FunctionImport - x


## TTypeAttributes - x
Element: Name, Required, Type: TSimpleIdentifier
Used By: TEnumType - x
Used By: TDerivableTypeAttributes - x (wtf?) /  Resolved: TDerivableTypeAttributes must use TTypeAttributes because any derivable type is still a Type
Used By: TComplexType - x

## TDerivableTypeAttributes - x
Element: BaseType, Optional, Type: TQualifiedName - x
Element: Abstract, Optional, Type: boolean, Default: false - x
Used By: TEntityType - x

## TEntitySetAttributes - x
Element: Name, Required, Type: TSimpleIdentifier - x
Element: EntityType, Required, Type:TQualifiedName - x
Element: GetterAccess, Optional, Type: cg:TAccess - x
Used By: EntityContainer\EntitySet - x