Originalversion: http://www.w3.org/Style/styling-XML
Translatør: Samuli Mia
Bemærk, dette er en oversættelse af et W3C Tekst dokument. Det originale W3C tekst dokument er copyright beskyttet.

Hvordan at tilføje en stil til XML

(oversætte « Hvordan at tilføje en stil til XML»)

Style

Hvilken skal jeg bruge?

eksterne

CSS

indlejret

XSL

Anbefaling CSS2 indeholder en kort vejledning til at bruge CSS med XML (see § 2.2). På tidspunktet for stavning af CSS2 den officielle specifikation for tilknytning af stilark med dokumenter XML var ikke klar. Det er det hvad vejledning skal indeholde. Bemærk at alle eksempler bruger CSS, men i de fleste tilfælde den stil regler kan også skrives i XSL.

Ydre stilark

Råd: tjekke det i din browser.

I HTML der er et link element for tilknytning med yrde stilark, men ikke alle format baserede på XML vil have et element. Hvis det er ikke egnet element, du kan tillægge yrde stilark ved hjælp af behandlingsinstruktion for xml-stylesheet:

<?xml-stylesheet href="my-style.css" type="text/css"?>
... rest of document here...

Denne behandlingsinstruktion bør placeres før den første tagget i dokumentet. type="text/css" er ikke nødvendigvis, men det vil hjælpe browseren: hvis den understøtter CSS ikke, den vil vide at det behøves ikke at hente denne fil.

Som i tilfælde med elementer link i HTML, det kan være noget instruktioner xml-stylesheet, og de kan have attributter til at angive typen, skærmenhed og titlen.

Her er ett mere detaljeret eksempel. Antag at vi har tre stilark: ett som fastlægger de grundlæggende typer af kortlægning af hvert element (inline, block, list-item og så videre), og to andre som sæt farver og marginer. De sidste to er alternativer til hinanden og dokument læseren kan vælge nogle af dem til bruge. Bortset fra tilfælde når dokumentet er udskrevet — derefter skal vi bruge den sidste stil. Her er den grundlæggende stilark:

/* common.css */
INSTRUMENT { display: inline }
ARTICLE, HEADLINE, AUTHOR, PARA { display: block }

Her er en af de alternative stilarter, modern.css:

/* modern.css */
ARTICLE { font-family: sans-serif; background: white; color: black }
AUTHOR { margin: 1em; color: red }
HEADLINE { text-align: right; margin-bottom: 2em }
PARA { line-height: 1.5; margin-left: 15% }
INSTRUMENT { color: blue }

Og det — er andre, called classic.css:

/* classic.css */
ARTICLE { font-family: serif; background: white; color: #003 }
AUTHOR { font-size: large; margin: 1em 0 }
HEADLINE { font-size: x-large; margin-bottom: 1em }
PARA { text-indent: 1em; text-align: justify }
INSTRUMENT { font-style: italic }

Dokument XML som forbundet med de tre stilarter ligner som:

<?xml-stylesheet href="common.css" type="text/css"?>
<?xml-stylesheet href="modern.css" title="Modern" media="screen"
  type="text/css"?>
<?xml-stylesheet href="classic.css" alternate="yes"
  title="Classic" media="screen, print" type="text/css"?>
<ARTICLE>
  <HEADLINE>Fredrick the Great meets Bach</HEADLINE>
  <AUTHOR>Johann Nikolaus Forkel</AUTHOR>
  <PARA>
    One evening, just as he was getting his 
    <INSTRUMENT>flute</INSTRUMENT> ready and his
    musicians were assembled, an officer brought him a list of
    the strangers who had arrived.
  </PARA>
</ARTICLE>

For nærmere oplysninger se anbefaling W3C “Tilknytning af stilark med dokumenter XML“

Indbygget stilark

Råd: tjekke det i din browser.

I HTML det er at attribut style som tillader stilark at direkte indgå i filen uden behovet for en ekstern fil. I nogle tilfælde er det nemmere især hvis stilark er skabt specielt til dette dokument.

De fleste formater baserede på XML har ikke disse element, men lignende behandlingsinstruktion, som henvises på ydre stilarl, kan også bruges til at angive de indbyggede stilarter i selve dokumentet. På Februar 2006 det er tekniske problemer med det og det er ikke en formelle specifikation. Eksempel:

<?xml-stylesheet href="#style" type="text/css"?>
<ARTICLE>
  <EXTRAS id="style">
    INSTRUMENT { display: inline }
    ARTICLE, HEADLINE, AUTHOR, PARA { display: block }
    EXTRAS { display: none }
  </EXTRAS>
  <HEADLINE>Fredrick the Great meets Bach</HEADLINE>
  ...
</ARTICLE>

I denne tilfælde attribut type="text/css" skal være til stede, ellers browser (eller et andet program) skal gøre antagelser om sproget af stilark. Instruktion xml-stylesheet peger nu ikke på et ydre stilark men på et element af selve dokument. Element er defineret på attribut id, som overbragt som et der henvises mål. (Afhængigt af specifik formatet XML, attribut id kan kaldes noget andet; i noget formater det kan være ingen relevant attribut.)

Åbne problemer

Anbefaling W3C “Tilknytning af stilark med dokumenter XML“ afgør ikke tilfælde af indbygget stilark, selv om den beslutning af delvis URL begyndende med # synes en acceptabel generalisering. På dette tidspunkt, på begyndelse af 2006 år, det kan være uløste problemer og det er ingen udgivet specifikation:

  1. Da den indbyggede stilark er ikke hentet adskilt fra serveren, kan serveren ikke angive browseren dets format. Derfor i denne tilfælde attribut type er nødvendigt. Det er ikke angivet om hvad der sker hvis et attribut er mistede: skal det stilark ignoreres? Skal det være CSS? Er der et algoritme til bestemmelse af sproget?
  2. I de fleste XML-formater delvis id’et er givet på hele elementet og ikke på indhold af et element. Men stilark som begynder med <ARTICLE> er ikke en korrekt kode CSS, derfor det behøves en særlig regel ifølge af som et delvis id i ett stil instruktion indikerer på indholdet af element og ikke på det hele element.
  3. På samme måde, det er ikke angivet om hvad der sker hvis målet element har underordnet websted. Skal stilark bestå fra hele indholdet af alle tilknyttede elementer? … indholdet af kun det første element? …eller det er et fejl og hele elementet skal ignoreres?
  4. I eksempel ovenfor URL indikerer på selve dokumentet. Antag at URL indikerer på et fragment af ydre document. At kunne hente stilark med success skal browseren først hente og behandle ydre dokument og derefter udvinde og behandle stilark. Men attribut type indikerer på kun en af to type derfor browser kan ikke vide om den kan bruge stilarket. Det er ikke endda angivet om attributter type indikerer på type af ydre dokument eller af stilark som er indlejret i det.
  5. Behandlingsinstruktion for stilark er mere hensigtsmæssigt med generelle XML (Generic XML), det vil sige, med opdelingen af ukendte format for browser. Tak til stilark der er muligvis mindst at vise noget. Kendte formater såsom SVG, SMIL eller XHTML har dens regler for behandlingen som går ud over hvad der kan definere stilarter. Men det er andre tingene som browser kender ikke hvis dokumentet er behandlet som generelle XML: navnlig, det kender ikke hvilke attributter er id'er. Det er en anbefaling W3C for attributter navnet xml:id og hvis dokument indeholder attributter med dette navn derefter sandsynligt delvis URL indikerer på en af dem. Men hvis det er ikke sådan attributter, browser skal forsøge fastlægge hvilke attributter er id’er ved hjælp af andre midler. Hvis dokument har DOCTYPE på begyndelse og browser kan få DTD, som det indikerer på, dette DTD vil indikere en attribut. Men browsere kan være ikke i stand til læse DTD, eller kan være ikke DOCTYPE.
  6. Fragment id — er kun en vej at indikere på et element af dokumentet. En anden anbefaling W3C foreslår at bruge XPointers. Men forståelse af denne teknologi er ikke påkrævet fra browsere som bruger behandlingsinstruktion for stilark, så det er ikke klart om browsere kan forstå eller de kan eller skal ignorere det.

Indlejret stilarter

HTML også giver mulighed for at anvende stilarter direkt til særskilt elementer ved hjælp af en style attribute. De fleste XML-formater har ikke denne attribut, men nogle kan give mulighed for at bruge muligheder af HTML (modules) i et dokument.

Attributer af klasser

Råd: tjekee det i din browser.

class attribute som giver mulighed for at skabe underklasser af elementer i HTML er også ikke tilgængelig i de vigtigste formater baserede på XML. Naturligvis CSS giver mulighed for at vælge elementer på grundlag af nogen attribut, ikke kun på class, men syntaks er mindre bekvem.

Her er et eksempel. Hvis det er attributen class, og format af dokument fastlægger at det arbejder som i HTML, det kan bruge ett notation med ett prik. (Denne eksempel arbejder ikke fordi <doc> — er ikke den format som browser kommer til at tage for noget som fastholder class)

<?xml-stylesheet href="#s1" type="text/css"?>
<doc>
  <s id="s1">
    s { display: none }
    p { display: block }
    p.note { color: red }
  </s>
  <p>Some text... </p>
  <p class="note">A note... </p>
</doc>

Hvis dokument angiver ikke at class skaber en underklass du skal bruge længere selektorer med "[ ]":

<?xml-stylesheet href="#s1" type="text/css"?>
<doc>
  <s id="s1">
    s { display: none }
    p { display: block }
    p[class~=note] { color: red }
  </s>
  <p>Some text... </p>
  <p class="note">A note... </p>
</doc>

Hvis der er ingen attribut class, men det er noget som kan bruges, selektorer af attributter "[ ]" er også gældende:

Råd: tjekke det i din browser.

<?xml-stylesheet href="#s1" type="text/css"?>
<doc>
  <s id="s1">
    s { display: none }
    p { display: block }
    p[warning="yes"] { color: red }
  </s>
  <p>Some text... </p>
  <p warning="yes">A note... </p>
</doc>

Hvis dokumentet formatet specificerer ikke, at klassen skaber en underklasse, så du bliver nødt til at bruge længere selektorer med "[ ]"

<?xml-stylesheet href="#s1" type="text/css"?>
<doc>
  <s id="s1">
    s { display: none }
    p { display: block }
    p[class~=note] { color: red }
  </s>
  <p>Some text... </p>
  <p class="note">A note... </p>
</doc>

Hvis der ikke er klasse attribut, men der er noget andet, vi kan bruge, attributten selektorer "[ ]" stadig gælder:

prøv det i din browser

<?xml-stylesheet href="#s1" type="text/css"?>
<doc>
  <s id="s1">
    s { display: none }
    p { display: block }
    p[warning="yes"] { color: red }
  </s>
  <p>Some text... </p>
  <p warning="yes">A note... </p>
</doc>
Bert Bos
Oprettet 29. februar 2000 (sidste opdatering: $Date: 2010/07/16 12:44:31 $)