Adding Design-Time Support (Cont.) - Page 12
August 16, 2002
Custom schemas and Visual Studio annotations
As much as the metadata attributes described in the previous
section help provide support for the Blog control at design time, they're
missing one important piece: IntelliSense support for adding tags and
attributes in the HTML view of the Web Forms editor. For developers who are
more comfortable working in HTML than in WYSIWYG style, this oversight is
significant.
Since the HTML view of the Web Forms editor uses XSD schemas to
determine which elements and attributes to make available in a Web Forms page,
to correct the oversight, we need to implement an XSD schema that describes
the Blog control and the attributes that it supports. Optionally, we can add
annotations to the schema that tell Visual Studio .NET about the various
elements and how we'd like them to behave.
Example
6-12 contains the portion of the XSD schema specific to the Blog control.
The actual schema file (which is available in the sample code for the book)
also contains type definitions for the Panel control from which the Blog
control is derived, as well as other necessary attribute and type definitions.
These definitions were copied from the asp.xsd schema file created for
the built-in ASP.NET Server Controls.
WARNING: You should never modify the asp.xsd schema file directly, but should copy any
necessary type or attribute definitions to your custom schema file. While
this may seem redundant, if you edit asp.xsd
directly and a later installation or service pack for the .NET Framework
overwrites this file, your custom schema entries would be lost.
Example 6-12: Blog.xsd <?xml version="1.0" encoding="utf-8" ?>
<xsd:schema targetNamespace="urn:http://www.aspnetian.com/schemas"
elementFormDefault="qualified"
xmlns="urn:http://www.aspnetian.com/schemas"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:vs="http://schemas.microsoft.com/Visual-Studio-Intellisense"
vs:friendlyname="Blog Control Schema"
vs:ishtmlschema="false"
vs:iscasesensitive="false"
vs:requireattributequotes="true" >
<xsd:annotation>
<xsd:documentation>
Blog Control schema.
</xsd:documentation>
</xsd:annotation>
<xsd:element name="Blog" type="BlogDef" />
<!-- <aspnetian:Blog> -->
<xsd:complexType name="BlogDef">
<!-- <aspnetian:Blog>-specific attributes -->
<xsd:attribute name="AddRedirect" type="xsd:string"
vs:builder="url"/>
<xsd:attribute name="Email" type="xsd:string"/>
<xsd:attribute name="Mode" type="BlogMode"/>
<xsd:attribute name="SeparatorColor" type="xsd:string"
vs:builder="color"/>
<!-- <asp:Panel>-specific attributes -->
<xsd:attribute name="BackImageUrl" type="xsd:anyURI" />
<xsd:attribute name="HorizontalAlign" type="HorizontalAlign" />
<xsd:attribute name="Wrap" type="xsd:boolean" />
<xsd:attribute name="Enabled" type="xsd:boolean" />
<xsd:attribute name="BorderWidth" type="ui4" />
<xsd:attribute name="BorderColor" type="xsd:string"
vs:builder="color" />
<xsd:attribute name="BorderStyle" type="BorderStyle" />
<xsd:attributeGroup ref="WebControlAttributes" />
</xsd:complexType>
<!-- DataTypes -->
<xsd:simpleType name="BlogMode">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Add" />
<xsd:enumeration value="Display" />
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
In Example
6-12, note the targetNamespace and xmlns attributes on the root schema element, which define the XML namespace for the
control's schema. The value of the targetNamespace
and xmlns attributes will also be used as an
attribute in your Web Forms page to "wire up" the schema. The <xsd:element> tag defines the root Blog element.
The <xsd:complexType> tag defines the
attributes for the Blog element, which includes the web control attributes
referenced by the <xsd:attributeGroup> tag.
Finally, the <xsd:simpleType> tag defines the
enumeration for the BlogMode type used as one of the attributes for the Blog
element.
Note that Example
6-12 uses the vs:builder annotation to tell Visual Studio .NET to use the
Url builder for the AddRedirect attribute and the
Color builder for the SeparatorColor attribute. The
vs:builder annotation is one of many annotations available to modify schemas.
The most commonly used annotations are listed in Table
6-1.
Adding Design-Time Support (Cont.) - Page 11
ASP.NET in a Nutshell
Adding Design-Time Support (Cont.) - Page 13
|