XSL Transformations (XSLT)

XSL Transformations (XSLT)XSL Transformations (XSLT)
versie 1.0

Deze specificatie definieert de syntax en semantiek van XSLT, een taal voor het transformeren van XML-documenten in andere XML-documenten.

XSLT is ontworpen voor gebruik als onderdeel van XSL, een stylesheet taal XML. In aanvulling op XSLT, XSL bevat een XML-vocabulaire voor het opgeven van de opmaak. XSL specificeert de styling van een XML-document met behulp van XSLT om te beschrijven hoe het document wordt omgezet in een andere XML-document dat de opmaak vocabulaire gebruikt.

XSLT is ook ontworpen om onafhankelijk van XSL worden gebruikt. Echter XSLT niet bedoeld als een volledig algemene doeleinden XML transformatietaal. Veeleer is hoofdzakelijk voor de soorten veranderingen die nodig zijn wanneer XSLT wordt gebruikt als onderdeel van XSL.

Dit document is beoordeeld door W3C-leden en andere geïnteresseerden en is bekrachtigd door de Directeur als een W3C Aanbeveling. Het is een stabiel document en kan worden gebruikt als referentiemateriaal of geciteerd als een normatieve referentie uit andere documenten. De rol van W3C in het maken van de Aanbeveling is de aandacht vestigen op de specificatie en de verspreiding ervan te bevorderen. Dit verbetert de functionaliteit en interoperabiliteit van het Web.

De lijst met bekende fouten in deze specificatie is beschikbaar op http://www.w3.org/1999/11/REC-xslt-19991116-errata.

Reacties op deze specificatie kunnen aan xsl-editors@w3.org worden gezonden; archieven van de opmerkingen zijn beschikbaar. Publieke discussie over XSL, waaronder XSL Transformations, vindt plaats op de XSL-List mailinglijst.

De Engels versie van deze specificatie is de enige normatieve versie. Echter, voor de vertaling van dit document, zie http://www.w3.org/Style/XSL/translations.html.

Een lijst van de huidige W3C Aanbevelingen en andere technische documenten kan gevonden worden op http://www.w3.org/TR.

Deze specificatie is geproduceerd als onderdeel van de W3C Style activiteit.

bijlagen

1. Inleiding

Deze specificatie definieert de syntaxis en semantiek van de XSLT taal. Een transformatie in de XSLT taal wordt uitgedrukt als een well-formed XML-document [XML] voldoen aan de Namespaces in XML Aanbeveling [XML Names]. eventueel beide elementen die zijn gedefinieerd door XSLT en elementen die niet zijn gedefinieerd door XSLT omvatten. -XSLT gedefinieerde elementen onderscheiden zich door die behoren tot een bepaalde XML namespace (zie [2.1 XSLT Namespace ]), Die in deze specificatie als het wordt aangeduid XSLT namespace. Dus deze specificatie is een definitie van de syntaxis en semantiek van de XSLT namespace.

Een transformatie uitgedrukt in XSLT beschrijft de regels voor het transformeren van een source tree in een resultaat boom. De transformatie wordt bereikt door het associëren patronen met sjablonen. Een patroon wordt vergeleken met elementen in de source tree. Een sjabloon wordt geïnstantieerd deel van het resultaat boom maken. Het resultaat boom los van de broncode. De structuur van het resultaat boom kan volledig verschillend van de structuur van de broncode worden. Bij het construeren van het resultaat boom, kunnen elementen uit de broncode worden gefilterd en herschikt en willekeurige structuur kan worden toegevoegd.

Een transformatie uitgedrukt in XSLT wordt een stylesheet. Dit is omdat, in het geval dat wordt XSLT transformeren in de XSL opmaak vocabulaire, de chemische omzetting als een stijlblad.

Dit document wordt niet gespecificeerd hoe een XSLT-stylesheet wordt geassocieerd met een XML-document. Het wordt aanbevolen dat XSL-processors ondersteunen het mechanisme in [XML-stylesheet] beschreven. Wanneer dit of een ander mechanisme een opeenvolging van meerdere XSLT stylesheet geeft tegelijkertijd een XML-document worden toegepast, dan is de werking dezelfde als de toepassing een stijlblad elk lid invoert van de sequentie in orde (zie [2.6.2-stylesheet importeren ]).

Een stylesheet bevat een reeks sjabloon regels. Een template regel bestaat uit twee delen: een patroon dat overeenkomt met knooppunten in de broncode en een sjabloon dat kan worden geconcretiseerd om een ​​deel van het resultaat boom vormen. Hierdoor kan een stylesheet om toepassing op een breed klasse van documenten die vergelijkbaar source tree structuren te hebben.

Een sjabloon wordt geïnstantieerd voor een bepaalde bron element een deel van het resultaat boom maken. Een sjabloon kan elementen die letterlijke resultaat element structuur te geven bevatten. Een sjabloon kan ook elementen uit de XSLT namespace die instructies voor het maken resultaat boom fragmenten bevatten. Wanneer een sjabloon wordt geïnstantieerd, wordt elke instructie uitgevoerd en vervangen door het resultaat boom fragment dat creëert. Instructies kunt selecteren en verwerken afstammeling bron elementen. Het verwerken van een afstammeling element zorgt voor een resultaat boom fragment door het vinden van de van toepassing zijnde template regel en instantiëren de template. Merk op dat elementen alleen verwerkt nadat zij zijn geselecteerd door het uitvoeren van een instructie. Het resultaat boom wordt geconstrueerd door het vinden van de template regel voor de root-knooppunt en instantiëren de template.

In het proces van het vinden van de toepasselijke template is het mogelijk meer dan één sjabloon regel een patroon dat overeenkomt met een bepaald element hebben. Toch zal slechts één template regel toegepast. De methode om te bepalen welke sjabloon regel van toepassing is, wordt beschreven in [5.5 Conflict Resolution voor Template Rules ].

Een enkele sjabloon zelf heeft aanzienlijke macht: het kan structuren van willekeurige complexiteit te creëren; het kan tekenreekswaarden trekken uit willekeurige locaties in de source tree; kan structuren die worden herhaald volgens het voorkomen van elementen in de broncode genereren. Voor eenvoudige transformaties waarbij de structuur van de boom resultaat onafhankelijk is van de structuur van de broncode kan een stijlblad vaak bestaan ​​uit slechts één matrijs, die functioneert als een matrijs voor de volledige uitslag boom. Transformaties op XML-documenten die vertegenwoordigen gegevens vaak van dit soort (zie [D.2 gegevens Voorbeeld ]). XSLT kan een vereenvoudigde syntaxis voor dergelijke stylesheets (zie [2.3 Letterlijke Resultaat Element als stylesheet ]).

Wanneer een sjabloon wordt geïnstantieerd, wordt altijd geïnstantieerd opzichte van een huidige knooppunt en huidige knooppunt lijst. De huidige knooppunt is altijd een lid van het huidige knooppunt lijst. Zeer actief in XSLT zijn ten opzichte van het huidige knooppunt. Slechts een paar instructies te wijzigen de huidige node lijst of het huidige knooppunt (zie [5 Template Rules ] En [8 Herhaling ]); tijdens het starten van een van deze instructies, het huidige knooppunt lijst verandert in een nieuwe lijst van knooppunten en elk lid van deze nieuwe lijst wordt het huidige knooppunt op zijn beurt; na het starten van de opdracht is voltooid, wordt het huidige knooppunt en het huidige knooppunt lijst terug te keren naar wat ze waren voordat de opdracht werd geconcretiseerd.

XSLT gebruikt de taaluiting gedefinieerd door [XPath] voor het selecteren van elementen voor verwerking voorwaardelijke verwerking en voor het genereren van tekst.

XSLT biedt twee "haken" voor de uitbreiding van de taal, een haak voor de uitbreiding van de set van instructie elementen gebruikt in templates en een haak voor de uitbreiding van de set van functies die gebruikt worden in XPath expressies. Deze haken zijn beide gebaseerd op XML namespaces. Deze versie van XSLT niet definiëren van een mechanisme voor de uitvoering van de haken. Zie [14 Extensions ].

NOTITIE: De XSL WG van plan om een ​​dergelijk mechanisme in een toekomstige versie van deze specificatie of in een afzonderlijke specificatie te definiëren.

Het element samenvatting notatietatie gebruikt om de syntaxis van XSLT gedefinieerde elementen te beschrijven is beschreven in [18 Notation ].

De MIME mediatypen text / xml en application / xml [RFC2376] moet worden gebruikt voor XSLT-stylesheets. Het is mogelijk dat een mediatype specifiek zal worden geregistreerd voor XSLT stylesheets; indien en wanneer het kan dat type media worden gebruikt.

2-stylesheet Structuur

2.1 XSLT Namespace

De XSLT namespace heeft de URI http://www.w3.org/1999/XSL/Transform.

NOTITIE: De 1999 in de URI geeft het jaar waarin de URI door de W3C werd toegewezen. Het is niet de versie van XSLT wordt gebruikt, die wordt bepaald door kenmerken te geven (zie [2.2 stylesheet Element ] En [2.3 Letterlijke Resultaat Element als stylesheet ]).

XSLT processors moet de XML namespaces mechanisme [XML Names] gebruiken om elementen te herkennen en attributen uit deze namespace. Elementen uit de XSLT namespace enkel opgenomen in de stylesheet niet in het brondocument. De volledige lijst van XSLT-gedefinieerde elementen is opgegeven in [B Element Syntax Samenvatting ]. Vendors moet de XSLT namespace niet uit te breiden met extra elementen of attributen. In plaats daarvan moet uitbreiding in een aparte naamruimte. Elke naamruimte die wordt gebruikt voor extra instructies elementen worden geïdentificeerd door middel van het verlengingselement mechanisme bedoeld in [14.1 Uitbreiding Elements ].

Deze specificatie maakt gebruik van een prefix van xsl: voor het verwijzen naar elementen in de XSLT namespace. Echter, XSLT stylesheets zijn vrij om een ​​prefix te gebruiken, op voorwaarde dat er een namespace verklaring dat het voorvoegsel om de URI van de XSLT namespace bindt.

Een element van het XSLT namespace kan enige attribuut niet uit de XSLT namespace, op voorwaarde dat de uitgebreide-naam van het attribuut heeft een niet-null namespace URI. De aanwezigheid van dergelijke kenmerken moeten het gedrag van XSLT elementen en functies die in dit document niet veranderen. Zo, een XSLT-processor is altijd vrij om dergelijke attributen te negeren, en moeten deze attributen negeren zonder een fout als zij niet de namespace URI niet erkent. Dergelijke attributen kan bieden, bijvoorbeeld, unieke identifiers, hints optimalisatie, of documentatie.

Het is een fout van een element uit de XSLT namespace attributen met uitgebreide-namen die null namespace URI’s (dat wil zeggen attributen met unprefixed namen) anders dan attributen gedefinieerd voor het element in dit document te hebben.

NOTITIE: De voor de namen van XSLT elementen verdragen kenmerken en functies die namen alle kleine letters, streepjes gebruiken om woorden te scheiden en gebruiken afkortingen indien deze reeds in de syntax van een verwante taal, zoals XML of HTML.

2.2 stylesheet Element

lt; xsl: stylesheet
id = id
extensie-element-voorvoegsels = tokens
exclusief-resultaat-voorvoegsels = tokens
versie = aantal gt;
! Lt; – Inhoud: (xsl: import *, top-level-elementen) –gt;
lt; / xsl: stylesheetgt;

lt; xsl: transformeren
id = id
extensie-element-voorvoegsels = tokens
exclusief-resultaat-voorvoegsels = tokens
versie = aantal gt;
! Lt; – Inhoud: (xsl: import *, top-level-elementen) –gt;
lt; / xsl: transformgt;

Een stylesheet wordt vertegenwoordigd door een xsl: stylesheet element in een XML-document. xsl: transformatie is toegestaan ​​als een synoniem voor xsl: stylesheet.

Een xsl: stylesheet element moet een versie attribuut, met vermelding van de versie van XSLT dat de stylesheet vereist. Voor deze versie van XSLT, moet de waarde 1,0. Wanneer de waarde niet gelijk aan 1,0. voorwaarts-compatibele processing mode is ingeschakeld (zie [2.5 Vooruit-compatibele Processing ]).

De xsl: stylesheet element kan de volgende typen elementen bevatten:

Een patroon wordt gedefinieerd als een knooppunt passen als en slechts als er mogelijke context zodanig dat wanneer de patroon wordt beoordeeld als een uitdrukking die context, het knooppunt deel uitmaakt van de resulterende knooppunt-set. Wanneer een knooppunt wordt aangepast, de mogelijke contexten hebben een context knooppunt dat het knooppunt wordt geëvenaard of een voorouder van dat knooppunt, en een context knooppunt lijst met alleen de context node.

Bijvoorbeeld p p komt overeen met elk element, want voor elke p als de expressie p wordt geëvalueerd met de ouder van het p element context de resulterende knooppunt-set die p element als een van de leden bevatten.

NOTITIE: Dit komt overeen met zelfs een p element dat het document element, omdat het document root is de moedermaatschappij van het document element.

Hoewel de semantiek van patronen indirect worden gespecificeerd in termen van uitdrukkingsevaluatie, is het gemakkelijk om de betekenis van een patroon te begrijpen zonder direct denken in uitdrukkingsevaluatie. In een patroon, | geeft alternatieven; een patroon met één of meer | gescheiden alternatieven wedstrijden indien een van de alternatieve wedstrijden. Een patroon dat bestaat uit een opeenvolging van StepPattern s gescheiden door / of // overeenkomt van rechts naar links. Het patroon alleen wedstrijden als de meest rechtse StepPattern wedstrijden en een geschikt element overeenkomt met de rest van het patroon; als de separator / dan alleen de ouder is een geschikt element; indien de afscheider //. dan is elke voorouder is een geschikte element. Een StepPattern dat het kind as gebruikt Controleert of de NodeTest geldt voor het knooppunt en het knooppunt geen kenmerk knooppunt. Een StepPattern dat het kenmerk as gebruikt Controleert of de NodeTest geldt voor het knooppunt en het knooppunt is een attribuut knooppunt. Wanneer [] aanwezig is, dan is de eerste PredicateExpr in een StepPattern wordt geëvalueerd met de knoop wordt aangepast als de context geleding en broers van de context geleding die overeenkomen met de NodeTest de context knooppunt lijst, tenzij het knooppunt waarvan matching een attribuut knooppunt , waarbij de context knooppuntlijst is al de kenmerken die hetzelfde bovenliggende als het attribuut wordt aangepast en die overeenkomen met de NameTest hebben.

overeenkomt met een knoop als en slechts als alle onderstaande voorwaarden is voldaan:

NodeTest het punt waar het knooppunt en het knooppunt geen kenmerk; dat wil zeggen de node een itemelement

evaluatie van de positie PredicateExpr () = 1 met het knooppunt als context knooppunt en de broers en zussen van het knooppunt dat punt elementen als de context geleding lijst levert true

het knooppunt heeft een ouder die overeenkomt met bijlage // ulist; dit zal waar zijn als de ouder is een ulist element dat een appendix voorouder element.

5.3 definiëren Template Rules

! Lt; – Categorie: top-level-element –gt;
lt; xsl: template
match = patroon
name = qname
prioriteit = aantal
mode = qname gt;
! Lt; – Inhoud: (xsl: param *, sjabloon) –gt;
lt; / xsl: templategt;

Een template regel is opgegeven met de xsl: template element. De wedstrijd attribuut is een patroon dat de bron knooppunt of knooppunten waarop de regel van toepassing identificeert. De wedstrijd kenmerk is vereist, tenzij de xsl: template element heeft een naam attribuut (zie [6 Genoemd Templates ]). Er treedt een fout de waarde van de wedstrijd attribuut een VariableReference bevatten. De inhoud van de xsl: template element is de sjabloon die wordt geïnstantieerd wanneer de matrijs wordt toegepast.

Zo kan een XML-document bevat:

De volgende template regel overeenkomt emph elementen en produceert een fo: inline-sequence formatteren object met een font-weight eigenschap van vet.

NOTITIE: Voorbeelden in dit document gebruik maken van de fo: voorvoegsel voor de naamruimte http://www.w3.org/1999/XSL/Format. die de naamruimte van de in [XSL] opmaak objecten.

Zoals hieronder beschreven, de xsl: toepassing-templates element verwerkt recursief de kinderen van de bron element.

5.4 Het toepassen van Template Rules

lt; – Categorie: instructie –gt;
lt; xsl: toepassing-templates
select =-node set-expressie
mode = qname gt;
! Lt; – Inhoud: (xsl: sort | xsl: with-param) * –gt;
lt; / xsl: toepassing-templatesgt;

Dit voorbeeld maakt een blok voor een hoofdstuk element en vervolgens verwerkt zijn directe kinderen.

Bij het ontbreken van een select attribuut, de xsl: toepassing-templates instructieprocessen alle kinderen van het huidige knooppunt, inclusief tekst knooppunten. Echter tekstknooppunten die zijn ontdaan zoals gespecificeerd in [3.4 Whitespace Strippen ] Worden niet verwerkt. Als strippen van spaties knooppunten niet is ingeschakeld voor een element, worden alle spaties in de inhoud van het element worden verwerkt zoals tekst, en dus spaties tussen onderliggende elementen telt het bepalen van de positie van een onderliggend element zoals geretourneerd door de positie functie.

Een select eigenschap kan worden gebruikt om knopen geselecteerd door een uitdrukking in plaats van de verwerking van alle kinderen verwerken. De waarde van de select-attribuut is een uitdrukking. De uitdrukking moet evalueren naar een knooppunt-set. De geselecteerde set van knooppunten wordt verwerkt in document orde, tenzij een specificatie voor sorteren aanwezig is (zie [10 sorteren ]). Het volgende voorbeeld verwerkt alle van de auteur kinderen van de auteur-groep:

Het volgende voorbeeld verwerkt alle van de gegeven-naam s van de auteur s die zijn kinderen van auteur-group:

Dit voorbeeld verwerkt alle van de rubriek afstammende elementen van het boek element.

Het is ook mogelijk om elementen die geen afstammelingen van het huidige knooppunt zijn verwerkt. In dit voorbeeld wordt ervan uitgegaan dat een afdeling element groep kinderen en werknemer nakomelingen. Het vindt de afdeling van de medewerker en vervolgens verwerkt de groep kinderen van de afdeling.

Meerdere xsl: toepassing-templates elementen kunnen binnen één sjabloon worden gebruikt om eenvoudige herordening doen. Het volgende voorbeeld worden twee HTML-tabellen. De eerste tabel is gevuld met binnenlandse verkopen, terwijl de tweede tabel is gevuld met buitenlandse verkoop.

NOTITIE: Het is mogelijk dat er twee overeenkomende nakomelingen waarbij men een afstammeling van de andere. Deze zaak is niet speciaal behandeld: beiden afstammelingen zullen worden verwerkt zoals gebruikelijk. Bijvoorbeeld, gegeven een brondocument de regel zowel de buitenste en binnenste div div elementen te verwerken. NOTITIE: Typisch, xsl: is van toepassing-templates gebruikt om alleen knooppunten die zijn afstammelingen van het huidige knooppunt verwerken. Een dergelijk gebruik van xsl: toepassing-templates kan niet leiden tot niet-terminating verwerking loops. Echter, wanneer xsl: toepassing-templates wordt gebruikt voor elementen die geen afstammelingen van het huidige knooppunt zijn te verwerken, ontstaat de mogelijkheid van niet-beëindiging van loops. Bijvoorbeeld kan implementaties kunnen deze lussen in sommige gevallen detecteren, maar de mogelijkheid bestaat dat een stylesheet een niet-afsluitende lus kunnen komen dat een implementatie niet kan detecteren. Dit kan een denial of service veiligheidsrisico presenteren.

5.5 Conflict Resolution voor Template Rules

Het is mogelijk dat een bronknooppunt aan verschillende template regel te voldoen. De template regel worden als volgt bepaald:

Ten eerste, alle overeenkomende template regels die lagere import prioriteit dan de matching template regel of regels met de hoogste invoer voorrang worden geëlimineerd buiten beschouwing.

Vervolgens alle overeenkomende template regels die lagere prioriteit dan de matching template regel of regels met de hoogste prioriteit moeten worden geëlimineerd uit overweging. De prioriteit van een sjabloon regel gespecificeerd door de prioriteit attribuut op de sjabloon regel. De waarde van deze moet een reëel getal (positief of negatief) zijn, die overeenkomen met de productie nummer met een optionele toonaangevende minteken (-). De default prioriteit wordt als volgt berekend:

Als het patroon bevat meerdere alternatieven, gescheiden door |. dan is equivalent behandeld om een ​​aantal regels template, een voor elk alternatief.

Als het patroon de vorm van een QName voorafgegaan door een ChildOrAttributeAxisSpecifier of heeft de vorm verwerkingsinstructie (letterlijke) voorafgegaan door een ChildOrAttributeAxisSpecifier. dan is de prioriteit is 0.

Als het patroon de vorm NCName: * voorafgegaan door een ChildOrAttributeAxisSpecifier. dan is de prioriteit is -0,25.

Anders, als het patroon bestaat uit slechts een NodeTest voorafgegaan door een ChildOrAttributeAxisSpecifier. dan is de prioriteit is -0,5.

Anders is de prioriteit 0.5.

Zo is de meest voorkomende vorm van patroon (een patroon dat test op een knoop met een bepaald type en een bepaalde geëxpandeerde name) voorrang 0. Aan de minder specifieke soort patroon (een patroon dat test op een knoop met een bepaald type en een uitgebreide-naam met een bepaalde namespace URI) heeft prioriteit -0,25. Patronen minder specifiek zijn dan deze (patronen die alleen test voor knooppunten met bepaalde types) hebben voorrang -0,5. Patronen specifieker zijn dan de meest voorkomende vorm van patroon hebben voorrang 0,5.

Het is een fout als dit er meer dan één matching template regel. Een XSLT-processor kan de fout te attenderen; als het niet de fout signaal, moet het terug te krijgen door te kiezen, van onder de matching template regels die nog over zijn, degene die het laatst in de stylesheet optreedt.

5.6 Dwingende Template Rules

lt; – Categorie: instructie –gt;
lt; xsl: toepassing-invoer / gt;

Een template regel die wordt gebruikt om een ​​sjabloon regel in een geïmporteerde stylesheet negeren (zie [5.5 Conflict Resolution voor Template Rules ]) Kan de xsl gebruiken: van toepassing-invoer element toe aan de overschreven template regel te roepen.

Op elk punt in de verwerking van een stylesheet, is er een huidige sjabloon regel. Wanneer een sjabloon regel door het afstemmen van een patroon wordt gekozen, de sjabloon regel wordt de huidige sjabloon regel voor het starten van een sjabloon van de regel. Wanneer een xsl: for-each element is geïnstantieerd, de huidige sjabloon regel wordt null voor het starten van de inhoud van de xsl: for-each element.

xsl:-invoer toe te passen verwerkt de huidige knooppunt met behulp van slechts een sjabloon regels die in de stylesheet element met de huidige sjabloon regel werd ingevoerd; het knooppunt wordt verwerkt in de stand van de huidige sjabloon regel’s. Het is een fout wanneer xsl: toepassing-invoer wordt geconcretiseerd wanneer de huidige template regel is null.

Stel bijvoorbeeld dat de stylesheet doc.xsl bevat een template regel voor bijvoorbeeld elementen:

Een ander stylesheet kon doc.xsl importeren en wijzigen van de behandeling van bijvoorbeeld elementen als volgt:

Het gecombineerde effect is om een ​​voorbeeld te vormen tot een element van de vorm:

5.7 Modes

Modes waardoor een element meerdere keren worden verwerkt, telkens een ander resultaat produceren.

Beide xsl: template en xsl: toepassing-templates hebben een optionele modus attribuut. De waarde van de mode-attribuut is een QName. die is geëxpandeerd zoals beschreven in [2.4 Gekwalificeerde Namen ]. Als xsl: template een match kenmerk niet heeft, moet het niet een modus attribuut. Als een xsl: toepassing-templates element heeft een mode-attribuut, dan geldt dat alleen voor de template regels van xsl: template elementen die een modus attribuut met dezelfde waarde hebben; Als een xsl: toepassing-templates element een modus attribuut heeft, dan is het alleen van toepassing op deze template regels van xsl: template elementen die niet beschikken over een modus attribuut.

5.8 Ingebouwde Template Rules

Er is een ingebouwde template regel om recursieve verwerking in de afwezigheid van een succesvolle patroon match te blijven door een expliciete template regel in de stylesheet. Dit sjabloon regel geldt voor zowel element knooppunten en de root-node. Hieronder ziet u de equivalent van de ingebouwde template regel:

Er is ook een ingebouwde template regel per toestand, waarmee recursieve verwerking in dezelfde modus bij afwezigheid van een succesvolle match patroon verder door een expliciete template regel in de stijlblad. Dit sjabloon regel geldt voor zowel element knooppunten en de root-node. Hieronder ziet u de equivalent van de ingebouwde template regel voor mode m.

Er is ook een ingebouwde template regel voor tekst en attribuut knooppunten dat kopieën tekst door middel van:

De ingebouwde template regel voor de verwerking van instructies en commentaar is om niets te doen.

De ingebouwde template regel voor namespace nodes is ook om niets te doen. Er is geen patroon dat kan overeenkomen met een namespace knooppunt; dus, de ingebouwde template regel is de enige template regel die wordt toegepast voor namespace knooppunten.

De ingebouwde template regels worden behandeld alsof ze impliciet voor de stylesheet werden ingevoerd en hebben dus een lagere import prioriteit dan alle andere template regels. Zo kan de auteur van een ingebouwde template regel overschrijven door het opnemen van een expliciete template regel.

6 Genoemd Templates

Sjablonen kunnen worden ingeroepen door de naam. Een xsl: template element met een naam attribuut specificeert een naam template. De waarde van de naam attribuut is een QName. die is geëxpandeerd zoals beschreven in [2.4 Gekwalificeerde Namen ]. Als een xsl: template element heeft een naam attribuut, het kan, maar hoeft niet, hebben ook een wedstrijd attribuut. Een xsl: call-template element zich beroept op een sjabloon op naam; het is een gewenste naam attribuut dat de template identificeert op te roepen. In tegenstelling tot de xsl: toepassing-templates. xsl: call-template niet de huidige node of het huidige knooppunt lijst te wijzigen.

De wedstrijd. modus en prioriteit attributen op een xsl: template element hebben geen invloed op de vraag of de sjabloon wordt aangeroepen door een xsl: call-template element. Ook de naam attribuut op een xsl: heeft template element geen invloed op de vraag of de sjabloon wordt aangeroepen door een xsl:-templates toe te passen element.

Het is een fout als een stylesheet meer dan één sjabloon met dezelfde naam en hetzelfde import voorrang bevat.

7 Het creëren van de Result Tree

Dit deel beschrijft de instructies die direct knooppunten in het resultaat boom te creëren.

7.1 Het maken van elementen en attributen

7.1.1 Letterlijke Resultaat Elements

In een sjabloon, een element in de stylesheet die niet behoort tot de XSLT namespace en dat is niet een extensie-element (zie [14.1 Uitbreiding Elements ]) Wordt geïnstantieerd een element knooppunt dezelfde geëxpandeerde naam invoeren. Het gehalte van het element een sjabloon, die wordt geïnstantieerd om de inhoud van de gemaakte element knooppunt geven. De gecreëerde element knoop zal het attribuut knooppunten die aanwezig zijn op het element knooppunt in de stylesheet boom waren, met uitzondering van attributen met namen in de XSLT namespace hebben.

De gecreëerde element knoop zal ook een kopie van de namespace knooppunten die aanwezig zijn op het element knooppunt in de stylesheet boom met uitzondering van de namespace knooppunt waarvan de snaar-waarde waren wordt de XSLT namespace URI (http://www.w3.org / 1999 / XSL / Transform), een namespace URI aangegeven als een verlengstuk namespace (zie [14.1 Uitbreiding Elements ]), Of een naamruimte URI aangewezen als uitgesloten naamruimte. Een namespace URI wordt als een uitgesloten namespace aangewezen door middel van een exclusief-resultaat-voorvoegsels toe te schrijven aan een xsl: stylesheet element of een xsl: exclusief-resultaat-voorvoegsels toe te schrijven aan een letterlijke resultaat element. De waarde van deze beide eigenschappen is een door spaties gescheiden lijst van naamruimtevoorvoegsels. De naamruimte gebonden aan elk van de voorvoegsels wordt aangeduid als een uitgesloten naamruimte. Het is een fout als er geen namespace gebonden aan het prefix op het element met het uitsluiten-resultaat-voorvoegsels of xsl: uitsluiten-resultaat-voorvoegsels toe te schrijven. De standaard namespace (volgens opgave van xmlns) mag worden aangewezen als een uitgesloten naamruimte door het opnemen van #default in de lijst van naamruimtevoorvoegsels. De aanwijzing van een namespace als een uitgesloten naamruimte is effectief binnen de substructuur van de stylesheet geworteld in het element met het uitsluiten-resultaat-voorvoegsels of xsl: uitsluiten-result-prefixes attribuut; een substructuur geworteld in een xsl: stylesheet element bevat geen stylesheets door kinderen die xsl geïmporteerd of opgenomen: stylesheet element.

NOTITIE: Wanneer een stylesheet maakt gebruik van een namespace verklaring alleen in het kader van de aanpak van de source tree, met vermelding van het voorvoegsel in het uitsluiten-resultaat-voorvoegsels attribuut voorkomt overbodige naamruimtedeclaraties in het resultaat boom.

De waarde van een eigenschap van een element letterlijke resultaat wordt geïnterpreteerd als een attribuutwaarde template. het kan uitdrukkingen in accolades bevatten ( lt; gt; ).

Een namespace URI in de stylesheet boom die wordt gebruikt om een ​​namespace URI in het resultaat boom specificeert heet een letterlijke namespace URI. Dit geldt voor:

de namespace URI in de uitgebreide-naam van een letterlijke resultaat element in de stylesheet

de namespace URI in de uitgebreide-naam van een attribuut opgegeven op een letterlijke resultaat element in de stylesheet

de string-waarde van een namespace knooppunt op een letterlijke resultaat element in de stylesheet

! Lt; – Categorie: top-level-element –gt;
lt; xsl: namespace-alias
stylesheet-prefix = Prefix | "#standaard"
resultaat-prefix = Prefix | "#standaard" / Gt;

namespace-alias element te verklaren dat een namespace URI is een: A stylesheet kan de xsl gebruiken alias voor een andere namespace URI. Wanneer een letterlijke namespace URI is uitgeroepen tot een alias voor een andere namespace URI zijn, dan is de namespace URI in het resultaat boom zullen de namespace URI dat de letterlijke namespace URI is een alias voor, in plaats van de letterlijke namespace URI zelf. De xsl: namespace-alias element verklaart dat de namespace URI gebonden aan het voorvoegsel door de stylesheet-prefix attribuut is een alias voor de namespace URI gebonden aan het voorvoegsel opgegeven door het resultaat-prefix attribuut. Zo is de stylesheet-prefix attribuut geeft de namespace URI die zal verschijnen in de stylesheet, en het resultaat-prefix attribuut geeft de bijbehorende namespace URI die zal verschijnen in het resultaat boom. De standaard namespace (volgens opgave van xmlns) kan worden bepaald door gebruik te maken #default in plaats van een voorvoegsel. Als een namespace URI wordt verklaard een alias voor meerdere verschillende namespace URI’s zijn, dan is de verklaring met de hoogste prioriteit import wordt gebruikt. Het is een fout als er meer dan één zo’n verklaring. Een XSLT-processor kan de fout te attenderen; als het niet de fout signaal, moet het terug te krijgen door te kiezen, van onder de verklaringen met de hoogste invoer voorrang, degene die het laatst in de stylesheet optreedt.

Bij letterlijke resultaat elementen worden gebruikt om element, attribuut of namespace knooppunten die de XSLT namespace URI gebruik wilt maken, moet de stylesheet een alias gebruiken. Bijvoorbeeld, de stijlblad

zal een XSLT stylesheet uit een document van het formulier te genereren:

NOTITIE: Het kan ook nodig zijn om aliassen te gebruiken voor andere doeleinden dan de XSLT namespace URI namespaces. Bijvoorbeeld, zou letterlijke resultaat elementen behoren tot een namespace omgaan met digitale handtekeningen veroorzaken XSLT stylesheets te worden mishandeld door algemene doeleinden beveiligingssoftware; met behulp van een alias voor de namespace zou de mogelijkheid van dergelijke mishandeling te voorkomen.

7.1.2 Elementen creëren met xsl: element

lt; – Categorie: instructie –gt;
lt; xsl: element
naam = lt; qname gt;
namespace = lt; uri-referentie gt;
Gebruik-attribuut-sets = qnames gt;
lt; – Inhoud: sjabloon –gt;
lt; / xsl: elementgt;

De xsl: element element kan een element te worden gemaakt met een berekende naam. De uitgebreide-naam van het element te creëren wordt gespecificeerd door een vereiste attribuut en een optionele naamruimteattribuut. De inhoud van de xsl: element element is een sjabloon voor de attributen en kinderen van de gemaakte element.

De naam attribuut wordt geïnterpreteerd als een attribuut waarde-template. Het is een fout als de string die het gevolg is van het concretiseren van het attribuut waarde template is geen QName. Een XSLT-processor kan de fout te attenderen; als het niet de fout te signaleren, dan moet het terug te krijgen door het maken van de het resultaat van instantiëren de xsl: element element zijn de volgorde van de knooppunten gemaakt door het concretiseren van de inhoud van de xsl: element element, met uitzondering van elke eerste attribuut knooppunten. Als de naamruimteattribuut niet aanwezig is dan de QName is uitgegroeid tot een uitgebreide-naam met de naamruimtedeclaraties van kracht voor de xsl: element element, inclusief alle standaard naamruimtedeclaratie.

Als de naamruimteattribuut aanwezig is, dan ook opgevat als een attribuutwaarde template. De string die voortvloeit uit het instantiëren het attribuut waarde-template moet een URI referentie. Het is niet een fout als de string is niet een syntactisch juridische URI referentie. Als de string leeg is, dan is de uitgebreide-naam van het element heeft een nul namespace URI. Anders wordt de tekenreeks als de naamruimte URI van de geëxpandeerde naam van het element te creëren. Het lokale gedeelte van de QName door de attribuutnaam gebruikt als het lokale gedeelte van het geëxpandeerde naam van het element te creëren.

XSLT processors kunnen gebruik maken van het voorvoegsel van de QName opgegeven in de naam attribuut bij het selecteren van het voorvoegsel wordt gebruikt voor het uitvoeren van de gemaakte element als XML te maken; ze zijn echter niet vereist is.

7.1.3 Creëren Attributen met xsl: attribuut

De xsl: attribuutelement kan worden gebruikt om attributen toe te voegen aan elementen of gecreëerd door letterlijke resultaat elementen in de stylesheet of door instructies zoals xsl resultaat: element. De uitgebreide-naam van het attribuut worden gecreëerd wordt gespecificeerd door een vereiste attribuut en een optionele naamruimteattribuut. Instantiëren een xsl: attribuutelement voegt een attribuut knooppunt van de omvattende resultaat element node. De inhoud van de xsl: attribuutelement is een sjabloon voor de waarde van het attribuut gecreëerd.

De naam attribuut wordt geïnterpreteerd als een attribuut waarde-template. Het is een fout als de string die het gevolg is van het concretiseren van het attribuut waarde template is geen QName of is de string xmlns. Een XSLT-processor kan de fout te attenderen; als het niet de fout signaal, moet het terug te krijgen door niet het toevoegen van het attribuut om het resultaat boom. Als de naamruimteattribuut niet aanwezig is, dan is de QName is uitgegroeid tot een uitgebreide-naam met de naamruimtedeclaraties van kracht voor de xsl: attribuutelement, niet inclusief eventuele default namespace declaratie.

Als de naamruimteattribuut aanwezig is, dan ook opgevat als een attribuutwaarde template. De tekenreeks die ontstaat door het instantiëren moet een URI referentie. Het is niet een fout als de string is niet een syntactisch juridische URI referentie. Als de string leeg is, dan is de uitgebreide-naam van het attribuut heeft een nul namespace URI. Anders wordt de tekenreeks als de naamruimte URI van de geëxpandeerde naam van het attribuut te creëren. Het lokale gedeelte van de QName door de attribuutnaam gebruikt als het lokale gedeelte van het geëxpandeerde naam van het attribuut te creëren.

XSLT processors kunnen gebruik maken van het voorvoegsel van de QName opgegeven in de naam attribuut bij het selecteren van het voorvoegsel wordt gebruikt voor het uitvoeren van de gemaakte attribuut als XML te maken; ze zijn echter niet vereist is en, als het voorvoegsel is xmlns. moeten ze niet doen. Ofschoon het geen fout te doen:

zal niet tot een naamruimtedeclaratie wordt uitgevoerd.

Toevoegen van een attribuut aan een element vervangt bestaand kenmerk van dit element met dezelfde uitgebreide-naam.

De volgende zijn allemaal fouten:

een attribuut toevoegen van een element na kinderen zijn toegevoegd; implementaties kan ofwel het signaal van de fout of negeren het attribuut.

Toevoegen van een attribuut met een knooppunt dat geen element; implementaties kan ofwel het signaal van de fout of negeren het attribuut.

Het creëren van andere dan tekstnodes knooppunten tijdens het starten van de inhoud van de xsl: attribuutelement; implementaties kan ofwel het signaal van de fout of negeren de gewraakte knooppunten.

NOTITIE: Wanneer een xsl: attribuut bevat een tekst knooppunt met een nieuwe regel, dan moet de XML-uitvoer van een karakter verwijzing bevatten. Bijvoorbeeld, zal resulteren in de uitvoer (of een equivalente karakterreferentie). De XML-uitvoer kan niet worden Dit komt omdat XML 1.0 vereist nieuwe regel tekens in attribuut waarden worden genormaliseerd in ruimten, maar vereist karakter verwijzingen naar karakters niet worden genormaliseerd Newline. Het attribuut waarden in de data model vertegenwoordigen de attribuutwaarde na normalisering. Als een nieuwe regel zich in een kenmerkwaarde in de boom zijn uitgevoerd als een nieuwe regel en niet als karakterreferentie dan de kenmerkwaarde in de boom door reparsing de XML zou geen spatie een nieuwe regel, hetgeen betekent dat de boom had bevatten niet correct uitgevoerd zijn.

7.1.4 Benoemde Attribute Sets

! Lt; – Categorie: top-level-element –gt;
lt; xsl: attribuut-set
naam = qname
Gebruik-attribuut-sets = qnames gt;
! Lt; – Inhoud: xsl: attribuut * –gt;
lt; / xsl: attribuut-setgt;

De xsl: attribuut-set element definieert een benoemde set van attributen. De naam attribuut specificeert de naam van het attribuut set. De waarde van de naam attribuut is een QName. die is geëxpandeerd zoals beschreven in [2.4 Gekwalificeerde Namen ]. De inhoud van de xsl: attribuut-set element bestaat uit nul of meer xsl: attribuutelementen dat de attributen in de set opgeven.

Attribute sets worden gebruikt door het opgeven van een use-attribuut-sets attribuut op xsl: element. xsl: copy (zie [7.5 kopiëren ]) Of xsl: attribuut-set elementen. De waarde van het gebruik-attribuut-sets attribuut is een door spaties gescheiden lijst met namen van attribuut sets. Elke naam is opgegeven als een QName. die is geëxpandeerd zoals beschreven in [2.4 Gekwalificeerde Namen ]. Specificeren van een use-kenmerk-sets attribuut is gelijk aan het toevoegen xsl: attribuutelementen voor elk van de kenmerken in elk van de genoemde attribuut bepaalt aan het begin van de inhoud van het element met het gebruik attribuut-sets attributen, in dezelfde volgorde waarin de namen van het attribuut sets worden gespecificeerd in het gebruik-attribuut-sets toeschrijven. Het is een fout als het gebruik van use-attribuut-sets attributen op xsl:-attribuut elementen zorgt voor een attribuut ingesteld op zichzelf direct of indirect te gebruiken.

Attribute sets kunnen ook worden gebruikt door het opgeven van een xsl: use-attribuut-sets attribuut op een letterlijke resultaat element. De waarde van de xsl: use-attribuut-sets attribuut is een door spaties gescheiden lijst met namen van attribuut sets. Het xsl: use-attribuut-sets attribuut heeft hetzelfde effect als het gebruik-attribuut-sets attribuut op xsl: element met de extra regel dat attributen die op de letterlijke resultaat element zelf worden behandeld alsof ze werden opgegeven door xsl: attribuutelementen voordat er daadwerkelijk xsl: attribuutelementen maar na elke xsl: attribuutelementen geïmpliceerd door de xsl: use-attribuut-sets toeschrijven. Zo letterlijk resultaat element attributen van attributen sets genoemd in een XSL: gebruik attribuut-sets attributen worden eerst toegevoegd, in de in het kenmerk aangegeven volgorde; Vervolgens zal kenmerken vermeld op de letterlijke resultaat element worden toegevoegd; eindelijk, alle kenmerken die door xsl: zal attribuutelementen worden toegevoegd. Sinds het toevoegen van een attribuut aan een element vervangt bestaande attribuut van dat element met dezelfde naam, betekent dit dat de kenmerken vermeld in attribuut sets kunnen worden overschreven door attributen die op de letterlijke resultaat element zelf.

De template binnen elke xsl: attribuutelement in een xsl:-attribuut element wordt geconcretiseerd elke keer dat het attribuut set wordt gebruikt; het wordt geïnstantieerd met dezelfde huidige knooppunt en de huidige knoop lijst als wordt gebruikt voor het concretiseren van het element met het gebruik-attribuut-sets of xsl: gebruik-attribuut-sets toeschrijven. Het is echter de positie in de stylesheet van de xsl: attribuutelement plaats van het element met het gebruik-attribuut-sets of xsl: use-attribuut-sets toeschrijven die bepaalt welke variabele bindingen zichtbaar zijn (zie [11 Variabelen en Parameters ]); dus alleen variabelen en parameters door top-level xsl verklaarde: variabel en xsl: param elementen zichtbaar zijn.

Het volgende voorbeeld wordt een naam attribuut title-stijl en gebruikt het in een sjabloon regel.

Meerdere definities van een attribuut set met dezelfde uitgebreide-naam worden samengevoegd. Een kenmerk van een definitie die een hogere import voorrang heeft voorrang boven een attribuut van een definitie die lagere import voorrang heeft. Het is een fout als er twee attribuut sets die dezelfde uitgebreide-naam en gelijke import voorrang hebben en dat beide hetzelfde kenmerk bevatten, tenzij er een definitie van de set met een hogere import prioriteit die ook bevat het attribuut attribuut. Een XSLT-processor kan de fout te attenderen; als het niet de fout signaal, moet het terug te krijgen door te kiezen uit onder de definities die het attribuut dat de hoogste prioriteit import degene die in de stylesheet laatste opgegeven hebben opgeven. Wanneer de attributen in een attribuut ingesteld zijn opgegeven is alleen relevant in het samenvoegen van de attributen in de set attribuut; het maakt geen verschil als het attribuut set wordt gebruikt.

7.2 Het maken van tekst

Een sjabloon kan ook tekstnodes bevatten. Elke tekst knooppunt in een sjabloon dat overblijft na witruimte is ontdaan, zoals gespecificeerd in [3.4 Whitespace Strippen ] Zal een tekst knooppunt met dezelfde snaar-waarde in het resultaat boom te creëren. Aangrenzende tekstnodes in het resultaat boom worden automatisch samengevoegd.

Merk op dat de tekst wordt verwerkt bij de boom-niveau. Dus, opmaak van < in een template zal in de stylesheet boom worden vertegenwoordigd door een tekst knooppunt dat het karakter bevat lt ;. Dit zal een tekst knooppunt in het resultaat boom die een bevat creëren lt; karakter, dat wordt vertegenwoordigd door de markup < (Of een gelijkwaardige verwijzing teken) wanneer het resultaat boom wordt naar buiten gebracht als een XML-document (tenzij uitgang ontsnappen is uitgeschakeld, zoals beschreven in [16.4 uitschakelen Output Ontsnapping ]).

lt; – Categorie: instructie –gt;
lt; xsl: text
disable-output ontsnappen = "Ja" | "Nee"gt;
! Lt; – Inhoud: #PCDATA –gt;
lt; / xsl: textgt;

Letterlijke gegevens karakters kunnen ook worden verpakt in een xsl: text element. Deze verpakking kan veranderen wat spaties zijn ontdaan (zie [3.4 Whitespace Strippen ]), Maar heeft geen invloed op de manier waarop de personages worden behandeld door de XSLT processor daarna.

NOTITIE: Het xml: lang en xml: space attributen worden niet speciaal behandeld door XSLT. Met name,

Het is de verantwoordelijkheid van de stylesheet auteur expliciet aan een xml genereren: lang of xml: space attributen die nodig zijn in het resultaat;

het opgeven van een xml: lang of xml: space attribuut op een element in de XSLT namespace zal niet leiden tot enige xml: lang of xml: space attributen om te verschijnen in het resultaat.

7.3 Het creëren van Processing Instructions

lt; – Categorie: instructie –gt;
lt; xsl: processing-instructie
naam = lt; NCName gt; gt;
lt; – Inhoud: sjabloon –gt;
lt; / xsl: processing-instructiongt;

De xsl: processing-instructie element is geconcretiseerd tot een verwerkingsinstructie knooppunt te maken. De inhoud van de xsl: verwerkingsinstructie element een sjabloon voor de reeks-waarde van de verwerkingsinstructie knooppunt. De xsl: processing-instructie element een gewenste naam attribuut dat de naam van de verwerking instructie knooppunt aangeeft. De waarde van de attribuutnaam geïnterpreteerd als een attribuutwaarde template.

Bijvoorbeeld, deze

zou de verwerking instructie creëren

Het is een fout als de string die het gevolg is van het concretiseren van de naam attribuut is niet zowel een NCName en een PITarget. Een XSLT-processor kan de fout te attenderen; als het niet de fout signaal, moet het terug te krijgen door niet toe te voegen aan de verwerking instructie om het resultaat boom.

NOTITIE: Dit betekent dat xsl: verwerkingsinstructie kan niet worden gebruikt om de productie van een XML declaratie. De xsl: uitgang element moet in plaats daarvan worden gebruikt (zie [16 Output ]).

Het is een fout als het instantiëren de inhoud van xsl: processing-instructie creëert dan tekstnodes knooppunten. Een XSLT-processor kan de fout te attenderen; als het niet de fout signaal, moet het terug te krijgen door samen te negeren van de gewraakte nodes met hun inhoud.

Het is onjuist als het resultaat van instantiëren de inhoud van de xsl: verwerkingsinstructie bevat de tekenreeks gt ;. Een XSLT-processor kan de fout te attenderen; als het niet de fout signaal, moet het terug te krijgen door het invoegen van een spatie na elk optreden van. dat wordt gevolgd door een gt; .

7.4 Het maken van opmerkingen

lt; – Categorie: instructie –gt;
lt; xsl: commentgt;
lt; – Inhoud: sjabloon –gt;
lt; / xsl: commentgt;

De xsl: reactie element wordt geconcretiseerd om een ​​reactie knooppunt in het resultaat boom te creëren. De inhoud van de xsl: reactie element is een sjabloon voor de string-waarde van de reactie node.

Bijvoorbeeld, deze

zou de opmerking te maken

Het is een fout als het instantiëren de inhoud van xsl: reactie creëert anders dan tekstnodes knooppunten. Een XSLT-processor kan de fout te attenderen; als het niet de fout signaal, moet het terug te krijgen door samen te negeren van de gewraakte nodes met hun inhoud.

Het is een fout als het resultaat van instantiëren de inhoud van de xsl: commentaar bevat de string – of eindigt met -. Een XSLT-processor kan de fout te attenderen; als het niet de fout signaal, moet het terug te krijgen door het invoegen van een spatie na elk optreden van – die wordt gevolgd door een andere – of die eindigt het commentaar.

7.5 kopiëren

lt; – Categorie: instructie –gt;
lt; xsl: copy
Gebruik-attribuut-sets = qnames gt;
lt; – Inhoud: sjabloon –gt;
lt; / xsl: copygt;

De xsl: copy element biedt een eenvoudige manier van het kopiëren van het huidige knooppunt. Instantiëren de xsl: copy element maakt een kopie van het huidige knooppunt. De namespace nodes van de huidige node worden ook automatisch gekopieerd, maar de attributen en de kinderen van het knooppunt worden niet automatisch gekopieerd. De inhoud van de xsl: copy element is een sjabloon voor de attributen en kinderen van de gemaakte knooppunt; de inhoud wordt geïnstantieerd alleen voor de knooppunten van types die attributen of kinderen (dat wil zeggen root-knooppunten en element nodes) kan hebben.

De xsl: copy element kan een use-attribuut-sets attribuut (zie [7.1.4 Benoemde Attribute Sets ]). Dit wordt alleen gebruikt bij het kopiëren element knooppunten.

De wortel knooppunt wordt speciaal behandeld, omdat het hoofdknooppunt van het resultaat boom impliciet wordt gecreëerd. Als het huidige knooppunt is de wortel knooppunt xsl: copy schept geen root node, maar zal gewoon gebruik maken van de inhoud template.

Zo kan de identiteit transformatie worden geschreven xsl: copy als volgt:

Wanneer het huidige knooppunt is een attribuut, dan als het een foutmelding te gebruiken xsl zijn: attribuut een attribuut met dezelfde naam als het huidige knooppunt te maken, dan is het ook een fout XSL Kopie: (zie [7.1.3 Creëren Attributen met xsl: attribuut ]).

Het volgende voorbeeld toont hoe xml: lang attributen kunnen worden gemakkelijk door gekopieerd van bron tot gevolg hebben. Als een stylesheet definieert de volgende naam sjabloon:

dan kan het gewoon doen

wanneer het wil de xml kopiëren: lang attribuut.

7.6 Computing gegenereerde tekst

Binnen een sjabloon, de xsl: waarde-element kan worden gebruikt om gegenereerde tekst, bijvoorbeeld berekenen door het extraheren van tekst uit de broncode of door opneming van de waarde van een variabele. De xsl: value-of element doet dit met een uitdrukking die is opgegeven als de waarde van de select attribuut. Uitdrukkingen kan ook binnen attribuutwaarden van letterlijke resultaat elementen worden gebruikt door bijvoeging van de expressie in accolades ( lt; gt; ).

7.6.1 genereren tekst xsl: value-of

lt; – Categorie: instructie –gt;
lt; xsl: value-of
kiezen = Reeksexpressie
disable-output ontsnappen = "Ja" | "Nee" / Gt;

De xsl: value-of element wordt geconcretiseerd om een ​​tekst knooppunt in het resultaat boom te creëren. De vereiste select attribuut is een uitdrukking; deze uitdrukking wordt geëvalueerd en de resulterende object wordt omgezet naar een string als door een aanroep van de draad functie. De string geeft de string-waarde van de gemaakte tekst node. Als de string leeg is, wordt er geen tekst knooppunt worden gecreëerd. De gecreëerde tekstnode zal worden samengevoegd met elke aangrenzende tekstnodes.

De xsl: copy-element kan worden gebruikt om een ​​kopie van een knooppunt-toestel op het resultaat boom zonder converteren naar een string. Zie [11.3 Het gebruik van Waarden van variabelen en parameters met xsl: copy-of ].

Bijvoorbeeld de volgende creëert een HTML paragraaf uit een persoon element met gegeven-naam en familienaam attributen. De paragraaf zal de waarde van de gegeven-naam attribuut van het huidige knooppunt gevolgd door een spatie en de waarde van de familie-naam attribuut van het huidige knooppunt bevatten.

Voor een ander voorbeeld, de volgende creëert een HTML paragraaf uit een persoon element met gegeven-naam en familienaam kinderen elementen. De paragraaf zal de string-waarde van de eerste gegeven-naam kind element van het huidige knooppunt gevolgd door een spatie en de string-waarde van de eerste familienaam kind element van het huidige knooppunt bevatten.

De volgende vooraf aan elke procedure element met een paragraaf waarin het beveiligingsniveau van de procedure. Het veronderstelt dat het beveiligingsniveau die geldt voor een procedure is gebaseerd op een beveiligingsattribuut de procedure element of een voorouder element van de procedure. Het veronderstelt ook dat als meer dan één element heeft een security attribuut dan het beveiligingsniveau wordt bepaald door het element dat het dichtst bij de procedure.

7.6.2 Attribute Value Templates

In een attribuutwaarde die wordt geïnterpreteerd als een attribuutwaarde template. zoals een attribuut van een letterlijke resultaat element, kan een uitdrukking worden gebruikt door rond de expressie met accolades ( lt; gt; ). De kenmerkwaarde sjabloon wordt geïnstantieerd door de expressie samen vervangen met omgeving accolades de resultaten van de evaluatie van de expressie en omzetting van het verkregen voorwerp een tekenreeks als door een aanroep van de draad functie. Accolades worden niet herkend in een attribuut waarde in een XSLT-stylesheet, tenzij het attribuut uitdrukkelijk wordt gesteld om een ​​die wordt geïnterpreteerd als een attribuut waarde-template zijn; per element samenvatting syntax, wordt de waarde van deze eigenschappen accolades.

NOTITIE: Niet alle attributen worden geïnterpreteerd als kenmerkwaarde templates. Attributen waarvan de waarde is een uitdrukking of het patroon, attributen van de top-level-elementen en attributen die verwijzen naar de naam XSLT objecten worden niet geïnterpreteerd als attribuutwaarde templates. Bovendien worden xmlns attributen niet uitgelegd kenmerkwaarde templates; Het zou niet conformant de XML Namespaces aanbeveling om dit te doen.

Met deze bron

het resultaat zou

Wanneer een attribuutwaarde template wordt geïnstantieerd, wordt een dubbele linker of rechter accolade buiten uitdrukking vervangen door een accolade. Het is een fout als een recht accolade optreedt in een attribuutwaarde template buiten een expressie zonder gevolgd door een tweede rechter accolade. Een rechter accolade in een Letterlijke in een expressie wordt niet herkend als beëindiging van de uitdrukking.

Accolades zijn niet recursief erkend binnen uitdrukkingen. Bijvoorbeeld:

is niet toegestaan. In plaats daarvan, gewoon gebruik maken van:

7.7 Nummering

lt; – Categorie: instructie –gt;
lt; xsl: nummer
level = "single" | "meervoudig" | "elke"
count = patroon
from = patroon
value = number-expressie
format = lt; draad gt;
lang = lt; NMTOKEN gt;
letter-waarde = lt; "alfabetisch" | "traditioneel" gt;
groepering-scheider = lt; verkolen gt;
groepering-size = lt; aantal gt; / Gt;

XSL: getalelement wordt gebruikt om een ​​geformatteerde getal in het resultaat boom voegen. Het aantal in te voegen kunnen worden opgegeven door een expressie. De waarde attribuut bevat een expressie. De expressie wordt geëvalueerd en de resulterende object wordt omgezet naar een getal als door een aanroep van de aantal functie. Het nummer wordt afgerond naar een integer en vervolgens omgezet in een string met behulp van de in de attributen [7.7.1 Nummer naar String Conversie attributen ]; In dit verband wordt de waarde van elke eigenschap opgevat als een attribuutwaarde template. Na de conversie wordt de resulterende tekenreeks opgenomen in het resultaat boom. Bijvoorbeeld, de volgende voorbeeldgetallen een gesorteerde lijst:

Indien geen kenmerk value wordt opgegeven, XSL: getalelement voegt een getal gebaseerd op de positie van de huidige knoop in de broncode. De volgende attributen bepalen hoe het huidige knooppunt wordt genummerd:

Het niveau attribuut specificeert welke niveaus van de broncode moet worden overwogen; het heeft de waarde één. meerdere of. De standaard is single.

De telling attribuut is een patroon dat aangeeft welke knooppunten moet worden geteld op die niveaus. Als Aantal kenmerk niet is opgegeven, wordt standaard het patroon dat overeenkomt met een willekeurig knooppunt met hetzelfde knooppunt als het huidige knooppunt en, indien het huidige knooppunt een geëxpandeerd-naam, met dezelfde uitgebreide-naam als het huidige knooppunt.

De uit attribuut is een patroon dat aangeeft waar de telling begint.

Bovendien, de kenmerken genoemd in [7.7.1 Nummer naar String Conversie attributen ] Worden gebruikt Hoeveelheid string conversie, zoals in het geval wanneer de waarde attribuut gespecificeerd.

Het xsl: aantal element eerst construeert een lijst van positieve gehele getallen met behulp van het niveau. tellen en van attributen:

Wanneer level ="single". gaat het tot het eerste knooppunt in de voorouder-of-zelf as die overeenkomt met de telling patroon, en maakt een lijst van een lengte die één plus het aantal voorafgaande siblings van die voorouder die overeenkomen met de telling patroon. Als er geen voorouder, construeert een lege lijst. Als het van attribuut is opgegeven, dan is de enige voorouders die worden gezocht zijn die zijn afstammelingen van de dichtstbijzijnde voorouder die overeenkomt met het patroon uit. Voorafgaand siblings dezelfde betekenis hier de voorgaande sibling-as.

Wanneer level ="meervoudig". construeert een lijst van alle voorouders van het huidige knooppunt in document volgorde gevolgd door het element zelf; het dan selecteert uit de lijst die knopen die overeenkomen met de telling patroon; het dan kaarten elk knooppunt in de lijst om een ​​plus het aantal voorafgaande broers en zussen van dat knooppunt die overeenkomen met de telling patroon. Als het van attribuut is opgegeven, dan is de enige voorouders die worden gezocht zijn die zijn afstammelingen van de dichtstbijzijnde voorouder die overeenkomt met het patroon uit. Voorafgaand siblings dezelfde betekenis hier de voorgaande sibling-as.

Wanneer level ="elke". construeert een lijst van lengte één met het aantal knooppunten die overeenkomen met de graaf patroon en behoren tot de set met het huidige knooppunt en alle knooppunten op elk niveau van het document dat zijn voor het huidige knooppunt in het document van orde, met uitzondering van namespace en attribuut knooppunten (met andere woorden, de vereniging van de leden van de voorgaande en voorouder-of-zelf assen). Als het van attribuut is opgegeven, dan nog alleen knooppunten nadat het eerste knooppunt voor het huidige knooppunt die overeenkomen met het patroon van worden beschouwd.

De lijst met nummers wordt vervolgens omgezet in een string met behulp van de in de attributen [7.7.1 Nummer naar String Conversie attributen ]; In dit verband wordt de waarde van elke eigenschap opgevat als een attribuutwaarde template. Na de conversie wordt de resulterende tekenreeks opgenomen in het resultaat boom.

De volgende zou de items in een geordende lijst:

De volgende twee regels zouden titel elementen tellen. Dit is bedoeld voor een document dat een aantal opeenvolgende hoofdstukken gevolgd door een sequentie van bijlagen, waarbij zowel hoofdstukken en bijlagen bevatten gedeelten, waardoor punten bevatten bevat. Hoofdstukken zijn genummerd 1, 2, 3; bijlagen zijn genummerd A, B, C; secties in de hoofdstukken zijn genummerd 1.1, 1.2, 1.3; secties in de bijlagen zijn genummerd A.1, A.2, A.3.

Het volgende voorbeeld nummers merkt achtereenvolgens binnen een hoofdstuk:

Het volgende voorbeeld zou H4 elementen in HTML met een driedelige label nummer:

7.7.1 Nummer naar String Conversie attributen

De volgende kenmerken worden gebruikt om de conversie van een lijst van bedieningsnummers in een string. De aantallen zijn gehele getallen groter dan 0. De attributen zijn optioneel.

Het belangrijkste kenmerk is formaat. De standaardwaarde voor het formaat attribuut 1. Het formaat attribuut wordt gesplitst in een reeks tokens waarbij elk token een maximale reeks alfanumerieke tekens of een maximale reeks van niet-alfanumerieke tekens. Alfanumeriek: een teken dat een Unicode-categorie Nd, Nl, Nee, Lu, LL, LV, lm of Lo heeft. De alfanumerieke tokens (formaat tokens) de indeling moet worden gebruikt voor elk nummer in de lijst. Als de eerste token is een niet-alfanumerieke token, dan is de geconstrueerde reeks zal beginnen met dat teken; als de laatste token is niet-alfanumerieke token, dan is de geconstrueerde reeks zal eindigen met die token. Niet-alfanumerieke tekens die liggen tussen twee format penningen separator tokens die worden gebruikt om getallen mee de lijst. De n format token wordt gebruikt voor het nde nummer opmaken in de lijst. Indien er meer dan getallen formaat lopers, dan is de laatste format token wordt gebruikt om resterende cijfers formatteren. Als er geen formaat lopers, vervolgens een formaat van 1 token wordt gebruikt om alle getallen opmaken. Het formaat token geeft de tekenreeks te gebruiken om het nummer 1. Elk getal na de eerste uit het voorgaande nummer wordt gescheiden door de scheider token voorgaande token het formaat van dit aantal opmaken, of vertegenwoordigen, als er geen separator lopers, vervolgens door. (Een periode teken).

Format tokens zijn een superset van de toegestane waarden voor het type attribuut voor het OL element in HTML 4.0 en worden geïnterpreteerd als volgt:

Elke token waar de laatste personage heeft een decimaal cijfer waarde van 1 (zoals gespecificeerd in de Unicode-karakter pand database) en de Unicode-waarde van de voorgaande tekens is één minder dan de Unicode-waarde van het laatste teken genereert een decimale weergave van het nummer waar elk nummer is ten minste even lang als het formaat token. Zo is een format token 1 genereert de volgorde 1 2 10 11 12. en een formaat token 01 genereert de sequentie 02. 09 10 01 11 12 99 100 101.

Een format token A genereert de volgorde A B C Z AA AB AC.

Een format token een genereert de sequentie a b c. z aa ab ac.

Een format token i genereert de sequentie I II III IV v vi vii viii ix x.

Een format token ik genereert de sequentie I II III IV V VI VII VIII IX X.

Een ander formaat token geeft een nummering die begint met die token. Als een implementatie ondersteunt geen nummering die begint met die token, het moet een format teken van 1 gebruiken.

Bij de nummering van een alfabetische volgorde, het lang attribuut specificeert welke alfabet van de taal is om gebruikt te worden; het heeft hetzelfde bereik van waarden als xml: lang [XML]; als er geen lang waarde is opgegeven, moet de taal worden bepaald uit de systeemomgeving. Uitvoerders moeten documenteren voor welke talen zij ondersteunen nummering.

NOTITIE: Uitvoerders mag geen veronderstellingen over hoe de nummering werkt in bepaalde talen te maken en moet goed de taal die zij wensen ter ondersteuning van onderzoek. De nummering conventies van vele talen zijn zeer verschillend van het Engels.

De brief-waarde toeschrijven disambiguates tussen nummering sequenties die letters te gebruiken. In veel talen zijn er twee veelgebruikte nummering sequenties die letters te gebruiken. Een nummering wijst numerieke waarden van brieven in alfabetische volgorde, en de andere wijst numerieke waarden voor elke letter op een andere manier traditioneel in die taal. In het Engels, deze zou overeenkomen met de nummering bepaald door de indeling penningen een en i. In sommige talen, het eerste lid van elke sequentie is hetzelfde, en dus de vorm token alleen dubbelzinnig was. Een waarde van alfabetische specificeert de alfabetische volgorde; een waarde van traditionele specificeert de andere sequentie. Als de letter-waarde attribuut niet is opgegeven, dan is het de uitvoering afhankelijk van hoe elke dubbelzinnigheid is opgelost.

NOTITIE: Het is mogelijk dat twee conforme XSLT processoren niet een getal converteren naar dezelfde tekenreeks. Sommige XSLT processors mogelijk geen ondersteuning voor sommige talen. nummer: Bovendien kunnen er variaties mogelijk zoals omzettingen worden uitgevoerd voor een bepaalde taal die niet worden opgegeven door de attributen xsl zijn. Toekomstige versies van XSLT kunnen extra attributen verstrekken aan controle over deze variatiemogelijkheden. Implementaties kunnen ook gebruik maken van de uitvoering specifieke naamruimten attributen op xsl: nummer voor dit.

De groepering-afscheider attribuut geeft de scheider gebruikt als een groepering (bijvoorbeeld duizenden) separator in decimale nummering en de optionele groepering-size bepaalt de grootte (normaal 3) van het samenwerkingsverband. Bijvoorbeeld groeperen-separator ="," en groeperen-size ="3" zou nummers van de vorm 1.000.000 produceren. Als slechts één van de groepering-afscheider en groeperen-size attributen is opgegeven, dan wordt het genegeerd.

Hier zijn enkele voorbeelden van de conversie specificaties:

format ="&# X30A2;" specificeert Katakana nummering

format ="&# X30A4;" specificeert Katakana nummering in het "Iroha" bestellen

format ="&# X0E51;" specificeert nummering met Thaise cijfers

format ="&# X05D0;" letter-waarde ="traditioneel" specificeert "traditioneel" Hebreeuwse nummering

format ="&# X10D0;" letter-waarde ="traditioneel" specificeert Georgische nummering

format ="&# X03B1;" letter-waarde ="traditioneel" specificeert "klassiek" Griekse nummering

format ="&# X0430;" letter-waarde ="traditioneel" specificeert Oude Slavische nummering

8 Herhaling

lt; – Categorie: instructie –gt;
lt; xsl: for-each
kiezen = Knooppunt-set-expressie gt;
! Lt; – Inhoud: (xsl: sort *, sjabloon) –gt;
lt; / xsl: for-eachgt;

Wanneer de uitkomst een bekende regelmatige structuur, is het nuttig om in staat om rechtstreeks de template gespecificeerd voor geselecteerde knooppunten. De xsl: for-each-instructie bevat een sjabloon, die wordt geconcretiseerd voor elk knooppunt geselecteerd door de uitdrukking die door de select attribuut. De select kenmerk is vereist. De uitdrukking moet evalueren naar een knooppunt-set. De sjabloon wordt geïnstantieerd door het geselecteerde knooppunt als huidige knooppunt. en een lijst van alle geselecteerde knooppunten het huidige knooppunt lijst. De knooppunten worden verwerkt in document orde, tenzij een specificatie voor sorteren aanwezig is (zie [10 sorteren ]).

Gegeven bijvoorbeeld een XML-document met deze structuur

de volgende zou een HTML-document met een tabel met een rij voor elke klant element te creëren

9 Voorwaardelijke Processing

Er zijn twee instructies in XSLT dat voorwaardelijke verwerking in een sjabloon te ondersteunen: xsl: if en xsl: kies. De xsl: if instructie biedt eenvoudig als-dan-conditionaliteit; de xsl: kies instructie ondersteunt selectie van een keuze als er verschillende mogelijkheden.

9.1 Voorwaardelijke Verwerking met xsl: if

lt; – Categorie: instructie –gt;
lt; xsl: if
proef = Boolean-expressie gt;
lt; – Inhoud: sjabloon –gt;
lt; / xsl: ifgt;

De xsl: if element heeft een test attribuut, die een uitdrukking aangeeft. De inhoud is een sjabloon. De expressie wordt geëvalueerd en de resulterende object wordt omgezet naar een boolean als door een aanroep van de boolean functie. Als het resultaat waar is, dan is de inhoud template wordt geconcretiseerd; anders wordt er niets gecreëerd. In het volgende voorbeeld worden de namen in een groep namen geformatteerd als komma gescheiden lijst:

De volgende kleuren elke andere tafel rij geel:

9.2 Voorwaardelijke Verwerking met xsl: choose

lt; xsl: wanneer
proef = Boolean-expressie gt;
lt; – Inhoud: sjabloon –gt;
lt; / xsl: whengt;

lt; xsl: otherwisegt;
lt; – Inhoud: sjabloon –gt;
lt; / xsl: otherwisegt;

De xsl: kies element selecteert één onder een aantal mogelijke alternatieven. Het bestaat uit een reeks xsl: wanneer elementen gevolgd door een optionele xsl: element anders. Elke xsl: als element heeft een enkel attribuut, te testen. waarin wordt bepaald een expressie. De inhoud van de xsl: wanneer en xsl: andere elementen is een sjabloon. Wanneer een xsl: choose element verwerkt, elk xsl: wanneer elementen wordt getest op zijn beurt door het evalueren van de expressie en omzetting van het verkregen voorwerp een booleaanse als door een aanroep van de boolean functie. De inhoud van de eerste, en slechts de eerste, xsl: als element waarvan test waar is geïnstantieerd. Indien geen xsl: als waar de inhoud van de xsl: andere element wordt geïnstantieerd. Als er geen xsl: als element waar is, en er geen xsl: anders element aanwezig is, wordt er niets gecreëerd.

Het volgende voorbeeld geeft een opsomming van items in een geordende lijst met Arabische cijfers, letters of Romeinse cijfers, afhankelijk van de diepte waarop de bestelde lijsten zijn genest.

10 sorteren

Sortering wordt bepaald door het toevoegen van xsl: sort elementen als kinderen van een xsl: toepassing-templates of xsl: for-each element. De eerste xsl: sort kind specificeert de primaire sorteersleutel, de tweede xsl: sort kind specificeert de secundaire soort sleutel en ga zo maar door. Wanneer een xsl: toepassing-templates of xsl: for-each element heeft één of meerdere xsl: sort kinderen, dan in plaats van de verwerking van de geselecteerde knooppunten in document orde, het sorteert de knooppunten volgens de opgegeven soort toetsen en vervolgens verwerkt ze in naargelang bestellen. Bij gebruik in xsl: for-each. xsl: sort elementen moet eerst plaatsvinden. Wanneer een sjabloon wordt geconcretiseerd door xsl: toepassing-templates en xsl: for-each. het huidige knooppunt lijst Lijst bestaat uit de volledige lijst van de knooppunten worden verwerkt in gesorteerde volgorde.

xsl: sort heeft een select attribuut waarvan de waarde is een uitdrukking. Voor elk knooppunt te worden verwerkt, wordt de expressie geëvalueerd met dat knooppunt als het huidige knooppunt en met de volledige lijst van de knooppunten worden verwerkt in ongesorteerd volgorde als het huidige knooppunt lijst. De resulterende object wordt omgezet naar een string als door een aanroep van de draad functie; deze string wordt gebruikt als een soort sleutel voor dat knooppunt. De standaardwaarde van de select-attribuut is. die zal leiden tot de string-waarde van het huidige knooppunt wordt gebruikt als sorteercriterium.

Deze reeks dient als een soort sleutel voor het knooppunt. De volgende optionele attributen xsl: sort bepalen hoe de lijst van de soort sleutels worden gesorteerd; de waarden van deze attributen worden geïnterpreteerd als kenmerkwaarde templates.

order geeft aan of de snaren moet worden gesorteerd in oplopende of aflopende volgorde; oplopende specificeert oplopende volgorde; aflopend specificeert aflopende volgorde; de standaard wordt oplopend

lang specificeert de taal van het soort toetsen; het heeft hetzelfde bereik van waarden als xml: lang [XML]; als er geen lang waarde is opgegeven, moet de taal worden bepaald uit de systeemomgeving

data-type specificeert het type gegevens van de snaren; de volgende waarden zijn toegestaan:

tekst geeft aan dat het soort sleutels lexicografisch dient te worden geregeld in het cultureel correcte wijze voor de taal die door lang

getal geeft aan dat het soort sleutels moeten worden omgezet in cijfers en vervolgens gesorteerd op basis van de numerieke waarde; het soort sleutel is uitgedrukt in een als door een aanroep van de aantal functie; het lang attribuut wordt genegeerd

een QName met een voorvoegsel is uitgegroeid tot een uitgebreide-naam zoals beschreven in [2.4 Gekwalificeerde Namen ]; de uitgebreide-naam identificeert de data-type; het gedrag in dit geval niet door dit document

De standaardwaarde is tekst.

NOTITIE: De XSL Working Group is van plan dat toekomstige versies van XSLT XML Schema’s zal gebruiken om verdere waarden te definiëren voor dit kenmerk.

  • case-order heeft een waarde bovenste eerste of lagere-first; Dit geldt wanneer de gegevens-type ="tekst". en bepaalt dat hoofdletters respectievelijk versa vice moet gekozen voor kleine letters of. Als bijvoorbeeld lang ="nl". dan A A B B worden naargelang met case-order ="upper-eerste" en een A b B worden naargelang met case-order ="lagere-first". De standaardwaarde is taalgevoelig.

  • NOTITIE: Het is mogelijk dat twee conforme XSLT processors niet precies hetzelfde te sorteren. Sommige XSLT processors mogelijk geen ondersteuning voor sommige talen. sorteren: Bovendien kunnen er variaties mogelijk aan de verwerking van een bepaalde taal die niet door de attributen xsl zijn. bijvoorbeeld of Hiragana of Katakana is gesorteerd voor het eerst in het Japans. Toekomstige versies van XSLT kunnen extra attributen verstrekken aan controle over deze variatiemogelijkheden. Implementaties kunnen ook gebruik maken van de uitvoering specifieke naamruimten attributen op xsl: sort voor. NOTITIE: Het wordt aanbevolen dat uitvoerders te raadplegen [UNICODE TR10] voor meer informatie over geïnternationaliseerde sorteren.

    Het soort moet stabiel zijn: in de gesorteerde lijst van nodes, elk sub lijst dat soort sleutels dat iedereen gelijk moet zijn in het document van het oog te vergelijken is.

    Stel bijvoorbeeld dat een werknemer-database heeft de vorm

    Dan is een lijst van de werknemers op naam gesorteerd kan worden gegenereerd met behulp van:

    11 Variabelen en Parameters

    ! Lt; – Categorie: top-level-element –gt;
    lt; – Categorie: instructie –gt;
    lt; xsl: variable
    naam = qname
    select = expressie gt;
    lt; – Inhoud: sjabloon –gt;
    lt; / xsl: variablegt;

    ! Lt; – Categorie: top-level-element –gt;
    lt; xsl: param
    naam = qname
    select = expressie gt;
    lt; – Inhoud: sjabloon –gt;
    lt; / xsl: paramgt;

    Een variabele is een naam die kan worden gebonden aan een waarde. De waarde die een variabele gebonden is (de waarde van de variabele) kan een object van een van de wijzen die worden geretourneerd door expressies. Er zijn twee elementen die kunnen worden gebruikt om variabelen binden: xsl: variable en xsl: param. Het verschil is dat de gegevens op het xsl waarde: param variabele is slechts een standaard waarde voor de binding; wanneer de sjabloon of stylesheet waarbinnen de xsl: param element optreedt procedure, kunnen parameters worden doorgegeven die gebruikt worden in plaats van de standaardwaarden.

    Beide xsl: variable en xsl: param een ​​gewenste naam attribuut, die de naam van de variabele geeft. De waarde van de naam attribuut is een QName. die is geëxpandeerd zoals beschreven in [2.4 Gekwalificeerde Namen ].

    Voor elk gebruik van deze variabele bindende elementen, is er een gebied van het stijlblad boom waarin de binding zichtbaar; in deze regio, elk binding van de variabele die zichtbaar is op de variabele bindende element zelf is verborgen was. Dus alleen de binnenste binding van een variabele zichtbaar. De set van variabele bindingen in ruimte voor een uitdrukking bestaat uit die bindingen die zichtbaar op het punt in de stylesheet waar de uitdrukking optreedt zijn.

    11.1 Resultaat Tree Fragments

    Variabelen te introduceren een extra data-type in de taal expressie. Deze aanvullende gegevens type wordt genoemd resultaat boom fragment. Een variabele kan worden gebonden aan een resultaat boom fragment in plaats van één van de vier basis XPath data-types (string, getal, boolean, knooppunt-set). Een resultaat boom fragment betekent een fragment van het resultaat boom. Een resultaat boom fragment is equivalent getrakteerd op een knooppunt-set die slechts een enkele hoofdknooppunt bevat. Echter, de bewerkingen die zijn toegestaan ​​op een resultaat boom fragment zijn een subset van die toegelaten in een knooppunt-set. Een operatie is toegestaan ​​op een resultaat boom fragment alleen als die operatie worden toegestaan ​​zou aan een touwtje (de operatie op de snaar kan eerst betrekken omzetten van de string naar een nummer of boolean). In het bijzonder is het niet toegestaan ​​de / gebruiken. //. en [] exploitanten op het resultaat boom fragmenten. Bij een toegestane handeling wordt uitgevoerd op een resultaat boom fragment wordt precies uitgevoerd zoals het zou op de equivalente knooppunt-set.

    Als een resultaat boom fragment in het resultaat boom wordt gekopieerd (zie [11.3 Het gebruik van Waarden van variabelen en parameters met xsl: copy-of ]), Dan zullen alle knooppunten die zijn kinderen van de root-knooppunt in het equivalent knooppunt-set worden toegevoegd in de juiste volgorde aan het resultaat boom.

    Uitdrukkingen kan alleen waarden van het type resultaat boom fragment terug te keren door te verwijzen naar variabelen van het type resultaat boom fragment of te bellen extensie functies die een resultaat boom fragment of het krijgen van een systeem eigenschap waarvan de waarde is een resultaat boom fragment terug te keren.

    11.2 Waarden van variabelen en parameters

    A-variabele bindende element kan de waarde van de variabele opgeven in drie alternatieve manieren.

    Als de variabele bindende element een select kenmerk, waarna de waarde van het attribuut moet een uitdrukking zijn en de waarde van de variabele is het object als gevolg van de expressie wordt geëvalueerd. In dat geval moet de inhoud leeg zijn.

    Als de variabele inbindelement uitgezocht kenmerk heeft en heeft niet-lege inhoud (d.w.z. de variabele bindende element heeft één of meer onderliggende nodes), dan is de inhoud van de variabele bindende element specificeert de waarde. De inhoud van de variabele-bindende element een sjabloon, die wordt geïnstantieerd om de waarde van de variabele geven. De waarde is een resultaat boom fragment gelijk aan een node-set met slechts een enkele wortel knooppunt met als kinderen de volgorde van de knooppunten door instantiëren de sjabloon. De base URI van de knooppunten in het resultaat boom fragment de base URI van de variabele inbindelement.

    Het is een fout als een lid van de volgorde van de knooppunten gemaakt door het concretiseren van de template is een attribuut knoop of een namespace knooppunt, omdat een root node een attribuut knooppunt of een namespace knooppunt als een kind niet kan hebben. Een XSLT-processor kan de fout te attenderen; als het niet de fout signaal, moet het terug te krijgen door niet het toevoegen van het attribuut knoop of namespace node.

    Als de variabele bindende element heeft lege inhoud en niet over een select attribuut, dan is de waarde van de variabele is een lege string. dus

    is gelijk aan

    NOTITIE: Wanneer een variabele wordt gebruikt om knooppunten te selecteren door de positie, wees niet te doen: Dit zal de output van de waarde van het eerste item element, omdat de variabele n gebonden zijn om een ​​resultaat boom fragment, geen nummer. In plaats daarvan, voert u een of NOTITIE: Een handige manier om de lege te specificeren knooppunt ingesteld als de standaard waarde van een parameter:

    11.3 Het gebruik van Waarden van variabelen en parameters met xsl: copy-of

    lt; – Categorie: instructie –gt;
    lt; xsl: copy-of
    kiezen = Expressie / gt;

    De xsl: copy-element kan worden gebruikt om een ​​resultaat boom fragment in het resultaat boom plaatst, zonder eerst converteren naar een string xsl: value-of heeft (zie [7.6.1 genereren tekst xsl: value-of ]). De vereiste select attribuut bevat een expressie. Wanneer het resultaat van de evaluatie van de expressie een resultaat boom fragment, wordt het volledige fragment gekopieerd naar het resultaat boom. Wanneer het resultaat is een knooppunt-set, zijn alle knooppunten in de set gekopieerd document orde in het resultaat boom; kopiëren van een element knooppunt kopieert het kenmerk knooppunten naamruimte knooppunten en kinderen van het element knooppunt en het knooppunt element zelf; een root node wordt gekopieerd door het kopiëren van haar kinderen. Wanneer het resultaat niet een knooppunt-set of resultaat boom fragment, wordt het resultaat omgezet in een tekenreeks en vervolgens in het resultaat boom, als met xsl: value-of.

    11.4 Top-level variabelen en parameters

    Beide xsl: variable en xsl: param zijn toegestaan ​​als top-level-elementen. Een top-level variabele-bindend element verklaart een globale variabele, dat is overal zichtbaar. Een top-level xsl: param element verklaart een parameter om de stylesheet; XSLT niet het mechanisme waarmee parameters worden doorgegeven aan de stijlblad definiëren. Het is een fout als een stylesheet bevat meer dan één binding van een variabele op het hoogste niveau met dezelfde naam en hetzelfde import voorrang. Op het hoogste niveau, wordt de expressie of template opgeven van de variabele waarde geëvalueerd met dezelfde context als die wordt gebruikt om de root node van het brondocument te verwerken: het huidige knooppunt is de wortel knooppunt van het brondocument en de huidige node lijst een lijst met alleen de wortel knooppunt van het brondocument. Als de sjabloon of uitdrukking de waarde aan van een globale variabele x verwijst naar een globale variabele y. wordt de waarde van y worden berekend voor de waarde van x. Het is een fout als het onmogelijk is om dit te doen voor alle variabele definities globaal; met andere woorden, het is een fout als de definities cirkelvormig.

    Dit voorbeeld verklaart een globale variabele para-font-size. die zij verwijst in een attribuut waarde template.

    11.5 Variabelen en parameters binnen Templates

    Naast het feit dat toegestaan ​​op het hoogste niveau, zowel xsl: variable en xsl: param zijn ook toegestaan ​​in templates. xsl: variable is overal toegestaan ​​binnen een sjabloon die een instructie is toegestaan. In dit geval is de binding is toegankelijk voor alle volgende siblings en hun nakomelingen. Merk op dat de binding is niet toegankelijk voor de xsl: variable element zelf. xsl: param is toegestaan ​​als een kind aan het begin van een xsl: template element. In dit verband is de binding is toegankelijk voor alle volgende siblings en hun nakomelingen. Merk op dat de binding is niet toegankelijk voor de xsl: param element zelf.

    Een bindende schaduwen een bindend indien de binding optreedt op een punt waar het andere bindende zichtbaar is, en de bindingen dezelfde naam. Het is een fout als een bindend vastgesteld door een xsl: variable of xsl: param element binnen een template schaduwen andere binding vastgesteld door een xsl: variable of xsl: param element ook binnen de template. Het is niet een fout als een bindend vastgesteld door een xsl: variable of xsl: param element in een sjabloon schaduwen andere binding vastgesteld door een xsl: variable of xsl: param top-level element. Zo, de volgende is een fout:

    Echter, de volgende toegestaan:

    NOTITIE: De dichtstbijzijnde equivalent in Java om een ​​xsl: variable element in een sjabloon is een laatste lokale variabele declaratie met een initializer. Zo heeft vergelijkbare semantiek XSLT heeft een equivalent van de Java toewijzen niet over omdat dit het moeilijker maken om een ​​implementatie die anders dan in een batch-achtige manier documentprocessen creëren, te beginnen bij het begin en tijdens de gehele de einde.

    11.6 Passing parameters om sjablonen

    lt; xsl: with-param
    naam = qname
    select = expressie gt;
    lt; – Inhoud: sjabloon –gt;
    lt; / xsl: with-paramgt;

    Parameters worden doorgegeven aan templates met behulp van de xsl: with-param element. De gewenste naam attribuut geeft de naam van de parameter (de variabele de waarde waarvan binding wordt vervangen te worden). De waarde van de naam attribuut is een QName. die is geëxpandeerd zoals beschreven in [2.4 Gekwalificeerde Namen ]. xsl: with-param is toegestaan ​​binnen zowel de xsl: call-template en xsl: toepassing-templates. De waarde van de parameter is gespecificeerd op dezelfde manier als voor xsl: variable en xsl: param. Het huidige knooppunt en huidige knooppunt lijst voor het berekenen van de door XSL value: met param element is dezelfde als die toegepast voor de xsl: toepassing-templates of xsl: call-sjabloonelement waarin het voorkomt. Het is geen fout van een parameter x te geven aan een template die niet een XSL heeft: param element voor x; de parameter wordt genegeerd.

    Dit voorbeeld definieert een benoemde template voor een genummerde-blok met een argument om het formaat van het nummer te controleren.

    12 Extra functies

    Dit deel beschrijft XSLT-specifieke toevoegingen aan de kern van XPath functie bibliotheek. Sommige van deze extra functies ook gebruik maken van de informatie die door top-level-elementen in de stylesheet te maken; Dit deel beschrijft ook deze elementen.

    12.1 Meerdere Brondocumenten

    De document functie maakt het mogelijk toegang tot andere dan de belangrijkste bron document XML-documenten.

    Wanneer de document functie heeft precies één argument en het argument een knooppunt-set, dan is het resultaat van de unie, voor elk knooppunt in het argument knooppunt-set, het resultaat van het aanroepen van de document functie het eerste argument wordt de string-waarde van het knooppunt en het tweede argument dat een knooppunt-set met de knoop als enige lid. Wanneer de document functie heeft twee argumenten en het eerste argument is een knooppunt-set, dan is het resultaat van de unie, voor elk knooppunt in het argument knooppunt-set, het resultaat van het aanroepen van de document -functie met het eerste argument dat de string-waarde van het knooppunt, en met het tweede argument dat het tweede argument doorgegeven aan de document functie.

    Toen de eerste argument om de document functie is niet een node-set, is het eerste argument geconverteerd naar een string als door een oproep aan de draad functie. Deze reeks wordt behandeld als een URI referentie; de middelen die door de URI wordt opgehaald. De gegevens uit het ophalen actie geparseerd als XML-document en een boom geconstrueerd volgens het datamodel (zie [3 Data Model ]). Als er een fout is het ophalen van de bron, dan kan de XSLT-processor een fout signaal; als het niet een fout heeft signaleren, moet het terug te krijgen door terug een lege knoop-set. Een mogelijke vorm van retrieval fout is dat de XSLT processor van de URI-schema wordt gebruikt door de URI niet ondersteunt. Een XSLT-processor is niet verplicht om een ​​bepaalde URI’s te ondersteunen. De documentatie voor een XSLT-processor moet aangeven welke URI-schema’s de XSLT-processor ondersteunt.

    Als de URI verwijzing een fragment identifier bevat, dan is een knooppunt-set met alleen het hoofdknooppunt van het document wordt geretourneerd. Als de URI verwijzing bevat wel een fragment identifier, retourneert de functie een node-set met de knooppunten in de boom geïdentificeerd door de fragment identifier van de URI referentie. De semantiek van het fragment identifier is afhankelijk van het mediatype van het resultaat van het ophalen van de URI. Als er een fout in de verwerking fragment identifier, kan de XSLT processor het foutsignaal; als het niet de fout signaal, moet het terug te krijgen door terug een lege knoop-set. Mogelijke fouten zijn:

    Het fragment identifier identificeert iets dat niet kan worden vertegenwoordigd door een XSLT knooppunt-set (zoals een reeks tekens binnen een tekst knooppunt).

    De XSLT processor ondersteunt geen fragment identifiers voor de media-type van het retrieval resultaat. Een XSLT-processor is niet verplicht om een ​​bepaalde typen media te ondersteunen. De documentatie voor een XSLT-processor moet opgeven voor welke media types de XSLT-processor ondersteunt fragment identifiers.

    De gegevens die voortvloeien uit de retrieval actie wordt ontleed als een XML-document, ongeacht het mediatype van het ophalen resultaat; als de top-level media type is tekst. dan wordt geanalyseerd op dezelfde wijze alsof de mediatype waren text / xml; anders wordt geanalyseerd op dezelfde wijze alsof de mediatype waren application / xml.

    NOTITIE: Omdat er geen top-level xml mediatype, data met een mediatype anders dan text / xml of application / xml kan in feite XML.

    De URI verwijzing kan relatief zijn. De base URI (zie [3.2 Base URI ]) Van het knooppunt in het tweede argument knooppunt-set die voor het eerst in document volgorde wordt gebruikt als basis URI voor het oplossen van de relatieve URI in een absolute URI. Als het tweede argument wordt weggelaten, dan wordt standaard het knooppunt in de stylesheet dat de uitdrukking dat de oproep aan de omvat bevat document functie. Merk op dat een lengte nul URI verwijzing een naar het document ten opzichte waarvan de URI referentie wordt omgezet; aldus document ("") Verwijst naar de root node van de stylesheet; de boomrepresentatie van het stijlblad is exact hetzelfde als het XML document met de stijlblad was het oorspronkelijke brondocument.

    Twee documenten worden behandeld als hetzelfde document als ze worden geïdentificeerd door dezelfde URI. De URI wordt gebruikt voor de vergelijking is de absolute URI waarin elke relatieve URI werd opgelost en bevat geen fragment identifier. Een hoofdknooppunt wordt beschouwd als hetzelfde knooppunt als een hoofdknooppunt als de twee knopen van hetzelfde document. Zo zal de volgende expressie altijd waar te zijn:

    De document functie geeft aanleiding tot de mogelijkheid dat een knooppunt-set knooppunten uit meer dan één document kan bevatten. Met een dergelijk knooppunt-set, de relatieve document volgorde van de twee knooppunten in hetzelfde document is de normale document volgorde bepaald door XPath [XPath]. De relatieve document volgorde van de twee knooppunten in verschillende documenten wordt bepaald door een implementatie-afhankelijke volgorde van de documenten met de twee knooppunten. Er zijn geen beperkingen op hoe het anders dan dat het zo consequent moet doen uitvoeringsbesluiten documenten: een implementatie moet altijd dezelfde volgorde te gebruiken voor dezelfde set van documenten.

    12.2 Keys

    Keys bieden een manier om te werken met documenten die een impliciete verwijzing structuur bevatten. De ID. IDREF en IDREFS attribuut types in XML een mechanisme om XML-documenten om hun kruisverwijzingen expliciet te maken. XSLT ondersteunt dit door de XPath id functie. Dit mechanisme heeft een aantal beperkingen:

    ID attributen moet worden verklaard als zodanig in de DTD. Als een ID-kenmerk is gedeclareerd als een ID kenmerk Alleen in de externe DTD deelverzameling, dan zal het worden erkend als een ID attribuut alleen als de XML processor leest de externe DTD deelverzameling. Echter, XML vereist geen XML-processoren naar de externe DTD te lezen, en ze kunnen ook ervoor kiezen niet te doen, vooral als het document wordt verklaard standalone ="Ja" .

    Een document kan slechts een enkele set van unieke ID’s bevatten. Er kan niet worden aparte, onafhankelijke sets van unieke ID’s.

    De ID van een element kan alleen worden bepaald in een kenmerk; kan niet worden gespecificeerd door de inhoud van het element, of door een onderliggend element.

    Een ID is beperkt tot een XML-naam. Zo kan het geen spaties bevatten.

    Een element kan maximaal één id.

    Ten hoogste één element kan een bepaalde id.

    Vanwege deze beperkingen XML-documenten bevatten soms een verwijzing structuur die niet expliciet door ID / IDREF / IDREFS attributen wordt verklaard.

    Een sleutel is een triple met daarin:

    het knooppunt dat de sleutel heeft

    de waarde van de sleutel (een tekenreeks)

    Een stylesheet verklaart een set sleutels voor elk document met behulp van de xsl: sleutelelement. Wanneer deze set sleutels bevat een lid met een knooppunt x. noem y en z waarde. we zeggen dat knooppunt x heeft een sleutel met de naam y en z waarde.

    Dus een sleutel is een soort van algemene ID, die niet aan dezelfde beperkingen als XML ID:

    Sleutels worden verklaard in de stylesheet met behulp van xsl: belangrijke elementen.

    Een toets heeft een naam en een waarde; elke toets naam kunnen worden gezien als het onderscheiden van een aparte, onafhankelijke ruimte van identifiers.

    De waarde van een benoemde sleutel voor een element kan worden bepaald in een geschikte plaats; bijvoorbeeld in een attribuut in een onderliggend element of inhoud. Een XPath uitdrukking wordt gebruikt om aan te geven waar de waarde van een bepaalde naam sleutel te vinden.

    De waarde van een sleutel kan een willekeurige tekenreeks; is niet beperkt tot een naam.

    Er kunnen meerdere sleutels in een document met hetzelfde knooppunt, dezelfde sleutel naam maar met verschillende sleutelwaarden.

    Er kunnen meerdere sleutels in een document met dezelfde sleutel naam, dezelfde sleutelwaarde, maar verschillende knooppunten.

    ! Lt; – Categorie: top-level-element –gt;
    lt; xsl: key
    naam = qname
    wedstrijd = patroon
    gebruiken = Expressie / gt;

    De xsl: sleutel element wordt gebruikt om sleutels te verklaren. De naam attribuut specificeert de naam van de sleutel. De waarde van de naam attribuut is een QName. die is geëxpandeerd zoals beschreven in [2.4 Gekwalificeerde Namen ]. De wedstrijd attribuut is een patroon; een xsl: sleutelelement geeft informatie over de sleutels van elk knooppunt dat overeenkomt met de opgegeven in de wedstrijd attribuut patroon. Het gebruik kenmerk is een uitdrukking specificeren van de waarden van de sleutel; de expressie eenmaal geëvalueerd voor elk knooppunt dat overeenkomt met het patroon. Als het resultaat is een knooppunt-set, dan voor elk knooppunt in de knoop-set, het knooppunt dat overeenkomt met het patroon heeft een sleutel van de opgegeven naam waarvan de waarde is de string-waarde van het knooppunt in de node-set; Anders wordt het resultaat omgezet in een tekenreeks, en het knooppunt dat overeenkomt met het patroon heeft een sleutel van de opgegeven naam met waarde gelijk aan die string. Dus een knooppunt x een sleutel met naam y en z waarde als en alleen als er een XSL: sleutelelement dat:

    x overeenkomt met de opgegeven in de wedstrijd attribuut van de xsl patroon: key element;

    de waarde van de naam attribuut van de xsl: sleutel element is gelijk aan y; en

    wanneer de in het gebruik attribuut van de xsl uitdrukking: is belangrijk element geëvalueerd met x als het huidige knooppunt en met een knooppunt lijst met net x als het huidige knooppunt lijst resulteert in een object u. vervolgens z is gelijk aan het resultaat van het omzetten u om een ​​string als door een aanroep van de draad functie of u is een knooppunt-set en z is gelijk aan de string-waarde van één of meer van de knooppunten in u.

    Merk ook op dat er meer dan één XSL mogelijk: sleutelelement dat overeenkomt met een bepaald knooppunt; alle van de matching xsl: belangrijke elementen worden gebruikt, zelfs als ze niet dezelfde import voorrang.

    Er treedt een fout de waarde van ofwel het attribuut of attributen wedstrijd een VariableReference bevatten.

    De sleutel functie doet voor sleutels wat de id functie doet voor ID’s. Het eerste argument geeft de naam van de sleutel. De waarde van het argument moet een QName zijn. die is geëxpandeerd zoals beschreven in [2.4 Gekwalificeerde Namen ]. Wanneer het tweede argument om de sleutel functie is van het type knooppunt-set, dan is het resultaat van de vereniging van het resultaat van de toepassing van de sleutel functie om de string waarde van elk van de knooppunten in het argument knooppunt-set. Wanneer het tweede argument om sleutel is van een ander type, wordt het argument geconverteerd naar een tekenreeks als door een aanroep van de draad functie; retourneert een node-set met de knooppunten in hetzelfde document als de context knooppunt dat een waarde voor de genoemde sleutel gelijk is aan deze string te hebben.

    Bijvoorbeeld, gegeven een verklaring

    een expressie-toets ("idkey", @ Ref) zal terugkeren op dezelfde node ingesteld als id (@Ref). in de veronderstelling dat de enige id attribuut in de XML-brondocument verklaard is:

    en dat de ref attribuut van het huidige knooppunt bevat geen witruimte.

    Stel dat een document waarin een functie bibliotheek maakt gebruik van een prototype element om functies te definiëren

    en een functieorgaan te verwijzen naar namen functioneren

    Dan kon de stylesheet hyperlinks tussen de verwijzingen en definities te genereren als volgt:

    De sleutel kan worden gebruikt om een ​​sleutel van een andere dan het document met de context geleding document ophalen. Stel bijvoorbeeld dat een document bevat bibliografische referenties in de vorm lt; bibrefgt, XSLTlt; / bibrefgt ;. en er is een apart XML-document bib.xml met een bibliografische database met gegevens in de vorm:

    Dan kon de stylesheet de volgende gebruiken om de bibref elementen te transformeren:

    12.3 Nummer opmaak

    De format-nummer functie zet haar eerste argument om een ​​string in het formaat patroon reeks opgegeven door het tweede argument en de decimale-formaat genoemd door het derde argument, of het standaard decimale-formaat, als er geen derde argument. Het formaat patroon string is in de syntaxis die door de JDK 1.1 DecimalFormat klasse. Het formaat patroon tekenreeks in een gelokaliseerde notatie: het decimale formaat bepaalt welke tekens een speciale betekenis in de patroon (met uitzondering van de aanhalingsteken, die niet is gelokaliseerd). Het formaat patroon moet de munt hekje (# x00A4) bevatten; ondersteuning voor deze functie is toegevoegd na de eerste release van JDK 1.1. De naam decimale-formaat moet een QName zijn. die is geëxpandeerd zoals beschreven in [2.4 Gekwalificeerde Namen ]. Het is een fout als de stylesheet een verklaring van de decimale-formaat met de opgegeven uitgebreide-naam bevat.

    NOTITIE: Implementaties zijn niet verplicht om de JDK 1.1 implementatie te gebruiken, noch worden implementaties nodig in Java uit te voeren. NOTITIE: Stylesheets kunnen andere voorzieningen in XPath tot afronding te controleren.

    ! Lt; – Categorie: top-level-element –gt;
    lt; xsl: decimaal-formaat
    name = qname
    decimaal-separator = char
    groepering-scheider = char
    infinity = tekenreeks
    min-teken = char
    NaN = tekenreeks
    procent = char
    per-mille = char
    zero-cijfer = char
    cijfer = char
    patroon-scheider = char / gt;

    De xsl: decimale formaat element verklaart een decimaal-formaat, dat de interpretatie van een formaat dat patroon wordt gebruikt door de controles format-nummer functie. Als er een attribuut, dan verklaart het element een benoemd decimaal formaat; anders, verklaart zij het standaard decimale-formaat. De waarde van de naam attribuut is een QName. die is geëxpandeerd zoals beschreven in [2.4 Gekwalificeerde Namen ]. Het is een vergissing om ofwel de standaard decimale-formaat of een decimaal-formaat met een bepaalde naam meer dan eens (zelfs met verschillende import voorrang) verklaren, tenzij het elke keer met dezelfde waarde voor alle attributen wordt verklaard (rekening houdend met eventuele standaard waarden).

    De andere attributen op xsl: decimaal-formaat komen overeen met de methoden van de JDK 1.1 DecimalFormatSymbols klasse. Voor elke krijg / zet methode paar is er een attribuut gedefinieerd voor de xsl: decimaal formaat element.

    De volgende attributen zowel de controle van de interpretatie van de personages in het formaat patroon en geef tekens die kunnen worden weergegeven in het resultaat van het formatteren van het nummer:

    decimaal-scheidingsteken specificeert het teken dat wordt gebruikt voor de decimale teken; de standaard waarde is het historische karakter (.)

    groepering-afscheider geeft het teken dat wordt gebruikt als een combinatie (bijv. duizenden) afscheider; de standaard waarde is de komma teken (.)

    procent geeft het teken dat wordt gebruikt als een procent teken; de standaard waarde is het percentage teken (%)

    per-mille geeft het teken dat wordt gebruikt als een per mille teken; de standaard waarde is de Unicode-per-mille teken (# x2030)

    zero-cijfer duidt het karakter als het cijfer nul; de standaard waarde is het cijfer nul (0)

    De volgende kenmerken regelen de interpretatie van tekens in de vorm patroon:

    cijfer duidt het teken dat wordt gebruikt voor een cijfer in het formaat patroon; de standaard waarde is het hekje (#) karakter

    patroon-afscheider geeft het teken dat wordt gebruikt om positieve en negatieve sub patronen in een patroon te scheiden; de standaard waarde is de puntkomma teken (;)

    De volgende kenmerken opgeven tekens of strings die kunnen worden weergegeven in het resultaat van het formatteren van het nummer:

    oneindigheid geeft de tekenreeks gebruikt om oneindig te vertegenwoordigen; de standaard waarde is de string Infinity

    NaN geeft de tekenreeks gebruikt om de waarde te vertegenwoordigen NaN; de standaard waarde is de string NaN

    min-teken geeft het teken dat wordt gebruikt als de standaard minteken; de standaard waarde is het koppelteken-min-teken (-. # X2D)

    12.4 Diversen Extra functies

    De actueel functie geeft een node-set die het huidige knooppunt als enige lid heeft. Voor een buitenste expressie (geen expressie die binnen een expressie), het huidige knooppunt is altijd hetzelfde als de context geleding. aldus

    betekent hetzelfde als

    Echter, tussen vierkante haakjes het huidige knooppunt is meestal verschillend van de context geleding. Bijvoorbeeld,

    zal alle post elementen die een woordenlijst bovenliggende element hebben en die een attribuut met een waarde gelijk aan de waarde van het huidige knooppunt ref attribuut te verwerken. Dit is anders dan

    die dezelfde als middelen

    en dus alle post elementen die een woordenlijst bovenliggende element en dat een naam attribuut en een ref attribuut met dezelfde waarde zou verwerken.

    Het is een vergissing om het te gebruiken actueel functie in een patroon.

    De ongeparseerde-entiteit-uri geeft de URI van de ontlede entiteit met de opgegeven naam in hetzelfde document als de context geleding (zie [3.3 ongeparseerde Entiteiten ]). Het geeft de lege string als er geen dergelijke entiteit.

    De genereren-id functie geeft een string die unieke identificatie van het knooppunt in het argument knooppunt-set die voor het eerst in document volgorde. De unieke ID moet bestaan ​​uit ASCII-alfanumerieke tekens en moet beginnen met een alfabetisch teken. Zo, de string is syntactisch een XML-naam. Een implementatie is vrij om een ​​identificatiecode op elke geschikte wijze reageren genereren die wordt gegenereerd steeds dezelfde identifier voor hetzelfde knooppunt en verschillende identificatoren worden altijd gegenereerd vanuit verschillende knooppunten. Een implementatie is niet verplicht om hetzelfde identifiers te genereren elke keer dat een document wordt omgezet. Er is geen garantie dat een gegenereerde unieke id onderscheiden zijn van een unieke ID’s opgegeven in het brondocument zal zijn. Als het argument knooppunt-set leeg is, wordt de lege tekenreeks geretourneerd. Als het argument wordt weggelaten, wordt standaard de context node.

    Het argument moet evalueren naar een string dat is een QName. De QName wordt uitgebreid tot een naam met de naamruimtedeclaraties in ruimte voor de expressie. De system-woning functie geeft een object dat de waarde van het onroerend goed systeem geïdentificeerd door de naam. Als er geen dergelijk systeem eigendom, moet de lege string worden geretourneerd.

    Implementaties moet het volgende systeem eigenschappen, die alle in de XSLT namespace zijn voorzien:

    • xsl: versie. een getal die de versie van XSLT uitgevoerd door de processor; voor XSLT processors uitvoering van de versie van XSLT door dit document, is het getal 1,0
    • xsl: vendor. een tekenreeks die de leverancier van de XSLT-processor
    • xsl: vendor-url. een string met daarin een URL identificeren van de leverancier van de XSLT-processor; meestal is dit de gastheer pagina (homepage) van de website van de leverancier.

    13 Berichten

    lt; – Categorie: instructie –gt;
    lt; xsl: message
    beëindigen = "Ja" | "Nee"gt;
    lt; – Inhoud: sjabloon –gt;
    lt; / xsl: messagegt;

    De xsl: message instructie verzendt een bericht op een manier die afhankelijk is van de XSLT processor. De inhoud van de xsl: message instructie is een sjabloon. De xsl: bericht wordt geconcretiseerd door het concretiseren van de inhoud van een XML-fragment te creëren. Dit XML fragment is de inhoud van het bericht.

    NOTITIE: Een XSLT-processor zou kunnen implementeren xsl: bericht door het opduiken een waarschuwingsvenster of door te schrijven naar een logbestand.

    Als het beëindigen attribuut de waarde ja. dan moet de XSLT-processor verwerking te beëindigen na het verzenden van het bericht. De standaardwaarde is nee.

    Een geschikte manier om lokalisatie doen is de gelokaliseerde gegevens (berichttekst, etc.) in een XML-document, dat een extra invoerbestand het stijlblad wordt gebracht. Bijvoorbeeld, veronderstel boodschappen voor een taal L opgeslagen in een XML-bestand resources / L .xml in de vorm:

    Dan zou een stylesheet de volgende aanpak gebruiken om berichten te lokaliseren:

    14 Extensions

    XSLT kunnen twee soorten uitbreiding, uitbreiding elementen en uitbreiding functies.

    Deze versie van XSLT biedt geen mechanisme voor het definiëren implementaties toestellen. Daarom kan een XSLT-stylesheet dat draagbare moet tussen XSLT implementaties geen beroep doen op bepaalde extensies beschikbaar zijn. XSLT voorziet in mechanismen die het mogelijk maken een XSLT-stylesheet om te bepalen of de XSLT processor waarmee het wordt verwerkt heeft implementaties van bepaalde extensies beschikbaar zijn, en om aan te geven wat er moet gebeuren als die extensies zijn niet beschikbaar. Als een XSLT stylesheet zorgvuldig gebruik van deze mechanismen, is het mogelijk dat zij gebruik maken van extensies en nog met enige XSLT implementatie.

    14.1 Uitbreiding Elements

    Het element extensie mechanisme maakt namespaces te worden aangewezen als extensie namespace s. Wanneer een naamruimte wordt aangeduid als uitbreiding naamruimte en een element met een naam die naamruimte optreedt in een sjabloon en het element wordt behandeld als een instructie plaats als gevolg letterlijke element. De naamruimte bepaalt de semantiek van de instructie.

    NOTITIE: Sinds een element dat een kind van een xsl: stylesheet element wordt niet optreedt in een sjabloon. non-XSLT top-level-elementen zijn niet extensie elementen zoals hier omschreven, en niets in deze sectie op hen van toepassing.

    Een namespace is aangewezen als een verlengstuk namespace met behulp van een extensie-element-voorvoegsels toe te schrijven aan een xsl: stylesheet element of een xsl: extensie-element-voorvoegsels toe te schrijven aan een letterlijke resultaat element of uitbreiding element. De waarde van deze beide eigenschappen is een door spaties gescheiden lijst van naamruimtevoorvoegsels. De naamruimte gebonden aan elk van de voorvoegsels wordt aangewezen als uitbreiding naamruimte. Het is een fout als er geen namespace gebonden aan het prefix op het element en die de extensie-element-voorvoegsels of xsl: extensie-element-voorvoegsels toe te schrijven. De standaard namespace (volgens opgave van xmlns) mag worden aangewezen als een verlengstuk namespace door het opnemen van #default in de lijst van naamruimtevoorvoegsels. De aanwijzing van een namespace als een verlengstuk namespace is effectief binnen de substructuur van de stylesheet geworteld in het element en die de extensie-element-voorvoegsels of xsl: extensie-element-voorvoegsels toe te schrijven; een substructuur geworteld in een xsl: stylesheet element bevat geen stylesheets door kinderen die xsl geïmporteerd of opgenomen: stylesheet element.

    Als de XSLT processor beschikt niet over een implementatie van een bepaalde extensie element beschikbaar is, dan is de element-beschikbaar false functie moet terugkeren naar de naam van het element. Wanneer een dergelijke verlengingselement wordt geïnstantieerd, wordt de XSLT processor moet uitvoeren voor de fallback element zoals gespecificeerd in [15 terugval ]. Een XSLT processor niet alleen een fout signaal omdat een matrijs een verlengelement waarvoor geen implementatie beschikbaar bevat.

    Als de XSLT processor een uitvoering van een bepaald aanbouwelement beschikbaar zijn, de element-beschikbaar functie moet true retourneren naar de naam van het element.

    14.2 Uitbreiding Functies

    Als een FunctionName in een FunctionCall expressie geen NCName (d.w.z. wanneer een dubbele punt bevat), dan wordt deze behandeld als een oproep naar een uitbreidingsfunctie. De FunctionName wordt uitgebreid met een naam met de naamruimtedeclaraties uit de evaluatie context.

    Als de XSLT processor geen een implementatie van een verlenging functie van een bepaalde naam beschikbaar zijn, de functie-beschikbaar functie moet valse terugkeren voor die naam. Als een dergelijke uitbreiding functie voorkomt in een expressie en de uitbreiding functie heet eigenlijk, moet de XSLT-processor een fout signaal. Een XSLT-processor mag geen fout alleen signaleren omdat een uitdrukking een verlenging functie waarvoor geen uitvoering is beschikbaar bevat.

    Als de XSLT processor een implementatie van een verlenging functie van een bepaalde naam beschikbaar zijn, de functie-beschikbaar functie moet true retourneren voor die naam. Als een dergelijke uitbreiding wordt genoemd, dan is de XSLT processor moet de uitvoering door te geven aan de functie-aanroep argumenten noemen; het resultaat geretourneerd door de implementatie wordt als resultaat van de functieaanroep.

    15 terugval

    lt; – Categorie: instructie –gt;
    lt; xsl: fallbackgt;
    lt; – Inhoud: sjabloon –gt;
    lt; / xsl: fallbackgt;

    Normaal gesproken instantiëren een xsl: fallback element doet niets. Indien echter XSLT processor is fallback voor een instructie element, als de instructie element een of meer XSL: fallback kinderen, kan het gehalte van elk van de xsl: fallback kinderen moet worden gestart in volgorde; anders is, moet er een fout worden gesignaleerd. De inhoud van een xsl: fallback element is een sjabloon.

    De volgende functies kunnen worden gebruikt met de xsl: kiezen en xsl: if instructies om expliciet te bepalen hoe een stylesheet moeten gedragen als bepaalde elementen of functies zijn niet beschikbaar.

    Het argument moet evalueren naar een string dat is een QName. De QName is uitgegroeid tot een uitgebreide-naam met de naamruimtedeclaraties in ruimte voor de expressie. De element-beschikbaar functie geeft true als en alleen als de uitgebreide-naam is de naam van een instructie. Als de uitgebreide-naam heeft een namespace URI gelijk is aan de XSLT namespace URI, dan verwijst het naar een element gedefinieerd door XSLT. Anders is een extensie element. Als de uitgebreide-naam heeft een ongeldige namespace URI, de element-beschikbaar functie zal return false.

    Functie:booleanfunctie-beschikbaar (draad )

    Het argument moet evalueren naar een string dat is een QName. De QName is uitgegroeid tot een uitgebreide-naam met de naamruimtedeclaraties in ruimte voor de expressie. De functie-beschikbaar functie geeft true als en alleen als de uitgebreide-naam is de naam van een functie in de functie bibliotheek. Als de uitgebreide-naam heeft een niet-null namespace URI, dan verwijst het naar een verlenging functie; anders, verwijst naar een functie die door XPath en XSLT.

    16 Output

    ! Lt; – Categorie: top-level-element –gt;
    lt; xsl: uitgang
    method = "xml" | "html" | "tekst" | qname-but-not-NCName
    version = NMTOKEN
    encoding = tekenreeks
    weglaten-xml-verklaring = "Ja" | "Nee"
    standalone = "Ja" | "Nee"
    doctype-public = tekenreeks
    doctype-systeem = tekenreeks
    CDATA-sectie-elementen = qnames
    streepje = "Ja" | "Nee"
    media-type = string / gt;

    Een XSLT processor de afdrukken het resultaat boom als een reeks bytes, hoewel het niet vereist is om dit te kunnen doen (zie [17 Overeenstemming ]). De xsl: uitgang element maakt het mogelijk stylesheet auteurs aan te geven hoe ze willen het resultaat boom te worden uitgevoerd. Als een XSLT processor het resultaat boom voert, moet zij dit doen, zoals gespecificeerd door de xsl: uitvoer element; het is echter niet vereist is.

    De xsl: uitgang element is alleen toegestaan ​​als een top-level-element.

    Werkwijze attribuut xsl: uitvoer identificeert de algemene werkwijze die moet worden gebruikt voor het uitvoeren van het resultaat boom. De waarde moet een QName zijn. Als de QName een voorvoegsel heeft, dan geeft het een methode die in dit document en moet een van xml zijn. html of tekst. Als de QName heeft een voorvoegsel, dan is de QName is uitgegroeid tot een uitgebreide-naam zoals beschreven in [2.4 Gekwalificeerde Namen ]; de uitgebreide-naam identificeert de uitgang methode; het gedrag in dit geval niet vermeld in dit document.

    De standaard werkwijze voor het kenmerk, wordt als volgt gekozen. Als

    het hoofdknooppunt van het resultaat boom heeft een element kind,

    de uitgebreide-naam van het eerste element kind van de root-knooppunt (dat wil zeggen het document-element) van het resultaat boom heeft lokale deel html (in elke combinatie van hoofdletters en kleine letters) en een null namespace URI, en

    elke tekstnodes voorafgaand aan het eerste element kind van de root node van het resultaat boom bevatten alleen witruimte karakters,

    dan is de standaard uitvoermethode is html; anders, de standaard uitvoermethode is xml. De standaard uitvoer methode moet worden gebruikt als er geen xsl: uitvoer elementen of indien geen van de xsl: overbrengingscomponenten een waarde voor de methode attribuut geeft.

    De andere attributen op xsl: output te leveren parameters voor de output-methode. De volgende attributen zijn toegestaan:

    versie specificeert de versie van de output-methode

    streepje geeft aan of de XSLT processor extra witruimte bij het uitvoeren van het resultaat boom kan toevoegen; de waarde moet worden ja of nee

    codering geeft de voorkeur karakter encodering dat de XSLT processor moet gebruiken om sequenties van karakters als sequenties van bytes coderen; de waarde van het attribuut moet hoofdletterongevoelig worden behandeld; de waarde mag alleen tekens in het bereik # x21 op # x7E (dat wil zeggen afdrukbare ASCII-tekens) bevatten; de waarde moet ofwel een charset geregistreerd bij de Internet Assigned Numbers Authority [IANA] be. [RFC2278] of beginnen X-

    media-type specificeert het mediatype (MIME content type) van de gegevens die het resultaat is van het uitvoeren van het resultaat boom; de parameter charset moet niet expliciet te worden vermeld; in plaats daarvan, toen de top-level media type is tekst. een charset parameter moet worden toegevoegd op basis van de daadwerkelijk door de output methode tekencodering

    doctype-systeem bepaalt het systeem identificator voor gebruik bij het documenttype verklaring

    doctype-openbare specificeert de public identifier te gebruiken in het documenttype verklaring

    weglaten-xml-verklaring geeft aan of de XSLT processor moet geven een XML-aangifte; de waarde moet worden ja of nee

    standalone geeft aan of de XSLT-processor moet de uitgang van een standalone document aangifte; de waarde moet worden ja of nee

    CDATA-sectie-elementen specificeert een lijst met de namen van de elementen waarvan de tekst knooppunt kinderen moeten uitvoer via CDATA secties

    De gedetailleerde semantiek van elk kenmerk wordt apart beschreven voor iedere uitgang methode waarvoor het van toepassing is. Als de semantiek van een attribuut niet beschreven voor een uitvoermethode, dan is het niet voor dat outputmethode.

    Een stylesheet kan meerdere xsl bevatten: uitgang elementen en kan bevatten, of stylesheets import die ook xsl bevatten: uitgang elementen. Alle xsl: uitvoer elementen die zich in een stylesheet worden samengevoegd tot één effectieve xsl: uitvoer element. Voor de CDATA-sectie-elementen toe te schrijven, de effectieve waarde is de vereniging van de opgegeven waarden. Voor andere attributen, de effectieve waarde is de opgegeven waarde met de hoogste invoer voorrang. Het is onjuist als er meer dan één waarde voor een kenmerk. Een XSLT-processor kan de fout te attenderen; als het niet de fout te signaleren, indien moet herstellen met behulp van de waarde die het laatst in de stylesheet optreedt. De waarden van attributen worden in gebreke na de xsl: uitgang elementen zijn samengevoegd; verschillende output methoden kunnen verschillende standaardwaarden hebben voor een attribuut.

    16.1 XML Output Method

    De xml uitvoermethode voert het resultaat boom als een well-formed XML externe algemeen ontleed entiteit. Als de wortel knooppunt van het resultaat boom heeft een enkel element knooppunt kind en geen tekst knooppunt kinderen, dan is de entiteit moet ook een well-formed XML document entiteit. Wanneer de entiteit wordt verwezen binnen een triviale XML-document wrapper als dit

    waar de entiteit-URI is een URI voor de entiteit, dan is de wrapper document als geheel moet een well-formed XML-document dat voldoet aan de XML Namespaces Aanbeveling [XML Names] be. Bovendien moet de uitgang zodanig dat als een nieuwe boom is geconstrueerd door het ontleden van de wikkel als een XML document als omschreven in [3 Data Model ]. en vervolgens het document element, waardoor de kinderen plaats daarvan kinderen van het hoofdknooppunt, dan is de nieuwe boom zou hetzelfde als gevolg boom zijn met de volgende uitzonderingen:

    De volgorde van kenmerken in de beide bomen verschillen.

    De nieuwe boom kan naamruimte knooppunten die niet in het resultaat boom aanwezig waren bevatten.

    NOTITIE: Een XSLT processor moet mogelijk naamruimtedeclaraties voegen tijdens het uitvoeren van het resultaat boom als XML.

    Als de XSLT processor genereerde een document type declaratie vanwege het doctype-systeem attribuut, dan is de bovenstaande eisen gelden voor de entiteit met de gegenereerde document soort verklaring verwijderd.

    De versie attribuut geeft XML-versie te gebruiken voor het uitvoeren van het resultaat boom. Als de XSLT processor deze versie van XML niet ondersteunt, moet een XML-versie die het ondersteunt gebruiken. De versie output in de XML-aangifte (als er een XML-declaratie is output) moet overeenkomen met de versie van XML dat de processor wordt gebruikt voor het uitvoeren van het resultaat boom. De waarde van de versie attribuut moet overeenkomen met de VersionNum productie van de XML Aanbeveling [XML]. De standaard waarde is 1,0.

    De codering attribuut geeft de gewenste codering te gebruiken voor het uitvoeren van het resultaat boom. XSLT processors zijn verplicht om waarden van UTF-8 en UTF-16 te respecteren. Voor andere waarden, als de XSLT processor de opgegeven codering niet ondersteunt, kan het een fout signaal; als het niet een fout maakt signaal moet het UTF-8 of UTF-16 te gebruiken. De XSLT processor moet een codering waarvan de naam niet overeenkomt met de EncName productie van de XML Aanbeveling [XML] niet gebruiken. Als er geen codering attribuut is opgegeven, dan is de XSLT processor dient ofwel UTF-8 of UTF-16 te gebruiken. Het is mogelijk dat het resultaat boom een ​​teken dat niet in de codering dat de XSLT processor gebruikt voor uitvoer kan worden weergegeven bevat. In dit geval, als het teken optreedt in een context waarin XML herkent karakterreferenties (d.w.z. in de waarde van een attribuut knooppunt of tekstknooppunt), dan dient het karakter uitgevoerd als een karakter referentie; anders (bijvoorbeeld indien het teken optreedt in de naam van een element) de XSLT processor moet een foutsignaal.

    Als het streepje attribuut de waarde ja. dan is de xml-uitgang methode kan uitgang witruimte naast de witruimte in het resultaat boom (eventueel gebaseerd op witruimte ontdaan van zowel het brondocument of de stylesheet) om het resultaat mooi inspringen; Als het streepje attribuut waarde niet. het moet niet worden uitgevoerd extra witruimte. De standaardwaarde is nee. De XML-uitvoer methode moet een algoritme output extra spaties die ervoor zorgt dat het resultaat gebruiken als spaties zou worden ontdaan van de uitvoer met de werkwijze beschreven in [3.4 Whitespace Strippen ] Met de set-witruimte behoud van elementen bestaande uit slechts xsl: tekst zou hetzelfde zijn als extra witruimte wordt uitgevoerd als wanneer extra witruimte wordt niet uitgevoerd.

    NOTITIE: Het is meestal niet veilig om streepje gebruiken ="Ja" met document types die types element met gemengde inhoud.

    De CDATA-sectie-elementen toe te schrijven bevat een door witruimte gescheiden lijst van QName s. Elke QName is uitgegroeid tot een uitgebreide-naam met de naamruimtedeclaraties in effect op de xsl: uitgang element waarin de QName optreedt; als er een standaardnaamruimte, wordt het gebruikt voor QName s die geen voorvoegsel hebben. De uitbreiding wordt uitgevoerd vóór de samenvoeging van meerdere xsl: uitgaande elementen in één effectieve xsl: uitvoer element. Als de uitgebreide-naam van de ouder van een tekst knooppunt is een lid van de lijst, dan is de tekst knooppunt moet uitgevoerd als een CDATA sectie zijn. Bijvoorbeeld,

    zou een letterlijke resultaat element geschreven in de stylesheet als veroorzaken

    output zijn als

    Als de tekst knooppunt bevat de reeks tekens]] gt ;. dan is het moment open CDATA sectie moet worden afgesloten na de]] en een nieuwe CDATA sectie geopend voordat de gt ;. Bijvoorbeeld, een letterlijke resultaat element geschreven in het stijlblad als

    zou zijn uitgevoerd als

    Als de tekst knooppunt een personage dat niet gerepresenteerd in de tekencodering wordt gebruikt om het resultaat boom, dan moet het geopende CDATA sectie voordat het teken gesloten bevat, moet het karakter uitvoer via een teken referentiepunt entiteit, en een nieuw CDATA sectie moeten worden geopend voor eventuele verdere tekens in de tekst node.

    CDATA secties mag niet worden gebruikt, behalve voor de tekst knooppunten dat de CDATA-sectie-elementen toe te schrijven expliciet aangeeft moeten worden uitgevoerd met behulp van CDATA secties.

    De xml-uitgang methode moet de uitgang van een XML-declaratie, tenzij het weglaten-xml-verklaring attribuut de waarde ja. De XML-aangifte moeten zowel de versie-informatie en een verklaring codering. Als de zelfstandige kenmerk is opgegeven, moet beschikken over een document op verklaring met dezelfde waarde als de waarde als de waarde van de zelfstandige attribuut. Anders zou het niet een stand-alone document verklaring op te nemen; dit zorgt ervoor dat het zowel een XML declaratie (toegelaten aan het begin van een document entiteit) en een tekstdeclaratie (toegelaten aan het begin van een externe entiteit algemeen ontleed).

    Als het doctype-systeem attribuut is opgegeven, de XML-uitvoer methode moet de uitgang van een document type declaratie direct voorafgaand aan het eerste element. De naam volgende lt;! DOCTYPE moet de naam van het eerste element. Als doctype-attribuut public ook is opgegeven, dan is de xml-uitgang methode moet uitgang PUBLIC gevolgd door het publiek identifier en vervolgens het systeem identifier; anders zou het uitvoersysteem gevolgd door het systeemidentificatie. De interne deelverzameling moet leeg zijn. De doctype-publiek attribuut dient te worden genegeerd, tenzij het doctype-systeem attribuut is gespecificeerd.

    De media-type attribuut is van toepassing voor de XML-uitvoer methode. De standaardwaarde voor de media-kenmerk type is text / xml.

    16.2 HTML Output Method

    De html uitvoermethode voert het resultaat boom als HTML; bijvoorbeeld,

    De versie kenmerk geeft de versie van de HTML. De standaardwaarde is 4.0. waarin wordt bepaald dat het resultaat uitvoer moet worden als HTML voldoet aan de HTML 4.0 Aanbeveling [HTML].

    De html-uitgang methode mag niet worden uitgevoerd een element anders dan de XML-uitvoer methode, tenzij de uitgebreide-naam van het element heeft een nul namespace URI; een element waarvan de uitgebreide-naam heeft een niet-null namespace URI moet uitgevoerd als XML zijn. Als de geëxpandeerde naam van het element een null naamruimte URI, maar het lokale gedeelte van de geëxpandeerde-name wordt niet herkend als de naam van een HTML-element, het element moet geven op dezelfde wijze als een niet-lege, inline element zoals overspanning.

    De html-uitgang methode moeten de namen van de HTML-elementen, ongeacht herkennen van de zaak. Bijvoorbeeld, elementen genaamd br. BR of Br moeten allemaal worden erkend als de HTML br element en output zonder een end-tag.

    De html-uitgang methode moet niet uitvoeren ontsnappen voor de inhoud van het script en de stijlelementen. Bijvoorbeeld, een letterlijke resultaat element geschreven in het stijlblad als

    moet worden uitgevoerd als

    De html-uitgang methode moet niet ontsnappen lt; karakters zich in attribuutwaarden.

    Als het streepje attribuut de waarde ja. dan is de html-uitgang methode kan toevoegen of verwijderen witruimte als het resultaat boom uitgangen, zolang het niet verandert hoe een HTML-user agent de output zou worden. De standaardwaarde is ja.

    De html-uitgang methode moet niet-ASCII-tekens in URI attribuutwaarden met behulp van de aanbevolen methode in paragraaf B.2.1 van de HTML 4.0 aanbeveling ontsnappen.

    De html-uitgang methode kan de uitgang van een karakter met behulp van een karakter entiteit referentie, als er een is gedefinieerd voor het in de versie van HTML die de output methode wordt gebruikt.

    De html-uitgang methode moet verwerken instructies te beëindigen gt; in plaats van gt?; .

    De html outputmethode moet geven boolean attributen (die attributen met slechts één toegestane waarde die gelijk is aan de naam van het attribuut) geminimaliseerd vorm. Bijvoorbeeld, een start-tag geschreven in het stijlblad als

    moet worden uitgevoerd als

    De html-uitgang methode moet niet ontsnappen aan een & karakter optreedt in een attribuutwaarde onmiddellijk gevolgd door een lt; karakter (zie paragraaf B.7.1 van de HTML 4.0 aanbeveling). Bijvoorbeeld, een start-tag geschreven in het stijlblad als

    moet worden uitgevoerd als

    De codering attribuut geeft de voorkeur codering te gebruiken. Als er een HEAD element, dan is de HTML-uitvoer methode moet een META element onmiddellijk na de start-tag van het HEAD element met vermelding van de tekencodering daadwerkelijk wordt gebruikt toe te voegen. Bijvoorbeeld,

    Het is mogelijk dat het resultaat boom een ​​teken dat niet in de codering dat de XSLT processor gebruikt voor uitvoer kan worden weergegeven bevat. In dit geval, als het teken optreedt in een context waarin HTML herkent karakter gevonden, dan moet het karakter uitgevoerd als een teken entiteitsreferentie of decimale numerieke verwijzing karakter; anders (bijvoorbeeld in een script of stijlelement of in een reactie), de XSLT processor moet een foutsignaal.

    Als het doctype-publieke of doctype-systeem attributen worden opgegeven, wordt de html-uitgang methode moet de uitgang van een document type declaratie direct voorafgaand aan het eerste element. De naam volgende lt;! DOCTYPE moet HTML of html. Als het doctype-attribuut public is opgegeven, dan is de output methode moet uitgang PUBLIC gevolgd door het opgegeven publiek identifier; Als het doctype-systeem attribuut ook wordt opgegeven, moet ook de uitvoer van het opgegeven systeem identifier na de openbare identifier. Als het doctype-systeem attribuut is gespecificeerd, maar het doctype-attribuut public niet is opgegeven, dan is de output methode moet Output System gevolgd door het opgegeven systeem identifier.

    De media-type attribuut is van toepassing voor de html-uitgang methode. De standaard waarde is text / html.

    16.3 Tekst Output Method

    De tekst uitvoermethode voert het resultaat boom door het uitvoeren van de string-waarde van elke tekst knooppunt in het resultaat boom in document volgorde zonder ontsnappen.

    De media-type attribuut is van toepassing voor de tekst uitvoermethode. De standaardwaarde voor de media-kenmerk type is text / plain.

    De codering kenmerk identificeert de codering die de tekstoutput methode moet gebruiken om tekenreeksen converteren naar reeksen bytes. De standaard is systeem-afhankelijk. Als het resultaat boom een ​​teken dat niet in de codering dat de XSLT processor gebruikt voor uitvoer worden voorgesteld bevat, moet de XSLT processor een foutsignaal.

    16.4 uitschakelen Output Ontsnapping

    Normaal gesproken is de xml uitvoermethode ontsnapt & en lt; (En eventueel andere tekens) bij het uitvoeren van tekstnodes. Dit zorgt ervoor dat de uitgang opgestelde XML. Het is echter soms handig kunnen output die bijna produceren, maar niet helemaal goed gevormde XML; bijvoorbeeld kan de productie inhouden slecht gevormde gedeelten die bedoeld zijn om in goed gevormde XML worden getransformeerd door een volgende niet-XML bekend proces. Daarom XSLT verschaft een mechanisme voor het uitschakelen uitvoer ontsnappen. Een xsl: value-of xsl: text element a-disable-uitgang ontsnapt attribuut kan hebben; de toegestane waarden zijn ja of nee; de standaard is nee; als de waarde ja. vervolgens een tekst knooppunt gegenereerd door het concretiseren van de xsl: value-of xsl: text element moet uitgang zonder ontsnappen zijn. Bijvoorbeeld,

    moet het één teken te genereren lt; .

    Er treedt een fout voor uitvoer ontsnapt te zijn uitgeschakeld voor tekstnode die wordt gebruikt voor iets anders dan een tekstnode in het resultaat boom. Het is dus een fout uitgang ontsnappen voor een XSL uitschakelen: value-of xsl: tekstelement dat wordt gebruikt om de string-waarde geplaatst, verwerkingsinstructie genereren of kenmerk knooppunt; het is ook een fout resultaat boom fragment converteren naar een getal of tekenreeks als het resultaat boom fragment bevat tekstnode die ontsnapt is uitgeschakeld. In beide gevallen kan een XSLT processor het foutsignaal; als het niet de fout signaal, moet het terug te krijgen door het negeren van de disable-uitgang-ontsnappen attribuut.

    De disable-uitgang-ontsnapt attribuut kan worden gebruikt met de html uitvoermethode alsook met de XML-uitvoer methode. De tekst uitgang methode negeert de disable-output ontsnappen attribuut, omdat het niet uitvoeren van alle uitvoer ontsnappen.

    Een XSLT-processor zal alleen in staat zijn om te schakelen uitgang ontsnappen indien zij bepaalt hoe het resultaat boom wordt uitgevoerd. Dit niet altijd het geval. Bijvoorbeeld kan het resultaat boom worden gebruikt als broncode voor een XSLT transformatie plaats van productie. Een XSLT-processor is niet verplicht om het uitschakelen van de uitgang ontsnappen ondersteunen. Als een xsl: value-of xsl: text geeft aan dat de output ontsnappen moeten worden uitgeschakeld en de XSLT processor ondersteunt dit niet, kan de XSLT-processor een fout signaal; als het niet een fout heeft signaleren, moet het terug te krijgen door het niet uitschakelen van de uitgang te ontsnappen.

    Als de uitvoer ontsnappen is uitgeschakeld voor een personage dat niet gerepresenteerd in de codering die de XSLT processor wordt gebruikt voor de output, dan kan de XSLT-processor een fout signaal; als het niet een fout heeft signaleren, moet het terug te krijgen door het niet uitschakelen van de uitgang te ontsnappen.

    Omdat het uitschakelen van de uitgang ontsnappen mogelijk niet met alle XSLT processors en kan resulteren in XML die niet goed gevormd, moet het alleen worden gebruikt als er geen alternatief is.

    17 Overeenstemming

    Een Conforme XSLT processor moet in staat zijn om een ​​stylesheet te gebruiken om een ​​source tree te zetten in een resultaat boom zoals gespecificeerd in dit document. Een conformerende XSLT processor hoeft niet in staat het uitvoeren van het resultaat in XML of in enige andere vorm.

    NOTITIE: Verkopers van XSLT processors worden sterk aangemoedigd om een ​​manier te bieden om te controleren of hun processor conformingly gedraagt ​​doordat het resultaat boom uitgevoerd als XML worden of door toegang tot het resultaat boom door middel van een standaard API zoals de DOM of SAX.

    Een Conforme XSLT processor moet eventuele fouten, behalve voor degenen die dit document specifiek een XSLT processor niet aan te geven maakt signaleren. Een conform XSLT processor kan, maar hoeft niet te herstellen van eventuele fouten die zij signaleert.

    Een conform XSLT processor kan grenzen aan de verwerking middelen verbruikt door de verwerking van een stylesheet op te leggen.

    18 Notation

    De specificatie van iedere XSLT gedefinieerde element type wordt voorafgegaan door een samenvatting van de syntax in de vorm van een model voor elementen van dat element type. De betekenis van samenvatting notatietatie is als volgt:

    Een kenmerk is vereist als en slechts als zijn naam is in het vet.

    De tekenreeks die optreedt in de plaats van een kenmerkwaarde specificeert de toegestane waarden van de attributen. Indien dit accolades, wordt de attribuutwaarde wordt behandeld als een attribuutwaarde template. en de band die binnen accolades specificeert de toegestane waarden van de resultaten van instantiëren de attribuutwaarde template. Alternatieve toegestane waarden worden gescheiden door |. Een tekenreeks tussen aanhalingstekens geeft een waarde die gelijk is aan die specifieke string. Een niet-beursgenoteerde, cursief naam specificeert een bepaald type van waarde.

    Als het element mag niet leeg te zijn, dan is het element bevat een commentaar opgeven van de toegestane inhoud. De toegestane inhoud is gespecificeerd op dezelfde manier om een ​​elementtype verklaring XML; sjabloon betekent dat elke combinatie van tekst nodes, letterlijke resultaat elementen, uitbreiding elementen en XSLT elementen uit de categorie instructie is toegestaan; top-level-elementen betekent dat elk mengsel van XSLT elementen uit de top-level-element is toegestaan.

    Het element wordt voorafgegaan door commentaar te geven of het behoort tot de categorie instructie of categorie top-level-element of beide. De categorie van een element onder invloed of het is toegestaan ​​de inhoud van elementen die toestaan sjabloon of top-level-elementen .

    Een Referenties

    A.1 Normatieve Referenties

    XML World Wide Web Consortium. Extensible Markup Language (XML) 1.0. W3C Aanbeveling. Zie http://www.w3.org/TR/1998/REC-xml-19980210 XML Names World Wide Web Consortium. Namespaces in XML. W3C Aanbeveling. Zie http://www.w3.org/TR/REC-xml-names XPath World Wide Web Consortium. XML Path Language. W3C Aanbeveling. Zie http://www.w3.org/TR/xpath

    A.2 Andere referenties

    CSS2 World Wide Web Consortium. Cascading Style Sheets, level 2 (CSS2). W3C Aanbeveling. Zie http://www.w3.org/TR/1998/REC-CSS2-19980512 DSSSL International Organization for Standardization, International Electrotechnical Commission. ISO / IEC 10179: 1996. Document Style Semantics en Specificatie Taal (DSSSL). Internationale standaard. HTML World Wide Web Consortium. HTML 4.0-specificatie. W3C Aanbeveling. Zie http://www.w3.org/TR/REC-html40 IANA Internet Assigned Numbers Authority. Character Sets. Zie ftp://ftp.isi.edu/in-notes/iana/assignments/character-sets. RFC2278 N. Freed, J. Postel. IANA Charset registratieprocedures. IETF RFC 2278. Zie http://www.ietf.org/rfc/rfc2278.txt. RFC2376 E. Whitehead, M. Murata. XML Media Types. IETF RFC 2376. Zie http://www.ietf.org/rfc/rfc2376.txt. RFC2396 T. Berners-Lee, R. Fielding en L. Masinter. Uniform Resource Identifiers (URI): Generic Syntax. IETF RFC 2396. Zie http://www.ietf.org/rfc/rfc2396.txt. UNICODE TR10 Unicode Consortium. Unicode Technical Report # 10. Unicode Collation Algorithm. Unicode Technical Report. Zie http://www.unicode.org/unicode/reports/tr10/index.html. XHTML World Wide Web Consortium. XHTML 1.0: The Extensible HyperText Markup Language. W3C voorgestelde aanbeveling. Zie http://www.w3.org/TR/xhtml1 XPointer World Wide Web Consortium. XML Pointer Language (XPointer). W3C Working Draft. Zie http://www.w3.org/TR/xptr XML-stylesheet World Wide Web Consortium. Associëren stylesheets met XML-documenten. W3C Aanbeveling. Zie http://www.w3.org/TR/xml-stylesheet XSL World Wide Web Consortium. Extensible Stylesheet Language (XSL). W3C Working Draft. Zie http://www.w3.org/TR/WD-xsl

    B Element Syntax Samenvatting

    lt; – Categorie: instructie –gt;
    lt; xsl: commentaar gt;
    lt; – Inhoud: sjabloon –gt;
    lt; / xsl: commentgt;

    lt; – Categorie: instructie –gt;
    lt; xsl: copy
    Gebruik-attribuut-sets = qnames gt;
    lt; – Inhoud: sjabloon –gt;
    lt; / xsl: copygt;

    ! Lt; – Categorie: top-level-element –gt;
    lt; xsl: decimaal-formaat
    name = qname
    decimaal-separator = char
    groepering-scheider = char
    infinity = tekenreeks
    min-teken = char
    NaN = tekenreeks
    procent = char
    per-mille = char
    zero-cijfer = char
    cijfer = char
    patroon-scheider = char / gt;

    lt; – Categorie: instructie –gt;
    lt; xsl: fallback gt;
    lt; – Inhoud: sjabloon –gt;
    lt; / xsl: fallbackgt;

    lt; – Categorie: instructie –gt;
    lt; xsl: if
    proef = Boolean-expressie gt;
    lt; – Inhoud: sjabloon –gt;
    lt; / xsl: ifgt;

    ! Lt; – Categorie: top-level-element –gt;
    lt; xsl: key
    naam = qname
    wedstrijd = patroon
    gebruiken = Expressie / gt;

    lt; – Categorie: instructie –gt;
    lt; xsl: message
    beëindigen = "Ja" | "Nee"gt;
    lt; – Inhoud: sjabloon –gt;
    lt; / xsl: messagegt;

    ! Lt; – Categorie: top-level-element –gt;
    lt; xsl: namespace-alias
    stylesheet-prefix = Prefix | "#standaard"
    resultaat-prefix = Prefix | "#standaard" / Gt;

    ! Lt; – Categorie: top-level-element –gt;
    lt; xsl: uitgang
    method = "xml" | "html" | "tekst" | qname-but-not-NCName
    version = NMTOKEN
    encoding = tekenreeks
    weglaten-xml-verklaring = "Ja" | "Nee"
    standalone = "Ja" | "Nee"
    doctype-public = tekenreeks
    doctype-systeem = tekenreeks
    CDATA-sectie-elementen = qnames
    streepje = "Ja" | "Nee"
    media-type = string / gt;

    ! Lt; – Categorie: top-level-element –gt;
    lt; xsl: param
    naam = qname
    select = expressie gt;
    lt; – Inhoud: sjabloon –gt;
    lt; / xsl: paramgt;

    lt; xsl: stylesheet
    id = id
    extensie-element-voorvoegsels = tokens
    exclusief-resultaat-voorvoegsels = tokens
    versie = aantal gt;
    ! Lt; – Inhoud: (xsl: import *, top-level-elementen) –gt;
    lt; / xsl: stylesheetgt;

    ! Lt; – Categorie: top-level-element –gt;
    lt; xsl: template
    match = patroon
    name = qname
    prioriteit = aantal
    mode = qname gt;
    ! Lt; – Inhoud: (xsl: param *, sjabloon) –gt;
    lt; / xsl: templategt;

    lt; – Categorie: instructie –gt;
    lt; xsl: text
    disable-output ontsnappen = "Ja" | "Nee"gt;
    ! Lt; – Inhoud: #PCDATA –gt;
    lt; / xsl: textgt;

    lt; xsl: transformeren
    id = id
    extensie-element-voorvoegsels = tokens
    exclusief-resultaat-voorvoegsels = tokens
    versie = aantal gt;
    ! Lt; – Inhoud: (xsl: import *, top-level-elementen) –gt;
    lt; / xsl: transformgt;

    lt; – Categorie: instructie –gt;
    lt; xsl: value-of
    kiezen = Reeksexpressie
    disable-output ontsnappen = "Ja" | "Nee" / Gt;

    ! Lt; – Categorie: top-level-element –gt;
    lt; – Categorie: instructie –gt;
    lt; xsl: variable
    naam = qname
    select = expressie gt;
    lt; – Inhoud: sjabloon –gt;
    lt; / xsl: variablegt;

    lt; xsl: wanneer
    proef = Boolean-expressie gt;
    lt; – Inhoud: sjabloon –gt;
    lt; / xsl: whengt;

    lt; xsl: with-param
    naam = qname
    select = expressie gt;
    lt; – Inhoud: sjabloon –gt;
    lt; / xsl: with-paramgt;

    C DTD Fragment voor XSLT Stylesheets (Niet-Normatief)

    NOTITIE: Deze DTD Fragment is niet maatgevend omdat XML 1.0 DTD’s ondersteunen geen XML-naamruimten en dus kan niet correct beschrijven de toegestane structuur van een XSLT-stylesheet.

    De volgende entiteit kan worden gebruikt om een ​​DTD voor XSLT stylesheets dat instanties van een bepaald resultaat DTD maken construeren. Alvorens te verwijzen naar de entiteit, moet de stylesheet DTD een resultaat-elementen parameter entiteit een opsomming van de toegestane types resultaat element te definiëren. Bijvoorbeeld:

    Een dergelijk resultaat elementen moeten worden verklaard xsl hebben: use-attribuut-sets en xsl: extensie-element-voorvoegsels attributen. De volgende entiteit verklaart het resultaat-element-atts parameter voor dit doel. De inhoud die XSLT maakt resultaat elementen is hetzelfde als het zorgt voor de XSLT elementen die in de volgende entiteit een inhoudsmodel% van template worden aangegeven ;. De DTD kan een restrictiever gehalte model dan% sjabloon te gebruiken; de beperkingen die het resultaat DTD weerspiegelen.

    De DTD kan de niet-XSL-top-level parameter entiteit te bepalen om extra top-level elementen uit andere landen dan de XSLT namespace namespaces mogelijk te maken.

    Het gebruik van de xsl: voorvoegsel in deze DTD impliceert niet dat XSLT stylesheets nodig zijn om dit voorvoegsel gebruiken. Elk van de in deze DTD aangegeven elementen kunnen attributen waarvan de naam begint met xmlns hebben: of gelijk aan xmlns naast de in deze DTD aangegeven kenmerken.

    D Voorbeelden (Niet-Normatief)

    D.1 Document Voorbeeld

    Dit voorbeeld is een stylesheet voor het transformeren van documenten die voldoen aan een eenvoudige DTD in XHTML [XHTML]. De DTD is:

    De stylesheet is:

    Met de volgende ingang document

    zou het volgende resultaat

    D.2 gegevens Voorbeeld

    Dit is een voorbeeld van het transformeren van bepaalde gegevens in XML weergegeven met behulp van drie verschillende XSLT stylesheets drie verschillende voorstellingen van de data, HTML, SVG en VRML produceren.

    De invoergegevens:

    De volgende stylesheet die de vereenvoudigde syntax beschreven gebruikt [2.3 Letterlijke Resultaat Element als stylesheet ]. transformeert de gegevens in HTML:

    De HTML-output is:

    De volgende stylesheet transformeert de gegevens in SVG:

    De SVG output is:

    De volgende stylesheet transformeert de gegevens in VRML:

    De VRML output is:

    E Dankwoord (Niet-Normatief)

    De volgende hebben bijgedragen aan deze ontwerp-authoring:

    • Daniel Lipkin, Saba
    • Jonathan Marsh, Microsoft
    • Henry Thompson, Universiteit van Edinburgh
    • Norman Walsh, Arbortext
    • Steve Zilles, Adobe

    Deze specificatie is ontwikkeld en goedgekeurd voor publicatie door de W3C XSL Working Group (WG). WG goedkeuring van deze specificatie betekent niet noodzakelijk dat alle WG-leden stemden voor de goedkeuring. De huidige leden van de XSL WG zijn:

    Sharon Adler, IBM (Co-voorzitter); Anders Berglund, IBM; Perin Blanchard, Novell; Scott Boag, Lotus; Larry Kabel, de zon; Jeff Caruso, Bitstream; James Clark; Peter Danielsen, Bell Labs; Don Day, IBM; Stephen deach, Adobe; Dwayne Dicks, SoftQuad; Andrew Greene, Bitstream; Paul Grosso, Arbortext; Eduardo Gutentag, Zon; Juliane Harbarth, Software AG; Mickey Kimchi, Enigma; Chris Lilley, W3C; Chris Maden, Voorbeeldige Technologies; Jonathan Marsh, Microsoft; Alex Miłowski, Lexica; Steve Muench, Oracle; Scott Parnell, Xerox; Vincent Quint, W3C; Dan Rapp, Novell; Gregg Reynolds, Datalogics; Jonathan Robie, Software AG; Mark Scardina, Oracle; Henry Thompson, Universiteit van Edinburgh; Philip Wadler, Bell Labs; Norman Walsh, Arbortext; Sanjiva Weerawarana, IBM; Steve Zilles, Adobe (Co-voorzitter)

    F Wijzigingen ten opzichte van voorgestelde aanbeveling (Niet-Normatief)

    De volgende zijn de veranderingen sinds de voorgestelde aanbeveling:

    De xsl: versie kenmerk is vereist op een letterlijke resultaat element gebruikt als een stylesheet (zie [2.3 Letterlijke Resultaat Element als stylesheet ]).

    De data-type attribuut xsl: kan soort een vooraf naam gebruiken om een ​​data-type die niet door XSLT gedefinieerd te geven (zie [10 sorteren ]).

    G Functies in aanmerking komen voor toekomstige versies van XSLT (Niet-Normatief)

    De volgende functies komen in aanmerking voor versies van XSLT na XSLT 1.0:

    een voorwaardelijke uitdrukking;

    ondersteuning voor XML Schema datatypes en archetypen;

    ondersteuning voor iets als stijlregels in het oorspronkelijke XSL indienen;

    een attribuut om de standaard namespace voor namen die zich in XSLT attributen te controleren;

    ondersteuning voor entiteit referenties;

    steun DTD in het gegevensmodel;

    steun notaties in het gegevensmodel;

    een manier om terug van een element naar de elementen die ernaar verwijzen (bijvoorbeeld door IDREF attributen);

    een eenvoudiger manier om een ​​ID of sleutel in een ander document te krijgen;

    ondersteuning voor reguliere expressies voor het matchen tegen een of meer van tekstknooppunten, attribuutwaarden, attribuutnamen, element type namen;

    normalisering snaren voor vergelijking, bijvoorbeeld voor compatibiliteit karakters;

    een functie tekenreeks resolve (knooppunt-set) functie die de waarde van het argument als een relatieve URI behandelt en verandert het in een absolute URI met behulp van de base URI van het knooppunt;

    Meerdere resultaat documenten;

    in gebreke de select attribuut op xsl: value-of om het huidige knooppunt;

    een attribuut op xsl: attribuut om te bepalen hoe het attribuut waarde is genormaliseerd;

    extra attributen op xsl: sort verdere controle over het sorteren, zoals de relatieve volgorde van scripts te bieden;

    een manier om de tekst van een middel geïdentificeerd door een URI in resultaat boom ondergebracht;

    toestaan ​​vakbonden in stappen (bijv. foo / (bar | baz));

    zorgen voor resultaat boom fragmenten alle operaties die zijn toegestaan ​​voor knooppunt-sets;

    een manier om de groep bij elkaar opeenvolgende nodes met dubbele subelementen of kenmerken;

    functies bij het verwerken van de HTML-stijl attribuut handiger.

    Bron: www.w3.org

    Geef een reactie

    Het e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

    elf + 6 =