XML-Schemata für XHTML 1.0 ermöglichen in FrontPage 2003 und Visual Studio .NET Quellcode-Bearbeitung mit IntelliSense-Unterstützung sowie eine Validierung des Quellcodes.
FrontPage 2003 und Visual Studio .NET können
XML-Schemata auswerten, um einem Benutzer die Erstellung von gültigen Instanzdokumenten zu erleichtern. Dank IntelliSense werden kontextsensitiv erlaubte Elemente, Attribute oder Attributwerte eingeblendet. Das W3C hat vor einiger Zeit
Schemata für die drei XHTML-1.0-Varianten
Strict,
Transitional und
Frameset veröffentlicht. Leider weisen diese Schemata Charakteristika auf, die FrontPage und Visual Studio nicht richtig interpretieren können. (Word 2003 kann sie erstaunlicherweise verarbeiten, aber ich weiß nicht, wozu sie dort gut sein könnten.) Ich habe sie deshalb
per XSLT
mit den Klassen des System.Xml.Schema
-Namensraums des .NET-Frameworks in eine äquivalente Form transformiert, die von den beiden Programmen interpretiert werden kann. Die transformierten Schemata sind zum
Download
Download verfügbar.
Das XSLT-Stylesheet selbst ist jetzt ebenfalls im Archiv enthalten, ferner eine Batch-Datei, für deren Ausführung Sie lediglich msxsl.exe benötigen.
Die Schemata sind nun
„flach“ organisiert, indem bspw. Verweise auf Attributgruppen oder Typen aufgelöst wurden. Am Beispiel des
table
-Elements läßt sich die Transformation gut demonstrieren:
<xs:element name="table">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" ref="caption"/>
<xs:choice>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="col"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="colgroup"/>
</xs:choice>
<xs:element minOccurs="0" ref="thead"/>
<xs:element minOccurs="0" ref="tfoot"/>
<xs:choice>
<xs:element maxOccurs="unbounded" ref="tbody"/>
<xs:element maxOccurs="unbounded" ref="tr"/>
</xs:choice>
</xs:sequence>
<xs:attributeGroup ref="attrs"/>
<xs:attribute name="summary" type="Text"/>
<xs:attribute name="width" type="Length"/>
<xs:attribute name="border" type="Pixels"/>
<xs:attribute name="frame" type="TFrame"/>
<xs:attribute name="rules" type="TRules"/>
<xs:attribute name="cellspacing" type="Length"/>
<xs:attribute name="cellpadding" type="Length"/>
</xs:complexType>
</xs:element>
<xs:element name="table">
<xs:complexType>
<xs:choice>
<xs:element ref="caption" />
<xs:element ref="col" />
<xs:element ref="colgroup" />
<xs:element ref="thead" />
<xs:element ref="tfoot" />
<xs:element ref="tbody" />
<xs:element ref="tr" />
</xs:choice>
<xs:attribute name="id" />
<xs:attribute name="class" />
<xs:attribute name="style" />
<xs:attribute name="title" />
<xs:attribute name="lang">
<xs:simpleType>
<xs:restriction>
<xs:enumeration value="en" />
<xs:enumeration value="de" />
<xs:enumeration value="de-DE" />
<xs:enumeration value="de-AT" />
<xs:enumeration value="de-CH" />
<xs:enumeration value="fr" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="dir">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="ltr" />
<xs:enumeration value="rtl" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="onclick" />
<xs:attribute name="ondblclick" />
<xs:attribute name="onmousedown" />
<xs:attribute name="onmouseup" />
<xs:attribute name="onmouseover" />
<xs:attribute name="onmousemove" />
<xs:attribute name="onmouseout" />
<xs:attribute name="onkeypress" />
<xs:attribute name="onkeydown" />
<xs:attribute name="onkeyup" />
<xs:attribute name="summary" />
<xs:attribute name="width" />
<xs:attribute name="border" />
<xs:attribute name="frame">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="void" />
<xs:enumeration value="above" />
<xs:enumeration value="below" />
<xs:enumeration value="hsides" />
<xs:enumeration value="lhs" />
<xs:enumeration value="rhs" />
<xs:enumeration value="vsides" />
<xs:enumeration value="box" />
<xs:enumeration value="border" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="rules">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="none" />
<xs:enumeration value="groups" />
<xs:enumeration value="rows" />
<xs:enumeration value="cols" />
<xs:enumeration value="all" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="cellspacing" />
<xs:attribute name="cellpadding" />
</xs:complexType>
</xs:element>
Folgende Änderungen wurden vorgenommen:
<xsd:group ref="..." />
-Referenzen wurden aufgelöst, weil sie von FrontPage und Visual Studio .NET nicht unterstützt werden, wenn sie kaskadiert auftreten. Die transformierten Schemata enthalten deshalb auf der obersten Ebene keine xsd:group
- oder xsd:complexType
-Elemente mehr.xsd:attribute
-Elemente ggf. um
vs:builder="url"
-,
vs:builder="style"
- und
vs:builder="color"
-Attribute ergänzt. Mit
vs:builder="url"
blenden FrontPage und Visual Studio bspw. einen
„URL picker“ ein.
rel="Stylesheet"
,
lang="de"
,
type="text/css"
oder
media="print"
zu erleichtern.
Type-
vorangestellt, um sie von Elementnamen zu unterscheiden. Im Fall von script
gibt es nämlich eine Kollision, und FrontPage und Visual Studio kommen deswegen durcheinander.vs:clientom="ie5_0dom.tlb"
wird die mit FrontPage und Visual Studio gelieferte Typ-Bibliothek referenziert. Dies ermöglicht IntelliSense auch für
Scripting. Erkannt werden die Elemente
<script type="text/vbscript">
und
<script type="text/javascript">
sowie Attribute wie bspw.
onclick
.
xsd:annotation
-Elemente wurden entfernt.
Um die Schemata in FrontPage 2003 zu benutzen, müssen sie einfach in den Ordner
%CommonProgramFiles%\Microsoft Shared\OFFICE11\SCHEMAS\HTML
entpackt werden, danach muß FrontPage neu gestartet werden. Das gewünschte Schema kann dann unter
Extras Seitenoptionen… (Dokument)erstellung Schemaversion ausgewählt werden. FrontPage 2003 unterstützt leider kein XHTML, man erhält also zunächst HTML 4.01. Mit dem Befehl
XML-Formatierungsregeln anwenden kann man daraus aber leicht XHTML erzeugen. Die Namensraum-Deklaration
müssen Sie selbst erstellen, FrontPage beachtet das
targetNamespace
-Attribut des Schemas nicht.
Außerdem empfiehlt es sich, Extras Seitenoptionen… IntelliSense HTML-Attributwertangaben zu aktivieren.
Die Schemata sind für FrontPage 2003 optimiert. Für die Verwendung in Visual Studio .NET müssen sie leicht modifiziert werden. Anders als in FrontPage können die XHTML-Schemata hier sowohl für HTML- als auch für XML-Dokumente verwendet werden. Sie können die Schemata in ein Projekt importieren oder zentral in den Verzeichnissen
\Common7\Packages\schemas\html
bzw.
\Common7\Packages\schemas\xml
des Installationsverzeichnisses ablegen, so daß sie allen Projekten zur Verfügung stehen.
In
.html
-Dateien unterstützt Visual Studio XHTML nicht. Bei Änderungen in der Entwurfsansicht wird bspw.
<br />
zu
<br>
geändert, die Erstellung von wohlgeformten XHTML-Dokumenten wird so praktisch unmöglich. Allerdings unterscheiden sich XHTML 1.0 und HTML 4.01 im Vokabular nicht. Sie können deshalb folgende Änderungen an den Schemata in
\Common7\Packages\schemas\html
vornehmen, um HTML-4.01-Dokumente zu erstellen, aus denen mein
Tidy-Filter dann zur Laufzeit XHTML erzeugen kann:
targetNamespace="http://www.w3.org/TR/REC-html40"
vs:friendlyname="HTML 4.01 Strict"
vs:iscasesensitive="false"
vs:implicitclosure="true"
vs:requireattributequotes="false"
xmlns="http://www.w3.org/TR/REC-html40"
In
.xml
-Dateien funktionieren die Schemata besser, bspw. wird die Namensraum-Deklaration
automatisch erstellt und man hat die Garantie, daß Visual Studio nicht den Quellcode ändert. In den Schemata in
\Common7\Packages\schemas\xml
ändern Sie dazu
vs:ishtmlschema="true"
in
vs:ishtmlschema="false"
. Andererseits fehlt die HTML-Entwurfsansicht.
Es erweist sich als nachteilig, daß die drei XHTML-Varianten
denselben Namensraum
http://www.w3.org/1999/xhtml
bevölkern, denn Visual Studio bildet offenbar von Schemata mit demselben Ziel-Namensraum die Vereinigungsmenge. Ich persönlich benötige ohnehin nur die
Strict-Variante; wer mehr als ein Schema gleichzeitig verwenden möchte, muß sich wohl etwas einfallen lassen.
Auch der Microsoft Script Editor, der in FrontPage 2000 und 2002 enthalten ist, kann prinzipiell XML-Schemata verarbeiten und für IntelliSense verwenden. Mit den hier vorgestellten Schemata funktioniert das aber nur sehr unzuverlässig, teilweise werden falsche Elemente und Attribute vorgeschlagen, passende dafür unterschlagen, und es gab sogar Abstürze.
xml:lang
und
xml:space
werden nicht berücksichtigt. Sie stammen aus dem Namensraum
http://www.w3.org/XML/1998/namespace
, und FrontPage und Visual Studio unterstützen die Elemente
xsd:include
und
xsd:import
nicht.
Auf
xml:lang
läßt sich allerdings leicht verzichten. Nach den
Kompatibilitätsrichtlinien für XHTML 1.0 müssen sowohl
lang
- als auch
xml:lang
-Attribut deklariert werden und denselben Wert erhalten. Ich deklariere deshalb nur das
lang
-Attribut und lasse das
xml:lang
-Attribut vor der Auslieferung von einem XSLT-Stylesheet ergänzen.
xml:space
ist in XHTML 1.0 vor allem für die Elemente
pre
,
style
und
script
von Interesse und für diese bereits in den DTDs und Schemata mit dem Wert
preserve
deklariert.
XSL.XSD
und
ASP.XSD
im Ordner
%CommonProgramFiles%\Microsoft Shared\OFFICE11\SCHEMAS\XML
) offenbar nicht korrekt geladen, wenn nicht eines der eingebauten HTML-Schemata ausgewählt ist. Um dieses Problem zu beheben, rufen Sie nach dem Start einfach
Extras Seitenoptionen… auf und schließen den Dialog gleich wieder. Die Zuordnung von XML-Schemata ist in FrontPage übrigens hart codiert, es hat keinen Zweck, die XHTML-Schemata in diesen Ordner zu entpacken.
In FrontPage 2003 funktioniert Extras Browserkompatiblität… nicht mit den XHTML-Schemata. Sie können stattdessen meinen XHTML-Schema-Validator verwenden.