Websiteentwicklung: XHTML: Objekte
Das Element img hat, wie im vorherigen Kapitel gezeigt, als inhaltsleeres Element ein recht einfaches Modell, welches sich für komplexere Anwendungen oder strukturierte eingebettete Strukturen nicht eignet.
Zudem gibt es bei gängigen Darstellungsprogrammen einige Probleme, die auf historische Implementierungen zurückzuführen sind. Diese beabsichtigten Probleme verhindern einerseits, dass bei den Programmen Sicherheitsprobleme wirksam werden, wenn das Element img bei beliebigen Formaten komplett funktionieren würde. Diese Implementierungsprobleme können aber andererseits auch verhindern, dass interaktive, animierte Dokumente wie gewünscht in img funktionieren.
Für beliebige Formate mit anderen Formaten und strukturiertem Text als Alternative bietet XHTML dafür das Element object an, mit welchem nicht nur Graphik eingebunden werden kann, sondern auch interaktive, animierte Inhalte, Video-Formate, Audioformate, auch andere XML-Formate und selbst XHTML-Dokumente. Mit diesem allgemeineren Ansatz vermeidet object die technische Sackgasse des leeren Elementes img und bietet gleichzeitig die Möglichkeit, Alternativen in anderen Formaten und als strukturierten Text oder eine Mischung aus beiden anzubieten.
object selbst ist ein inzeiliges Element, kann aber neben dem für dieses Element spezifischen Element param beliebigen laufenden Inhalt, also Text, Phrasenelemente und Blockelemente enthalten. Einmal abgesehen von param sollte sich der Autor allerdings im Sinne einer guten Struktur entscheiden, ob Blockelemente darin verwendet werden oder Text und Phrasenelemente.
Element object
[Bearbeiten]object kann als inzeiliges Element also in Blockelementen auftreten, die inzeiligen Inhalt erlauben. Zudem kann es im Element head auftreten. Weil die dort notierten Elemente aber nicht direkt zusammen mit dem Inhalt von body angezeigt werden, eignet sich object als Nachfahre von head vorrangig für Audio-Dateien und ähnliches, was keiner Darstellung im Inhaltsbereich bedarf. Zwar ist auch in dem Falle der mögliche Inhalt von object nicht anders, da der praktisch aber nicht angezeigt wird, beschränkt sich der gegebenenfalls sinnvolle Inhalt auf param und object.
Das Konzept besteht nun darin, dass sich jene param-Elemente, die Kindelemente eines object sind, auf dieses beziehen.
Anderer Inhalt von object stellt eine Alternative zu der Darstellung des von object referenzierten Dokumentes dar, falls dieses Dokument selbst nicht dargetellt werden kann (oder object nicht implementiert ist).
Alle Attribute von object sind optional, die allgemein verwendbaren sind auch bei object verwendbar.
object hat die spezifischen Attribute archive, classid, codebase, codetype, data, declare, height, name, standby, tabindex, type, width und usemap.
usemap ist nur für verweissensitive Objekte relevant und wird in dem Zusammenhang erläutert.
Attribut data
[Bearbeiten]Die Angabe von data ist eine Möglichkeit, ein externes Dokument einzubetten. Der Wert von data ist eine URI oder (in seltenen Fällen) ein Fragmentidentifizierer. Dies gibt an, welcher Inhalt eingebettet werden soll. Da XHTML allein selbst die Funktionalität dafür nicht bietet, entfällt ohne weitere Tricks bei reinen XHTML-Dokumenten praktisch die Möglichkeit mit dem Fragmentidentifizierer.
Zu beachten: Das Darstellungsprogramm wird das referenzierte Dokument fast immer ohne vorherige Nachfrage beim Nutzer von der angegebenen Quelle zu laden versuchen. Bei der Referenzierung einer externen Quelle mittels absoluter URI gelangt so Information ohne Wissen des Nutzers auf den externen Dienstrechner. Hinsichtlich des Datenschutzes und der Privatsphäre des Nutzers ist dies bedenklich, folglich also besser zu vermeiden. Ist trotzdem eine externe Referenzierung erwünscht, ist im Sinne des Datenschutzes zuvor besser ein von dem Sachverhalt nicht betroffenes Dokument vorzuschalten, in welchem der Nutzer über das potentielle Datenleck informiert wird, sich damit also einverstanden erklärt, wenn das betreffende Dokument mit der externen Referenz aufgerufen wird. Sofern das überhaupt getan wird, sollte den Nutzern eine lokale Alternative bereitgestellt werden oder jedenfalls eine Variante des Projektes, welche auf derartige externen Quellen verzichtet.
In Zusammenhang mit dem noch zu erläuternden Attribut codebase ergibt sich bei relativen Angaben allerdings eine andere Auflösung der URI, siehe Erläuterungen zu codebase.
Als Beispiel sei das Unternehmen Klingel-Karl genannt, welches
ein Fachgeschäft für Hausklingeln und Alarmanlagen ist.
Die Idee besteht nun darin, dass statt des üblichen Logos oder
Piktogrammes als individuelles Erkennungszeichen ein Klingelton
dienen soll, also eher ein Akustogramm (englisch: jingle).
Die Klingelei wird als rein dekorativ und nicht relevant für den Inhalt angenommen.
Man hat allerdings die Formate OGG und MP3 zur Auswahl.
Bei der ersten Variante wird das object dazu im Element head notiert:
<head>
<title>Klingel-Karl</title>
<object data="Gongelingeldong.oga">
<object data="Gongelingeldong.mp3" />
</object>
</head>
Ergebnis: Falls eine akustische Wiedergabe beim Besucher vorgesehen ist und das Format OGG (audio/ogg) interpretiert werden kann, wird der Klingelton in diesem Format losgeschmettert, sobald die Seite geladen wird. Ist dies nicht der Fall, so wird MP3 (audio/mpeg) versucht, klappt auch das nicht, wird gar nicht geklingelt.
Bei Klingel-Karl werden Besucher den kurzen Klingelton vermutlich nicht beanstanden, auf beliebigen Seiten kann aber besonders längeres Gedudel, eventuell gar noch in einer Endlosschleife eher nerven und sollte erst nach einer expliziten Interaktion durch den Nutzer aktiviert werden - dies könnte etwa erfolgen, indem mit einem Verweis entweder direkt auf die Audio-Datei verwiesen wird oder auf eine gesonderte XHTML-Datei mit entsprechendem object.
Bei der zweiten Variante wird es irgendwo als Nachfahre von body in einem Blockelement notiert:
<div>
<object data="Gongelingeldong.oga">
<object data="Gongelingeldong.mp3" />
</object>
</div>
Das Ergebnis ist das gleiche.
Attribute width und height
[Bearbeiten]Wird object als Nachfahre von body notiert, kann das eingebettete Dokument oder der Inhalt dargestellt werden, wenn dafür vom Autor Platz vorgesehen wird.
Dazu werden wie bei img die Attribute width (Breite) und height (Höhe) verwendet. Die dort gemachten Anmerkungen und Erläuterungen gelten entsprechend.
Der Wert ist jeweils eine Zahl als Angabe in Pixeln oder ein Prozentwert.
Beispiel Einbettung eines SVG-Dokumentes (auch interaktiv und animiert):
<div class="SVG">
<object data="Sterntetraeder.svg"
width="400" height="400">
<p>
Offenbar kann das Format SVG (image/svg+xml)
nicht direkt angezeigt werden.
Sofern ein externes Programm zur Anzeige
von SVG verfügbar ist,
kann folgender Verweis verwendet werden:
<a href="Sterntetraeder.svg">Sterntetraeder</a>.
</p>
<p>
Eine genaue Erklärung, was ein Sterntetraeder ist,
findet sich zum Beispiel bei wikipedia:
<a href="http://de.wikipedia.org/wiki/Sterntetraeder">
Sterntetraeder allgemein</a>.
</p>
<p>
Bei der konkreten Darstellung hier hat jede Seite eine
andere Farbe und ist teiltransparent.
Mit einer Animation dreht sich der Sterntetraeder vor dunklem
Hintergrund um eine Achse durch den eigenen Schwerpunkt.
Es erfolgt eine Kugelprojektion auf die Darstellungsebene.
</p>
</object>
</div>
Als Alternative werden dem Nutzer gleich mehrere Optionen angeboten, welche alle als Kindelemente von object nacheinander angezeigt werden, der Nutzer kann also selbst wählen, was er tun will, aber auch nur, wenn die Datei nicht eingebettet angezeigt werden kann.
Höhe und Breite sind hier als jeweils 400 Pixel angegeben. Dies ist der Anzeigebereich, der dem SVG-Dokument zur Verfügung steht. Je nachdem, was im SVG-Dokument angeben ist, wird dann dieses entweder auf die angegebene Größe skaliert oder geeignet angeordnet. Ist das SVG-Dokument kleiner als der Anzeigebereich, kann im SVG-Dokument angegeben werden, wie das SVG-Dokument im Anzeigebereich positioniert werden soll. Ist das SVG-Dokument größer als der Anzeigebereich, gibt es gegebenenfalls Rollbalken rechts und unten.
Um im Bedarfsfalle nochmal alles mit CSS umskalieren zu können, ist im
umgebenden Element div
eine Klasse angegeben.
Attribut type
[Bearbeiten]Besonders bei exotischeren und proprietären Formaten, bei denen nicht davon ausgegangen werden kann, dass das Darstellungsprogramm für XHTML diese selber interpretiert, ist es ratsam, mit dem Attribut type den Inhaltstyp (ehemals MIME-Typ) des Formates anzugeben. Anhand dieser Angabe kann das Darstellungsprogramm dann bereits entscheiden, ob das object eingebettet angezeigt werden kann. Ist das für den angegebenen Typ nicht möglich, so wird das Darstellungsprogramm die Datei gar nicht erst laden und stattdessen mit dem Inhalt von object als Alternative weitermachen.
Der Wert von type ist also ein Inhaltstyp.
Generell werden diese Inhaltstypen zentral von IANA verwaltet und als Listen zur Verfügung gestellt. In der Liste stehen die Formate allerdings erst, wenn der formale Prozeß der Registrierung abgeschlossen ist, was länger dauern kann. Bei SVG hat dies zum Beispiel einige Jahre gedauert. In der Praxis werden daher auch bereits Inhaltstypen verwendet, bei denen die Registrierung noch nicht abgeschlossen ist, die aber jedenfalls bereits angemeldet sind.
Generell werden die Listen grob nach Anwendung aufgeteilt, also in die Inhaltstypen 'application', 'audio', 'example', 'image', 'message', 'model', 'multipart' 'text', 'video'. In jeder dieser Listen stehen dann weitere Untertypen, die den jeweiligen Formaten zugeordnet sind.
Zuerst wird der Untertyp notiert, dann ein Schrägstrich /, dann der Untertyp.
Folgende Listen zeigen ein paar Beispiele.
Graphik:
- SVG
- image/svg+xml
- JPEG
- image/jpeg
- PNG
- image/png
- GIF
- image/gif
- TIFF
- image/tiff
Audio:
- OGG (audio)
- audio/ogg
- MP3
- audio/mpeg
- MPEG-4
- audio/mp4
- 3gpp (audio)
- audio/3gpp
- 3gpp2 (audio)
- audio/3gpp2
Video:
- OGG (video)
- video/ogg
- MP4 (video)
- video/mp4
- MPEG
- video/mpeg
- 3gpp (video)
- video/3gpp
- 3gpp2 (video)
- video/3gpp2
- Quicktime
- video/quicktime
Anwendungen:
- XHTML
- application/xhtml+xml
- RDF
- application/rdf+xml
- SMIL
- application/smil+xml
- MathML
- application/mathml+xml
- XML
- application/xml
- PS
- application/postscript
- application/pdf
- OGG
- application/ogg
- MP4
- application/mp4
Text:
- einfacher Text
- text/plain
- HTML
- text/html
- XML (alte Notation, neue siehe Anwendungen)
- text/xml
Dann gibt es auch noch nicht angemeldete, experimentelle Formate, dort beginnt der Untertyp zur Kennzeichnung dieses Sachverhaltes mit einem x-. Die Zuordnung muß hier auch nicht eindeutig sein. Ein Darstellungsprogramm könnte also die Datei erstmal pauschal herunterladen, wenn irgendein Format zu dem als experimentell gekennzeichneten Inhaltsyp paßt und dann versuchen, dies darzustellen. Gelingt das nicht, wird anschließend zur Alternative gewechselt.
Hat man sich selbst ein XML-Format definiert, welches man 'My Own Markup Language' nennt, so kann man dem zum Beispiel selbst den Inhaltstyp 'application/x-moml+xml' verpassen, ohne den Typ offiziell registrieren lassen zu müssen. Wenn jemand anders allerdings das XML-Format 'Master Of Markup Language' definiert hat und dafür ebenfalls den Inhalttyp 'application/x-moml+xml' verwendet, ist dies nicht zu beanstanden und die Zuordnung ist nicht mehr eindeutig. Ein Darstellungsprogramm könnte allerdings am '+xml' erkennen, dass es sich zumindest um ein XML-Format handelt und dafür zumindest eine generische Anzeige bieten.
Beispiel flash-Anwendung:
<p>
<object data="/shopping/XTC13Werbung.swf"
type="application/x-shockwave-flash"
width="400" height="400">
Offenbar kann die Werbung im experimentellen Format
application/x-shockwave-flash nicht eingebettet angezeigt werden.<br />
Trotzdem können Sie unser Produkt hier bestellen:<br />
<a href="/shopping/muelltuetenXTC13.xhtml">Geniale Designer-Einkaufshilfe
XTC13 in limitierter Auflage</a>
</object>
</p>
Die Strategie ist in diesem Falle also, gleich zur Sache zu kommen, wenn das Werbfilmchen nicht angezeigt werden kann. Andere Formate als Alternative werden nicht in Betracht gezogen.
Beispiel SMIL einbetten:
<p>
Ich bin ganz überwältigt,
wer mir alles ein Geburtstagsständchen geschickt hat,
einfach mal anhören:
</p>
<ul>
<li>
<object data="http://example.org/smil/heiner/OdeAnKunigunde/"
type="application/smil+xml" width="400" height="100">
<a href="http://example.org/smil/heiner/OdeAnKunigunde/">Heiner
mit Katze Mauzi und Hund Wotan</a>
</object>
</li>
<li>
<object data="http://example.org/smil/kurt/OdeAnKunigunde/"
type="application/smil+xml" width="400" height="100">
<a href="http://example.org/smil/kurt/OdeAnKunigunde/">Kurt
und Anne-Liese mit den Kindlein Dietlinde und Hermeline</a>
</object>
</li>
<li>
<object data="http://example.org/smil/trulla/OdeAnKunigunde/"
type="application/smil+xml" width="400" height="100">
<a href="http://example.org/smil/trulla/OdeAnKunigunde/">Dörthe
und Waldemar</a>
</object>
</li>
</ul>
SMIL verfügt auch über Möglichkeiten der Interaktion, von daher kann damit gegebenenfalls das Geburtstagsständchen per Interkation abgespielt werden. Würden hingegen die Musikdateien einfach so eingebunden, würden gleich alle auf einmal losplärren. In der Alternative könnte Kunigunde hier somit auch gleich auf die Musikdateien verweisen, sofern die SMIL-Dateien sonst keine spannenden Dinge enthalten wie etwa ein zusätzliches Video, eine Animation oder begleitenden Text.
Attribut declare
[Bearbeiten]Mit dem Attribut declare kann angegeben werden, ob ein object sofort dargestellt werden soll oder nur von anderen referenziert werden oder erst aktiviert werden muß.
Ist das Attribut nicht angegeben, wird object sofort dargestellt. Ist der Wert 'declare', so ist vor der Darstellung eine Aktivierung erforderlich.
Leider haben viele gängige Darstellungsprogramme eine Implementierungslücke und ignorieren dieses Attribut. In der Praxis kann es also ratsam sein, die Möglichkeit der Aktivierung anders zu realisieren. Dies kann zum Beispiel dadurch erfolgen, dass mit dem object eine XHTML-Datei referenziert wird, in welcher ein Verweis auf eine XHTML-Datei steht, in welcher das object mit den darzustellenden Inhalten steht. Erst wenn der Verweis aktiviert wird, wird die Datei mit dem object aufgerufen und dargestellt.
Korrekte Implementierung vorausgesetzt kann ähnlich im selben Dokument ein Verweis auf ein object gesetzt werden, für welches declare="declare" angegeben ist und mittels id ein Fragmentidentifizierer, auf welchen mit dem Verweis verwiesen wird. Wird dieser Verweis aktiviert, wird das Objekt aktiviert.
Als Beispiel sei bereits genannter Klingel-Karl genannt, welcher eine Liste mit Klingeltönen
anbieten will, damit die Kunden schon mal vorhören können, bevor sie persönlich ins Fachgeschäft
kommen oder gleich auf der Seite bestellen.
So wie declare gedacht ist, kann das so realisiert werden (dabei wird hier jetzt angenommen, dass Karl die Auswahl der alternativen Darstellungsmöglichkeiten auf einer vorgeschalteten Seite gelöst hat, auf der in diesem Falle der Leser die Version ausgewählt hat, bei welcher das Format OGG verwendet wird):
<h1>Klingeltöne</h1>
<ul>
<li>
<object id="K1" declare="declare"
data="Pingelling.oga" type="audio/ogg"
width="0" height="0" />
<a href="#K1">Pingelling</a>
</li>
<li>
<object id="K2" declare="declare"
data="Dengelloeng.oga" type="audio/ogg"
width="0" height="0" />
<a href="#K2">Dengelöng</a>
</li>
<li>
<object id="K3" declare="declare"
data="Ringelleng.oga" type="audio/ogg"
width="0" height="0" />
<a href="#K3">Ringeleng</a>
</li>
<li>
<object id="K4" declare="declare"
data="Gooongggg.oga" type="audio/ogg"
width="0" height="0" />
<a href="#K4">Gong</a>
</li>
<li>
<object id="K5" declare="declare"
data="Krrrzaweng.oga" type="audio/ogg"
width="0" height="0" />
<a href="#K5">Krrrzaweng</a>
</li>
<li> etc
</li>
</ul>
Die alternative Variante ohne Verwendung von declare sieht nun so aus, dass in Hauptdokument die Liste steht:
<h1>Klingeltöne</h1>
<ul>
<li>
<object data="Pingelling.xhtml"
width="100%" height="50" />
</li>
<li>
<object data="Dengelloeng.xhtml"
width="100%" height="50" />
</li>
<li>
<object data="Ringelleng.xhtml"
width="100%" height="50" />
</li>
<li>
<object data="Gooongggg.xhtml"
width="100%" height="50" />
</li>
<li>
<object data="Krrrzaweng.xhtml"
width="100%" height="50" />
</li>
<li> etc
</li>
</ul>
Als wesentlicher Inhalt der eingebetteten XHTML-Dateien ergibt sich dann sowas, hier als Beispiel für Krrrzaweng.xhtml:
<p><a href="KrrrzawengData.xhtml">Krrrzaweng</a></p>
Und in KrrrzawengData.xhtml steht dann als wesentlicher Inhalt:
<p>
<object data="Krrrzaweng.oga" type="audio/ogg"
width="0" height="0" />
</p>
Dank der Implementierungslücken steigen der praktische Aufwand und die Zahl der zu erstellenden Dateien also erheblich. Die Größe der Darstellung der Objekte im Hauptdokument sollte dann auch noch mittels CSS brauchbar angepaßt werden, etwa mit Höhe und Breite in Einheiten wie em.
Als weitere einfache Alternative sei folgendes vorgeschlagen: Bei solch einer Auswahl auf object komplett verzichten und nur eine Liste von Verweisen auf die Audio-Dateien anbieten:
<h1>Klingeltöne</h1>
<ul>
<li>
<a href="Pingelling.oga" type="audio/ogg">Pingelling</a>
</li>
<li>
<a href="Dengelloeng.oga" type="audio/ogg">Dengelöng</a>
</li>
<li>
<a href="Ringelleng.oga" type="audio/ogg">Ringeleng</a>
</li>
<li>
<a href="Gooongggg.oga" type="audio/ogg">Gong</a>
</li>
<li>
<a href="Krrrzaweng.oga" type="audio/ogg">Krrrzaweng</a>
</li>
<li> etc
</li>
</ul>
Wird das eine Nußeckenbeispiel aus dem Kapitel über img
mit object realisiert, zum Beispiel weil dann in Bildern
enthaltene Animationen aufgrund hier nicht weiter diskutierter
Geheimnisse der Programmierer der Darstellungsprogramme (besser)
funktionieren, so ergibt sich auch die Möglichkeit der Wiederverwendung
von object, was den Vorteil hat, dass das Darstellungsprogramm
die object-Datei nur einmal laden soll (was hier relevant sein
könnte, weil das SVG zudem dynamisch per PHP vielleicht mit
Zufallsparametern erzeugt wird):
<head>
<title>Bertines Nußecke - köstlichste Rezepte für Nußgebäck</title>
<object id="NB" declare="declare"
data="Bilder/Nussbertine.php" type="image/svg+xml"
</head>
<body>
<h1><object data="#NB" width="100" height="100">
Willst Du <strong>Nußecken</strong> backen, gucke in
</object>
Bertines Nußecke
<object data="#NB" width="100" height="100">
nach den <em>köstlichsten Rezepten</em>!"
</object></h1>
<p>...</p>
</body>
In dem Falle ist es recht einfach, um die declare-Implementierungslücken herumzuarbeiten:
<head>
<title>Bertines Nußecke - köstlichste Rezepte für Nußgebäck</title>
</head>
<body>
<h1><object id="NB"
data="Bilder/Nussbertine.php" type="image/svg+xml"
width="100" height="100">
Willst Du <strong>Nußecken</strong> backen, gucke in
</object>
Bertines Nußecke
<object data="#NB"
width="100" height="100">
nach den <em>köstlichsten Rezepten</em>!"
</object></h1>
<p>...</p>
</body>
Zudem zeigt sich hier ein Vorteil von object gegenüber img - im Bedarfsfalle kann der alternative Inhalt problemlos mit weiteren Elementen strukturiert werden.
Attribut standby
[Bearbeiten]Mit dem Attribut standby kann als Wert einfacher Text notiert werden, der angezeigt wird, bis die Objektdaten geladen sind und angezeigt werden können. Es ist nicht festgelegt, wie ein Darstellungsprogramm diesen Text dargestellt, jedenfalls kann so dem Betrachter mitgeteilt werden, dass das Darstellungsprogramm noch mit dem Herunterladen oder Vorbereiten der Darstellung beschäftigt ist. Da einige Leute leicht ungeduldig werden, wenn es etwas länger dauert, kann dies für diese eine hilfreiche Information sein, warum kurzfristig noch nichts dargestellt wird.
Beispiel Video einbinden:
<object
standby="Das Video hat eine Dateigröße von 50 MiB,
daher kann es einen Augenblick dauern, bis es angezeigt wird."
data="DerPlumpssackGehtUm.ogv" type="video/ogg"
width="600" height="400">
<p>
Offenbar kann das Format OGG (video/ogg) nicht direkt angezeigt werden.
Sofern ein externes Programm zur Anzeige von OGG-Videos verfügbar ist,
kann folgender Verweis verwendet werden:
<a href="DerPlumpssackGehtUm.ogv">Der Plumpssack geht um</a>.
</p>
<p>
Dargestellt ist ein Gesellschaftsspiel auf einer
multikulturellen Geburtstagsfeier.
Genauer feiert Hassan hier mit seinen Kumpels
aus dem Viertel seinen achtzehnten Geburtstag.
Es wird gerade das beliebte Spiel
'Der Plumpssack geht um' gespielt.
Zindy gewinnt übrigens dabei (immer!).
</p>
</object>
Attribut classid, codetype, codebase und archive
[Bearbeiten]Um Anwendungen wie etwa java-applets einzubinden, stehen die Attribute classid, codetype, codebase und archive zur Verfügung.
Mittels classid wird die URI der einzubindenden Anwendung notiert.
Für flash ist leider eine Methode im Umlauf, wo in diesem Attribut
ein Pseudoprotokoll 'CLSID:' oder 'clsid:' mit einer Adresse angegeben
ist, die spezifisch für das Darstellungsprogramm Microsoft Internet-Explorer
ist. Sofern dies bei dem Darstellungsprogramm aktiviert ist (was
Sicherheitsprobleme mit sich bringen kann), wird dann mittels ActiveX
die flash-Anwendung eingebunden. Ist ActiveX nicht aktiviert oder
handelt es sich um ein anderes Darstellungsprogramm, ist diese
Methode jedoch irrelevant.
Von daher ist zu empfehlen, keine vom Betriebssystem abhängigen
Notationen zu verwenden oder solche, die nur in einem speziellen
Darstellungsprogramm umgesetzt werden können, denn der Autor kann ja nicht
wissen, mit welchem Programm und welchen Voreinstellungen das Dokument
dargestellt werden soll.
Sollte die spezifische Methode wirklich für das entsprechende Programm große
Vorteile bieten, wäre dann natürlich als Alternative für
beliebige Programme innerhalb des object
ein weiteres object so zu notieren, dass dies
allgemein bei beliebigen Darstellungsprogrammen und unabhängig
von Voreinstellungen bei diesen funktionieren kann.
Mittels codetype wird der Inhaltstyp der Anwendung notiert. Der Wert entspricht also dem von type.
Mit codebase wird der Basispfad zur Auflösung relativer Angaben in classid, data und archive notiert. Ist das Attribut nicht angegeben, ist die Basis-URI des aktuellen Dokumentes der Basispfad.
Benötigt die Anwendung weitere Archive, so kann mit dem Attribut archive eine mit Kommata separierte Liste von benötigten Archiven notiert werden. Das Darstellungsprogramm kann diese dann gleich herunterladen, was meist eine zügigere Ausführung der Anwendung nach sich zieht, als wenn diese alle Archive selbst laden muß. Die Archive beziehen sich auf Anwendungen oder Objekte, die mit classid oder data referenziert werden.
Beispiel java-applet einbinden, einfach:
<object classid="java:Warp9.class"
codetype="application/x-java-applet"
width="360" height="480">
Kein Java aktiviert? Macht auch nichts...<br />
Es wäre zu sehen gewesen, wie eine von innen weiß beleuchtete Kaffeekanne
mit verschiedenen Geschwindigkeiten bis knapp zur
Lichtgeschwindigkeit an einem Beobachter vorbeifliegt.
</object>
Beispiel java-applet einbinden, mit Archiven und relativen Angaben:
<object classid="java:Warp9.class"
codetype="application/x-java-applet"
codebase="http://example.org/SpeedOfLight/"
archive="Speed0.1.tgz, Speed0.5,tgz, Speed0.9.tgz, Speed0.9999.tgz"
width="360" height="480">
Kein Java aktiviert? Macht auch nichts...<br />
Es wäre zu sehen gewesen, wie eine von innen weiß beleuchtete Kaffeekanne
mit verschiedenen Geschwindigkeiten bis knapp zur
Lichtgeschwindigkeit an einem Beobachter vorbeifliegt.
</object>
Attribut tabindex
[Bearbeiten]Das Element object ist auch fokussierbar. Die Verwendung des Attributes tabindex ist die gleiche wie für das Element a:
Der Leser kann in einem Dokument auch zu fokussierbaren Elementen mit dem Tabulator (oder einer äquivalenten Funktionalität des Darstellungsprogrammes) springen. Der normale, sogenannte Navigationsring folgt dabei der Reihenfolge, wie diese Elemente im Quelltext stehen und fährt am Ende mit dem Anfang fort.
Bei einem gut strukturierten Dokument wird dies oft bereits eine sinnvolle und hilfreiche Reihenfolge sein. Trotzdem kann es passieren, dass eine modifizierte Reihenfolge die Nutzbarkeit und Bedienbarkeit der Seite verbessern kann. Mit dem Attribut tabindex kann daher der Autor die Reihenfolge modifizieren.
Der Wert muss eine Zahl zwischen 0 und 32767 sein, im Bedarfsfalle auch mit führenden Nullen.
Das Element mit dem niedrigsten Wert für tabindex größer als 0 wird dann zuerst fokussiert, dann jenes mit dem nächsthöheren Wert und so weiter. Danach kommen erst die anderen fokussierbaren Elemente in der Reihenfolge dran, in welcher sie im Quelltext stehen. Zum Schluß kommen jene Elemente, für welche tabindex auf 0 gesetzt ist. Haben mehrere Elemente den gleichen tabindex, so erfolgt für eine solche Untergruppe die Fokussierung wiederum in der Reihenfolge, in der die Elemente im Quelltext stehen. Sind alle Element durchlaufen, so springt der Fokus im nächsten Schritt wieder auf das erste fokussierbare Element.
Ein Darstellungsprogramm hat meist auch eine Funktionalität, mit welcher die Elemente des Navigationsrings rückwärts durchlaufen werden können, ausgehend vom aktuellen Element.
Attribut name
[Bearbeiten]Wird object innerhalb eines Formulars verwendet, um Daten auszuwählen und zu übertragen, ist das Attribut name zu notieren, dies ist dann ein Steuerelementname, wie im Kapitel über Formulare genauer erläutert und auch nur in diesem Zusammenhang relevant.
Element param
[Bearbeiten]Mit dem innerhalb von object optional verwendbaren Element param können Parameter angegeben werden, welche dem von object referenzierten Dokument zur Darstellung übergeben werden.
Welche Parameter dies sind und welche Werte die haben, ist vom Format des referenzierten Dokumentes festzulegen. XHTML selbst definiert keine Parameter, die für XHTML-Dokument zutreffen würden. SVG bis einschließlich Version tiny 1.2 definiert auch keine solchen Parameter, für Version 2 ist allerdings ein Modul vorgeschlagen, welches Parameter definieren soll. Andere Inhaltstypen wie java-applets oder flash-Dateien können einen allgemeinen Mechanismus definiert haben, mit denen alle übermittelten Parameter im Bedarfsfalle verarbeitet werden können.
param ist inhaltsleer und hat die Attribute id, name, type, value, valuetype. Das Attribut name muß angegeben werden, die anderen sind optional.
id ist der allgemein verwendbare Fragmentidentifizierer.
Attribute name und value
[Bearbeiten]Mit dem Attribut name wird dem zu übergebenden Parameter ein Namen gegeben. Der Wert ist einfacher Text. Was ein sinnvoller Name ist, hängt natürlich von der Anwendung ab, der der Parameter übergeben wird.
Mittels value wird der Wert des Parameters übergeben. Der Wert ist einfacher Text. Was ein sinnvoller Wert ist, hängt natürlich von der Anwendung ab, der der Parameter übergeben wird.
Beispiel - einem java-applet, welches Bilder verzerrt, ist eine Pfadangabe zu einem Bild zu übergeben. Das Programm analysiert die Pfadangabe selbst, um das Bild zu finden:
<object classid="java:Verzerrer.class"
codetype="application/java"
width="300" height="400">
<param name="image" value="bilder/olaf2011.jpg" />
Kein Java aktiviert? Macht auch nichts...<br />
Zwar kann das Bild dann nicht manipuliert werden, <br />
aber immer noch angesehen:<br />
<img src="bilder/olaf2011.jpg" alt="Olaf im Jahre 2011" />
</object>
Attribute type und valuetype
[Bearbeiten]Mit dem Attribut valuetype kann angegeben werden, um welchen Typ von Parameter es sich handelt.
Der Wert von type ist der Inhaltstyp. wie bereits für object beschrieben. Dieser ist nur relevant, wenn valuetype den Wert 'ref' hat und gibt dann den Inhaltstyp für die referenzierte Datei an.
Mögliche Werte sind:
- data
- Der Wert von value wird als Zeichenkette angesehen und so dem Programm übergeben.
- ref
- Der Wert von value ist eine URI, die wie angegeben weitergereicht wird, also bei relativen Angaben nicht aufgelöst wird.
- object
- Der Wert von value ist ein # gefolgt von einem Fragmentidentifizierer eines anderen Elementes object.
Vorheriges Beispiel mit Angabe einer URI:
<object classid="java:Verzerrer.class"
codetype="application/java"
width="300" height="400">
<param name="image"
valuetype="ref"
type="image/jpeg"
value="http://example.org/bilder/olaf2011.jpg" />
Kein Java aktiviert? Macht auch nichts...<br />
Zwar kann das Bild dann nicht manipuliert werden, <br />
aber immer noch angesehen:<br />
<img src="bilder/olaf2011.jpg" alt="Olaf im Jahre 2011" />
</object>
Beispiel für eine Anwendung, die Gedichte vorträgt, frei nach einem Beispiel der HTML-Empfehlung:
<p>
<object declare="declare"
id="Kurt"
type="application/x-voice"
data="kurt.voice">
</object>
<object classid="http://example.org/ProseAndPoetry/poem_reader/"
data="Schwitters-AnnaBlume.xml">
<param name="voice" valuetype="object" value="#Kurt" />
Offenbar kann das Gedicht nicht direkt vorgetragen
werden. Sofern ein Programm zur Wiedergabe von OGG-Audio verfügbar ist,
kann folgender Verweis verwendet werden:<br />
<a href="Schwitters-AnnaBlume.oga">Anna Blume von Kurt Schwitters</a>.<br />
Ansonsten kann auch die mit CSS dekorierte XML-Datei direkt angesehen werden:<br />
<a href="Schwitters-AnnaBlume.xml">Anna Blume von Kurt Schwitters</a>.
</object>
</p>