﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://schneegans.de/dtd/xhtml1-strict.dtd"[]><html lang="de" xml:lang="de" xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/2002/08/xhtml/xhtml1-strict.xsd" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><head><meta name="ROBOTS" content="NOINDEX, NOFOLLOW" /><title>XHTML-Schemata für FrontPage 2003 und Visual Studio .NET</title><link href="http://schneegans.de/xp/?url=http%3A%2F%2Fschneegans.de%2Fstyle%2F&amp;ct=application%2Fxml" rel="Stylesheet" type="text/css" /></head><body><table id="DankeThilo" style="border-collapse: collapse; margin: 20px auto; background-color: #EEE; border: 5px #EEA000 solid; padding: 10px;"><tr style="border: none;"><td rowspan="1" colspan="1" style="border:none; text-align: center; padding: 20px; font-size: 6em; font-weight: bold; color: #EEA000;">Danke, Thilo!</td></tr><tr style="border: none;"><td rowspan="1" colspan="1" style="border:none; text-align: right; padding: 3px;"><a shape="rect" href="http://schneegans.de/xp/?url=http%3A%2F%2Fwww.steinhoefel.de%2Fblog%2F2010%2F09%2Fweitermachen-thilo.html&amp;ct=application%2Fxml" style="text-decoration: none;" class="Offsite">...</a></td></tr></table><div class="Header"> <h1>XHTML-Schemata für FrontPage 2003 und Visual Studio .NET</h1> <p class="Breadcrumb">» <a shape="rect" href="http://schneegans.de/xp/?url=http%3A%2F%2Fschneegans.de%2F&amp;ct=application%2Fxml">schneegans.de</a> » <a shape="rect" href="http://schneegans.de/xp/?url=http%3A%2F%2Fschneegans.de%2Ffrontpage%2F&amp;ct=application%2Fxml">Microsoft FrontPage</a> » XHTML-Schemata für FrontPage 2003 und Visual Studio .NET</p> <div id="_ctl0_NewsgroupAnnouncement" style="color: #B22; border: thin solid #B22; padding: 5px;"> <p>Microsoft hat angekündigt, seine öffentlichen Newsgroups (<strong>microsoft.public.de.*</strong>) <a shape="rect" href="http://schneegans.de/xp/?url=http%3A%2F%2Fpatch-info.de%2Fartikel%2F2010%2F05%2F05%2F849&amp;ct=application%2Fxml" class="Offsite">abzuschalten</a>. Die beiden von mir betreuten Gruppen <strong>microsoft.public.de.frontpage</strong> und <strong>microsoft.public.de.expression.web</strong> werden bereits zum 1. Juni 2010 geschlossen.</p> <p>Ich empfehle meinen Besuchern sowie allen Anwendern von FrontPage und Expression Web, in die deutschsprachige Webautoren-Newsgroup <strong>de.comm.infosystems.www.authoring.misc</strong> zu wechseln. Beachten Sie auch meine <a shape="rect" href="http://schneegans.de/xp/?url=http%3A%2F%2Fgroups.google.com%2Fgroup%2Fmicrosoft.public.de.frontpage%2Fmsg%2Fc1e8d3bbf0542ddd&amp;ct=application%2Fxml" class="Offsite">Ankündigung in den Newsgroups</a>.</p> </div> </div><div class="Content"> <p class="Summary">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.</p> <p>FrontPage 2003 und Visual Studio .NET können <a shape="rect" href="http://schneegans.de/xp/?url=http%3A%2F%2Fwww.w3.org%2FXML%2FSchema.html&amp;ct=application%2Fxml" class="Offsite">XML-Schemata</a> 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 <a shape="rect" href="http://schneegans.de/xp/?url=http%3A%2F%2Fwww.w3.org%2FTR%2Fxhtml1-schema%2F&amp;ct=application%2Fxml" class="Offsite">Schemata für die drei XHTML-1.0-Varianten</a> <span lang="en" xml:lang="en">Strict</span>, <span lang="en" xml:lang="en">Transitional</span> und <span lang="en" xml:lang="en">Frameset</span> 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 <del>per XSLT</del> <ins>mit den Klassen des <code>System.Xml.Schema</code>-Namensraums des .NET-Frameworks</ins> in eine äquivalente Form transformiert, die von den beiden Programmen interpretiert werden kann. Die transformierten Schemata sind zum <del><a shape="rect" href="http://schneegans.de/xp/?url=http%3A%2F%2Fschneegans.de%2Ffrontpage%2Fxhtml-schema%2Fxhtml1-schemas.zip&amp;ct=application%2Fxml">Download</a></del> <ins> <a shape="rect" href="http://schneegans.de/xp/?url=http%3A%2F%2Fschneegans.de%2Ffrontpage%2Fxhtml-schema%2Fxhtml1-schemas-flat-2005-06-05.zip&amp;ct=application%2Fxml">Download</a></ins> verfügbar. <del>Das XSLT-Stylesheet selbst ist jetzt ebenfalls im Archiv enthalten, ferner eine Batch-Datei, für deren Ausführung Sie lediglich <a shape="rect" href="http://schneegans.de/xp/?url=http%3A%2F%2Fwww.microsoft.com%2Fdownloads%2Fdetails.aspx%3FFamilyId%3D2FB55371-C94E-4373-B0E9-DB4816552E41%26displaylang%3Den&amp;ct=application%2Fxml" class="Offsite">msxsl.exe</a> benötigen.</del></p> <p>Die Schemata sind nun <em class="Name">„flach“</em> organisiert, indem bspw. Verweise auf Attributgruppen oder Typen aufgelöst wurden. Am Beispiel des <code>table</code>-Elements läßt sich die Transformation gut demonstrieren:</p> <h3>Original-Schema</h3><pre xml:space="preserve" class="Snippet"><code>&lt;xs:element name="table"&gt;
  &lt;xs:complexType&gt;
    &lt;xs:sequence&gt;
      &lt;xs:element minOccurs="0" ref="caption"/&gt;
      &lt;xs:choice&gt;
        &lt;xs:element minOccurs="0" maxOccurs="unbounded" ref="col"/&gt;
        &lt;xs:element minOccurs="0" maxOccurs="unbounded" ref="colgroup"/&gt;
      &lt;/xs:choice&gt;
      &lt;xs:element minOccurs="0" ref="thead"/&gt;
      &lt;xs:element minOccurs="0" ref="tfoot"/&gt;
      &lt;xs:choice&gt;
        &lt;xs:element maxOccurs="unbounded" ref="tbody"/&gt;
        &lt;xs:element maxOccurs="unbounded" ref="tr"/&gt;
      &lt;/xs:choice&gt;
    &lt;/xs:sequence&gt;
    &lt;xs:attributeGroup ref="attrs"/&gt;
    &lt;xs:attribute name="summary" type="Text"/&gt;
    &lt;xs:attribute name="width" type="Length"/&gt;
    &lt;xs:attribute name="border" type="Pixels"/&gt;
    &lt;xs:attribute name="frame" type="TFrame"/&gt;
    &lt;xs:attribute name="rules" type="TRules"/&gt;
    &lt;xs:attribute name="cellspacing" type="Length"/&gt;
    &lt;xs:attribute name="cellpadding" type="Length"/&gt;
  &lt;/xs:complexType&gt;
&lt;/xs:element&gt;</code></pre> <h3>Transformiertes Schema</h3> <pre xml:space="preserve" class="Snippet"><code>&lt;xs:element name="table"&gt;
  &lt;xs:complexType&gt;
    &lt;xs:choice&gt;
      &lt;xs:element ref="caption" /&gt;
      &lt;xs:element ref="col" /&gt;
      &lt;xs:element ref="colgroup" /&gt;
      &lt;xs:element ref="thead" /&gt;
      &lt;xs:element ref="tfoot" /&gt;
      &lt;xs:element ref="tbody" /&gt;
      &lt;xs:element ref="tr" /&gt;
    &lt;/xs:choice&gt;
    &lt;xs:attribute name="id" /&gt;
    &lt;xs:attribute name="class" /&gt;
    &lt;xs:attribute name="style" /&gt;
    &lt;xs:attribute name="title" /&gt;
    &lt;xs:attribute name="lang"&gt;
      &lt;xs:simpleType&gt;
        &lt;xs:restriction&gt;
          &lt;xs:enumeration value="en" /&gt;
          &lt;xs:enumeration value="de" /&gt;
          &lt;xs:enumeration value="de-DE" /&gt;
          &lt;xs:enumeration value="de-AT" /&gt;
          &lt;xs:enumeration value="de-CH" /&gt;
          &lt;xs:enumeration value="fr" /&gt;
        &lt;/xs:restriction&gt;
      &lt;/xs:simpleType&gt;
    &lt;/xs:attribute&gt;
    &lt;xs:attribute name="dir"&gt;
      &lt;xs:simpleType&gt;
        &lt;xs:restriction base="xs:token"&gt;
          &lt;xs:enumeration value="ltr" /&gt;
          &lt;xs:enumeration value="rtl" /&gt;
        &lt;/xs:restriction&gt;
      &lt;/xs:simpleType&gt;
    &lt;/xs:attribute&gt;
    &lt;xs:attribute name="onclick" /&gt;
    &lt;xs:attribute name="ondblclick" /&gt;
    &lt;xs:attribute name="onmousedown" /&gt;
    &lt;xs:attribute name="onmouseup" /&gt;
    &lt;xs:attribute name="onmouseover" /&gt;
    &lt;xs:attribute name="onmousemove" /&gt;
    &lt;xs:attribute name="onmouseout" /&gt;
    &lt;xs:attribute name="onkeypress" /&gt;
    &lt;xs:attribute name="onkeydown" /&gt;
    &lt;xs:attribute name="onkeyup" /&gt;
    &lt;xs:attribute name="summary" /&gt;
    &lt;xs:attribute name="width" /&gt;
    &lt;xs:attribute name="border" /&gt;
    &lt;xs:attribute name="frame"&gt;
      &lt;xs:simpleType&gt;
        &lt;xs:restriction base="xs:token"&gt;
          &lt;xs:enumeration value="void" /&gt;
          &lt;xs:enumeration value="above" /&gt;
          &lt;xs:enumeration value="below" /&gt;
          &lt;xs:enumeration value="hsides" /&gt;
          &lt;xs:enumeration value="lhs" /&gt;
          &lt;xs:enumeration value="rhs" /&gt;
          &lt;xs:enumeration value="vsides" /&gt;
          &lt;xs:enumeration value="box" /&gt;
          &lt;xs:enumeration value="border" /&gt;
        &lt;/xs:restriction&gt;
      &lt;/xs:simpleType&gt;
    &lt;/xs:attribute&gt;
    &lt;xs:attribute name="rules"&gt;
      &lt;xs:simpleType&gt;
        &lt;xs:restriction base="xs:token"&gt;
          &lt;xs:enumeration value="none" /&gt;
          &lt;xs:enumeration value="groups" /&gt;
          &lt;xs:enumeration value="rows" /&gt;
          &lt;xs:enumeration value="cols" /&gt;
          &lt;xs:enumeration value="all" /&gt;
        &lt;/xs:restriction&gt;
      &lt;/xs:simpleType&gt;
    &lt;/xs:attribute&gt;
    &lt;xs:attribute name="cellspacing" /&gt;
    &lt;xs:attribute name="cellpadding" /&gt;
  &lt;/xs:complexType&gt;
&lt;/xs:element&gt;</code></pre> <h2>Änderungen und Erweiterungen</h2> <p>Folgende Änderungen wurden vorgenommen:</p> <ul><li><del><code>&lt;xsd:group ref="..." /&gt;</code>-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 <code>xsd:group</code>- oder <code>xsd:complexType</code>-Elemente mehr.</del></li><li>Es wurden einige von <a shape="rect" href="http://schneegans.de/xp/?url=http%3A%2F%2Fmsdn.microsoft.com%2Flibrary%2Fen-us%2Fvsintro7%2Fhtml%2FvxgrfVisualStudioSchemaAnnotations.asp&amp;ct=application%2Fxml" class="Offsite">Visual Studio .NET unterstützte Annotationen</a> hinzugefügt, insbesondere wurden <code>xsd:attribute</code>-Elemente ggf. um <code>vs:builder="url"</code>-, <code>vs:builder="style"</code>- und <code>vs:builder="color"</code>-Attribute ergänzt. Mit <code>vs:builder="url"</code> blenden FrontPage und Visual Studio bspw. einen <em class="Name" lang="en" xml:lang="en">„URL picker“</em> ein.</li><li>Einige einfache Typen wurden erweitert, um die Eingabe von häufig benutzten Attributen wie <code>rel="Stylesheet"</code>, <code>lang="de"</code>, <code>type="text/css"</code> oder <code>media="print"</code> zu erleichtern.</li><li><del>Allen Typnamen wurde ein Präfix <code>Type-</code> vorangestellt, um sie von Elementnamen zu unterscheiden. Im Fall von <code>script</code> gibt es nämlich eine Kollision, und FrontPage und Visual Studio kommen deswegen durcheinander.</del></li><li>Mittels <code>vs:clientom="ie5_0dom.tlb"</code> wird die mit FrontPage und Visual Studio gelieferte Typ-Bibliothek referenziert. Dies ermöglicht IntelliSense auch für <span lang="en" xml:lang="en">Scripting</span>. Erkannt werden die Elemente <code>&lt;script type="text/vbscript"&gt;</code> und <code>&lt;script type="text/javascript"&gt;</code> sowie Attribute wie bspw. <code>onclick</code>.</li><li>Alle <code>xsd:annotation</code>-Elemente wurden entfernt.</li></ul> <h2>Installation</h2> <h3>FrontPage 2003</h3> <p>Um die Schemata in FrontPage 2003 zu benutzen, müssen sie einfach in den Ordner <code>%CommonProgramFiles%\Microsoft Shared\OFFICE11\SCHEMAS\HTML</code> entpackt werden, danach muß FrontPage neu gestartet werden. Das gewünschte Schema kann dann unter <em class="Menupath"><span>Extras</span> <span>→ Seitenoptionen...</span> <span>→ (Dokument)erstellung</span> <span>→ Schemaversion</span></em> ausgewählt werden. FrontPage 2003 unterstützt leider kein XHTML, man erhält also zunächst HTML 4.01. Mit dem Befehl <em class="Menupath"><span>XML-Formatierungsregeln anwenden</span></em> kann man daraus aber leicht XHTML erzeugen. Die Namensraum-Deklaration <code>xmlns='http://www.w3.org/1999/xhtml'</code> müssen Sie selbst erstellen, FrontPage beachtet das <code>targetNamespace</code>-Attribut des Schemas nicht.</p> <p>Außerdem empfiehlt es sich, <em class="Menupath"><span>Extras</span> <span>→ Seitenoptionen...</span> <span>→ IntelliSense</span> <span>→ HTML-Attributwertangaben</span></em> zu aktivieren.</p> <h3>Visual Studio .NET</h3> <p>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 <code>\Common7\Packages\schemas\html</code> bzw. <code>\Common7\Packages\schemas\xml</code> des Installationsverzeichnisses ablegen, so daß sie allen Projekten zur Verfügung stehen.</p> <p>In <em><code>.html</code>-Dateien</em> unterstützt Visual Studio XHTML nicht. Bei Änderungen in der Entwurfsansicht wird bspw. <code>&lt;br /&gt;</code> zu <code>&lt;br&gt;</code> 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 <code>\Common7\Packages\schemas\html</code> vornehmen, um HTML-4.01-Dokumente zu erstellen, aus denen mein <a shape="rect" href="http://schneegans.de/xp/?url=http%3A%2F%2Fschneegans.de%2Fasp.net%2Ftidy%2F&amp;ct=application%2Fxml">Tidy-Filter</a> dann zur Laufzeit XHTML erzeugen kann:</p> <pre xml:space="preserve" class="Snippet"><code>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"</code></pre> <p>In <em><code>.xml</code>-Dateien</em> funktionieren die Schemata besser, bspw. wird die Namensraum-Deklaration <code>xmlns='http://www.w3.org/1999/xhtml'</code> automatisch erstellt und man hat die Garantie, daß Visual Studio nicht den Quellcode ändert. In den Schemata in <code>\Common7\Packages\schemas\xml</code> ändern Sie dazu <code>vs:ishtmlschema="true"</code> in <code>vs:ishtmlschema="false"</code>. Andererseits fehlt die HTML-Entwurfsansicht.</p><p>Es erweist sich als nachteilig, daß die drei XHTML-Varianten <a shape="rect" href="http://schneegans.de/xp/?url=http%3A%2F%2Fwww.xml.com%2Fpub%2Fa%2F1999%2F10%2Fnames%2Fnamespaces.html&amp;ct=application%2Fxml" hreflang="en" class="Offsite">denselben Namensraum</a> <code>http://www.w3.org/1999/xhtml</code> bevölkern, denn Visual Studio bildet offenbar von Schemata mit demselben Ziel-Namensraum die Vereinigungsmenge. Ich persönlich benötige ohnehin nur die <span lang="en" xml:lang="en">Strict</span>-Variante; wer mehr als ein Schema gleichzeitig verwenden möchte, muß sich wohl etwas einfallen lassen.</p> <h3>FrontPage 2000 und 2002</h3> <p>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.</p> <h2>Bekannte Probleme</h2> <ul><li>Die Attribute <code>xml:lang</code> und <code>xml:space</code> werden nicht berücksichtigt. Sie stammen aus dem Namensraum <code>http://www.w3.org/XML/1998/namespace</code>, und FrontPage und Visual Studio unterstützen die Elemente <code>xsd:include</code> und <code>xsd:import</code> nicht.<p>Auf <code>xml:lang</code> läßt sich allerdings leicht verzichten. Nach den <a shape="rect" href="http://schneegans.de/xp/?url=http%3A%2F%2Fwww.w3.org%2FTR%2Fxhtml1%2F&amp;ct=application%2Fxml#C_7" class="Offsite">Kompatibilitätsrichtlinien</a> für XHTML 1.0 müssen sowohl <code>lang</code>- als auch <code>xml:lang</code>-Attribut deklariert werden und denselben Wert erhalten. Ich deklariere deshalb nur das <code>lang</code>-Attribut und lasse das <code>xml:lang</code>-Attribut vor der Auslieferung von einem XSLT-Stylesheet ergänzen.</p> <p><code>xml:space</code> ist in XHTML 1.0 vor allem für die Elemente <code>pre</code>, <code>style</code> und <code>script</code> von Interesse und für diese bereits in den DTDs und Schemata mit dem Wert <code lang="en" xml:lang="en">preserve</code> deklariert.</p></li><li>In FrontPage werden die Schemata für XSLT und ASP.NET (<code>XSL.XSD</code> und <code>ASP.XSD</code> im Ordner <code>%CommonProgramFiles%\Microsoft Shared\OFFICE11\SCHEMAS\XML</code>) 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 <em class="Menupath"><span>Extras</span> <span>→ Seitenoptionen...</span></em> 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.</li><li>In FrontPage 2003 werden <span lang="en" xml:lang="en">Behaviors</span> nicht unterstützt, wenn ein XHTML-Schema benutzt wird. Das Problem kann durch Umschalten auf eines der in FrontPage enthaltenen Schemata behoben werden.</li><li><p>In FrontPage 2003 funktioniert <em class="Menupath"><span>Extras</span> <span>→ Browserkompatiblität...</span></em> nicht mit den XHTML-Schemata. Sie können stattdessen meinen <a shape="rect" href="http://schneegans.de/xp/?url=http%3A%2F%2Fschneegans.de%2Fsv%2F&amp;ct=application%2Fxml">XHTML-Schema-Validator</a> verwenden.</p> </li></ul> </div><div class="Footer"> <em>URL:</em> http://schneegans.de/frontpage/xhtml-schema/<br /><a shape="rect" href="http://schneegans.de/xp/?url=http%3A%2F%2Fschneegans.de%2Fsv%2F%3Furl%3Dhttp%3A%2F%2Fschneegans.de%2Ffrontpage%2Fxhtml-schema%2F&amp;ct=application%2Fxml" hreflang="en" class="Offsite">XHTML überprüfen</a> · <a shape="rect" href="http://schneegans.de/xp/?url=http%3A%2F%2Fjigsaw.w3.org%2Fcss-validator%2Fvalidator%3Furi%3Dhttp%3A%2F%2Fschneegans.de%2Ffrontpage%2Fxhtml-schema%2F&amp;ct=application%2Fxml" class="Offsite">CSS überprüfen</a> · <a shape="rect" href="http://schneegans.de/xp/?url=http%3A%2F%2Fschneegans.de%2Fxp%2F%3Furl%3Dhttp%3A%2F%2Fschneegans.de%2Ffrontpage%2Fxhtml-schema%2F&amp;ct=application%2Fxml" class="Offsite">Als <code>application/xml</code> laden</a><address><em>Autor:</em> <a shape="rect" href="http://schneegans.de/xp/?url=http%3A%2F%2Fschneegans.de%2Fchristoph%2F&amp;ct=application%2Fxml">Christoph Schneegans</a> (<a shape="rect" href="mailto:Christoph%20Schneegans%20%3CChristoph@Schneegans.de%3E">Christoph@Schneegans.de</a>)</address> </div></body></html><!-- XHTML Proxy has successfully processed this page. -->