XHTML-Schemata für FrontPage 2003 und Visual Studio .NET
» schneegans.de » Microsoft FrontPage » XHTML-Schemata für FrontPage 2003 und Visual Studio .NET
Microsoft hat seine öffentlichen Newsgroups (microsoft.public.de.*) zum 1. Juni 2010 abgeschaltet. Darunter fallen auch die bislang von mir betreuten Gruppen microsoft.public.de.frontpage und microsoft.public.de.expression.web.
Ich empfehle meinen Besuchern sowie allen Anwendern von FrontPage und Expression Web, in die deutschsprachige Webautoren-Newsgroup de.comm.infosystems.www.authoring.misc zu wechseln. Beachten Sie auch meine Ankündigung in den Newsgroups.
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:
Original-Schema
<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>
Transformiertes Schema
<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>
Änderungen und Erweiterungen
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.- Es wurden einige von Visual Studio .NET unterstützte Annotationen hinzugefügt, insbesondere wurden
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. - Einige einfache Typen wurden erweitert, um die Eingabe von häufig benutzten Attributen wie
rel="Stylesheet", lang="de", type="text/css" oder media="print" zu erleichtern. Allen Typnamen wurde ein Präfix 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.- Mittels
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. - Alle
xsd:annotation-Elemente wurden entfernt.
Installation
FrontPage 2003
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 ausgewählt werden. FrontPage 2003 unterstützt leider kein XHTML, man erhält also zunächst HTML 4.01. Mit dem Befehl 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, zu aktivieren.
Visual Studio .NET
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.
FrontPage 2000 und 2002
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.
Bekannte Probleme
- Die Attribute
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.
- In FrontPage werden die Schemata für XSLT und ASP.NET (
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 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 werden Behaviors nicht unterstützt, wenn ein XHTML-Schema benutzt wird. Das Problem kann durch Umschalten auf eines der in FrontPage enthaltenen Schemata behoben werden.
In FrontPage 2003 funktioniert nicht mit den XHTML-Schemata. Sie können stattdessen meinen XHTML-Schema-Validator verwenden.