Indice del libro

Obiettivi di apprendimento

  • Imparare diverse tecniche di implementazione di XLink in XML
  • Creare un XLink personalizzato
  • Apprendere la funzionalità dietro i vari parametri di XLink

Tramite l'utilizzo di Uniform Resource Identifier (URI), un XLink consente di inserire elementi in documenti XML che creano collegamenti tra risorse quali documenti, immagini, file e altre pagine. Un XLink è simile nel concetto a un collegamento ipertestuale HTML, ma è più potente e flessibile.

Questo modulo propone una panoramica generale della sintassi XLink. Fornisce anche l'esposizione di alcuni dei concetti base di XLink. Per la specifica XLink completa, vedere la versione più recente dello standard.[1]

XLink crea una relazione di collegamento tra due o più risorse. Consente di specificare qualsiasi elemento XML, immagine, testo o file di markup nel collegamento.

Utilizzando un metodo simile alla formattazione centralizzata dei fogli di stile XSL, XLink consente ai collegamenti ipertestuali di un documento di essere isolati e centralizzati in un documento separato. Quando gli indirizzi di un documento collegato cambiano, XLink rimane funzionante.

L'utilizzo di XLink richiede la dichiarazione del namespace XLink. Questo namespace fornisce gli attributi globali per type, href, role, arcrole, title, show, actuate, label, from e to. L'esempio seguente rendere disponibile il prefisso XLink all'interno dell'elemento tourGuide.

<tourGuide
  xmlns:xlink="http://www.w3.org/1999/xlink">
  ...
</tourGuide>
modifica

Nella tabella seguente vengono illustrati gli attributi che possono essere utilizzati con il namespace XLink. Gli attributi globali sono type, href, role, arcrole, title, show, actuate, label, from e to. La tabella include anche le descrizioni di come possono essere utilizzati gli attributi.

Attributi Descrizione e valori validi
type descrive il significato di un elemento
  • simple: formato di base, simile al collegamento HTML
  • extended: più complesso del type simple, con formato multifunzionale
  • resource: fornisce risorse locali
  • locator: fornisce risorse remote
  • arc: fornisce la possibilità di passare da una risorsa a un'altra
  • title: titolo leggibile o spiegazione del link
href localizzazione della risorsa
  • valore è URI
role descrizione del contenuto di XLink
  • il valore è l'URI
  • descrive l'elemento è il cui ruolo
arcrole descrizione del contenuto di XLink
  • il valore è l'URI
  • descrivere la relazione tra i due lati dell'arc
title nome visualizzato, in genere breve descrizione del collegamento
show descrive il comportamento del browser una volta che XLink è stato attuato e caricato
  • new: carica in una nuova finestra o cornice
  • replace: carica nella stessa finestra o cornice
  • embed: sostituisce l'elemento corrente
  • other: cerca informazioni altrove
  • none: non specificato
actuate specifica quando la risorsa viene recuperata o si verifica l'elaborazione del collegamento
  • onRequest: quando l'utente richiede il collegamento
  • onLoad: quando la pagina è caricata
  • other: cerca informazioni altrove
  • none: non specificato
label, from & to specifica la direzione del collegamento

Schema XML

modifica

Lo schema XML seguente definisce una guida turistica che contiene almeno una città. Ogni città contiene una o più attrazioni. Il nome di ogni attrazione è un XLink.

<?xml version="1.0" encoding="UTF-8"?>
<!--
      Document   : TourGuide.xsd
      Created on : February 28, 2006
      Author     : Billy Timmins
-->
<!--
      Dichiarazione di uso del Namespace xlink
-->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="unqualified"
            xmlns:xlink="http://www.w3.org/1999/xlink">  
    <xsd:element name="tourGuide">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="city" type="cityDetails" minOccurs="1" maxOccurs="unbounded" />
            </xsd:sequence>
        </xsd:complexType>
     </xsd:element>
     <!--
     Questa sezione conterrà i dettagli della città
     -->
     <xsd:complexType name="cityDetails">
         <xsd:sequence>
           <xsd:element name="cityName" type="xsd:string"/>
           <xsd:element name="adminUnit" type="xsd:string"/>
           <xsd:element name="country" type="xsd:string"/>
           <xsd:element name="continent">
                <xsd:simpleType>
                  <xsd:restriction base="xsd:string">
                  <xsd:enumeration value="Asia"/>
                  <xsd:enumeration value="Africa"/>
                  <xsd:enumeration value="Australia"/>
                  <xsd:enumeration value="Europe"/>
                  <xsd:enumeration value="North America"/>
                  <xsd:enumeration value="South America"/>
                  <xsd:enumeration value="Antarctica"/>
                  </xsd:restriction>
                </xsd:simpleType>
            </xsd:element>
            <xsd:element name="population" type="xsd:integer"/>
            <xsd:element name="description" type="xsd:string"/>
            <xsd:element name="attraction" type="attractionDetails" minOccurs="1" maxOccurs="unbounded"/>
         </xsd:sequence>
     </xsd:complexType>
     <xsd:complexType name="attractionDetails">
         <xsd:sequence>
         <!--   
         si noti l'uso di xlink
         -->
            <xsd:element name="attractionName" xlink:type="simple"/>
            <xsd:element name="attractionDescription" type="xsd:string"/>
            <xsd:element name="attractionRating" type="xsd:integer"/>
        </xsd:sequence>
     </xsd:complexType>
</xsd:schema>

Documento XML

modifica

Nel documento XML seguente viene illustrato il modo il XLink attractionName, definito nello schema XML, viene utilizzato in un documento XML. Si noti che è necessario includere xlink:href="" all'interno del tag per definire il sito web collegato.

<?xml version="1.0" encoding="UTF-8"?>
<!--
      Document   : SomeTourGuide.xml
      Created on : February 28, 2006
      Author     : Billy Timmins
-->
<!--
      dichiarazione di uso del namespace xlink
-->
<?xml-stylesheet href="TourGuide.xsl" type="text/xsl"?>
<tourGuide xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xlink="http://www.w3.org/1999/xlink" xsi:noNamespaceSchemaLocation="TourGuide.xsd">
    <city>
        <cityName>Atlanta</cityName>
        <adminUnit>Georgia</adminUnit>
        <country>USA</country>
        <continent>North America</continent>
        <population>425000</population>
        <description>Atlanta is the capital of and largest city in the U.S. state of Georgia.</description>
        <attraction>
            <!--
            dichiarazione di XLink e del link associato
            -->
            <attractionName xlink:href="http://www.georgiaaquarium.org/"> Georgia Aquarium </attractionName>
            <attractionDescription>World’s Largest Aquarium</attractionDescription>
            <attractionRating>5</attractionRating>
        </attraction>
        <attraction>
            <!--
            dichiarazione di XLink e del link associato
            -->
            <attractionName xlink:href="http://www.high.org/"> High Museum of Art </attractionName>
            <attractionDescription>The High Museum of Art, founded in 1905 as the Atlanta Art Association, is the leading art museum in the Southeastern United States.</attractionDescription>
            <attractionRating>4</attractionRating>
        </attraction>
        <attraction>
            <!--
            dichiarazione di XLink e del link associato
            -->
            <attractionName xlink:href="http://www.underground-atlanta.com/"> Underground Atlanta </attractionName>
            <attractionDescription> Go beneath the streets of a bustling downtown, to the heart of a great American city.  Underground Atlanta is at the center of it all.</attractionDescription>
            <attractionRating>2</attractionRating>
        </attraction>        
    </city>
    <city>
        <cityName>Tampa</cityName>
        <adminUnit>Florida</adminUnit>
        <country>USA</country>
        <continent>North America</continent>
        <population>303000</population>
        <description>Tampa is a major United States city located in Hillsborough County, on the west coast of Florida.</description>
        <attraction>
            <!--
            dichiarazione di XLink e del link associato
            -->
            <attractionName xlink:href="http://www.buschgardens.com/buschgardens/fla/default.aspx"> Bush Gardens </attractionName>
            <attractionDescription>The nation's fourth largest zoo, Bush Gardens is where you can see African animals roaming free and an exciting amusement park featuring its world-famous rides like Kumba and the new inverted roller-coaster, Montu.</attractionDescription>
            <attractionRating>5</attractionRating>
        </attraction>
        <attraction>
            <!--
            dichiarazione di XLink e del link associato
            -->
            <attractionName xlink:href="http://www.plantmuseum.com/"> Henry B. Plant Museum </attractionName>
            <attractionDescription>Discover a museum which transports you to turn-of-the-century Florida.</attractionDescription>
            <attractionRating>1</attractionRating>
        </attraction>      
    </city>
</tourGuide>

Foglio di stile XML

modifica

Il foglio di stile XML seguente visualizza il contenuto del documento XML.

<?xml version="1.0" encoding="UTF-8"?>
<!--
      Document   : TourGuide.xsl
      Created on : February 28, 2006
      Author     : Billy Timmins
-->
<!--
      dichiarazione dell'uso del Namespace XLink
-->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xlink="http://www.w3.org/1999/xlink" exclude-result-prefixes="xlink" version="1.0">
    <xsl:output method="html"/>
    <!--
    Attributo XLink definito come un href di tipo simple
    -->
    <xsl:template match="*[@xlink:type = 'simple' and @xlink:href]">
        <a href="{@xlink:href}">
            <xsl:apply-templates/>
        </a>
    </xsl:template>
    <xsl:template match="/">
        <html>
            <head>
                <title>Tour Guide XLink Example</title>
            </head>
            <body>
                <h2>Cities</h2>
                <xsl:apply-templates select="tourGuide"/>
            </body>
        </html>
    </xsl:template>
    <!-- 
    modello per la gestione di un link 
    -->
    <xsl:template match="attractionName">
        <a href="{@xlink:href}">
            <xsl:value-of select="."/>
        </a>
    </xsl:template>
    <xsl:template match="tourGuide">
        <table border="1" width="100%">
            <xsl:for-each select="city">
                <tr>
                    <td>
                        <br/>
                        <xsl:text>City: </xsl:text>
                        <xsl:value-of select="cityName"/>
                        <br/>
                        <xsl:text>County: </xsl:text>
                        <xsl:value-of select="adminUnit"/>
                        <br/>    
                        <xsl:text>Continent: </xsl:text>
                        <xsl:value-of select="continent"/>
                        <br/>
                        <xsl:text>Population: </xsl:text>
                        <xsl:value-of select="population"/>
                        <br/>
                        <xsl:text>Description: </xsl:text>
                        <xsl:value-of select="description"/>
                        <br/>              
                        <br/>
                    </td>
                </tr>
                <tr>
                    <td>
                        <xsl:text>Attraction: </xsl:text>
                    </td>
                    <td>
                        <xsl:text>Attraction Description: </xsl:text>
                    </td>
                    <td>
                        <xsl:text>Attraction Rating: </xsl:text>
                    </td>
                </tr>
                <xsl:for-each select="attraction">
                    <tr>
                        <td>
                            <!--
                            applicazione del modello
                            -->
                            <xsl:apply-templates select="attractionName"/>
                        </td>
                        <td>
                            <xsl:value-of select="attractionDescription"/>
                        </td>
                        <td>
                            <xsl:value-of select="attractionRating"/>
                        </td>
                    </tr>
                </xsl:for-each>
            </xsl:for-each>
        </table>
    </xsl:template>
</xsl:stylesheet>
  1. http://www.w3.org/TR/xlink