/// <summary> /// Validates whether facets are declared correctly. /// </summary> /// <param name="element"> Schema element being validated. Must not be null. </param> /// <param name="type"> Resolved type (from declaration on the element). Possibly null. </param> /// <param name="typeUsageBuilder"> TypeUsageBuilder for the current element. Must not be null. </param> internal static void ValidateFacets(SchemaElement element, SchemaType type, TypeUsageBuilder typeUsageBuilder) { DebugCheck.NotNull(element); DebugCheck.NotNull(typeUsageBuilder); if (type != null) { var schemaEnumType = type as SchemaEnumType; if (schemaEnumType != null) { typeUsageBuilder.ValidateEnumFacets(schemaEnumType); } else if (!(type is ScalarType) && typeUsageBuilder.HasUserDefinedFacets) { Debug.Assert(!(type is SchemaEnumType), "Note that enums should have already been handled."); // Non-scalar type should not have Facets. element.AddError( ErrorCode.FacetOnNonScalarType, EdmSchemaErrorSeverity.Error, Strings.FacetsOnNonScalarType(type.FQName)); } } else { if (typeUsageBuilder.HasUserDefinedFacets) { // Type attribute not specified but facets exist. element.AddError( ErrorCode.IncorrectlyPlacedFacet, EdmSchemaErrorSeverity.Error, Strings.FacetDeclarationRequiresTypeAttribute); } } }
internal override void Validate() { base.Validate(); //Non Complex Collections are not supported if ((_collectionKind == CollectionKind.Bag) || (_collectionKind == CollectionKind.List)) { Debug.Assert( Schema.SchemaVersion != XmlConstants.EdmVersionForV1, "CollctionKind Attribute is not supported in EDM V1"); } var schemaEnumType = _type as SchemaEnumType; if (schemaEnumType != null) { _typeUsageBuilder.ValidateEnumFacets(schemaEnumType); } else if (Nullable && (Schema.SchemaVersion != XmlConstants.EdmVersionForV1_1) && (_type is SchemaComplexType)) { //Nullable Complex Types are not supported in V1.0, V2 and V3 AddError( ErrorCode.NullableComplexType, EdmSchemaErrorSeverity.Error, Strings.ComplexObject_NullableComplexTypesNotSupported(FQName)); } }
/// <summary> /// Validates whether facets are declared correctly. /// </summary> /// <param name="element"> Schema element being validated. Must not be null. </param> /// <param name="type"> Resolved type (from declaration on the element). Possibly null. </param> /// <param name="typeUsageBuilder"> TypeUsageBuilder for the current element. Must not be null. </param> internal static void ValidateFacets(SchemaElement element, SchemaType type, TypeUsageBuilder typeUsageBuilder) { Debug.Assert(element != null); Debug.Assert(typeUsageBuilder != null); if (type != null) { var schemaEnumType = type as SchemaEnumType; if (schemaEnumType != null) { typeUsageBuilder.ValidateEnumFacets(schemaEnumType); } else if (!(type is ScalarType) && typeUsageBuilder.HasUserDefinedFacets) { Debug.Assert(!(type is SchemaEnumType), "Note that enums should have already been handled."); // Non-scalar type should not have Facets. element.AddError( ErrorCode.FacetOnNonScalarType, EdmSchemaErrorSeverity.Error, Strings.FacetsOnNonScalarType(type.FQName)); } } else { if (typeUsageBuilder.HasUserDefinedFacets) { // Type attribute not specified but facets exist. element.AddError( ErrorCode.IncorrectlyPlacedFacet, EdmSchemaErrorSeverity.Error, Strings.FacetDeclarationRequiresTypeAttribute); } } }