» schneegans.de » Microsoft FrontPage » XHTML-Schemata für FrontPage 2003 und Visual Studio .NET
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 xmlns='http://www.w3.org/1999/xhtml' 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 xmlns='http://www.w3.org/1999/xhtml' 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.