• Nenhum resultado encontrado

3.13. Οργάνωση στοιχείων: DTD και έγγραφα

3.13.1. Προδιαγραφές έγκρισης

Πολιτική οργάνωσης

Διευκρινισμένη στο επίπεδο DTD - εφαρμόσιμη σε όλα τα τμήματα όλων των τμημάτων της οργάνωσης.

1. Οι πληροφορίες για τα ονόματα των μελών οποιουδήποτε τμήματος σε οποιοδήποτε τμήμα είναι δημόσια προσιτές εκτός αν είναι αλλιώς δηλωμένες από τα συγκεκριμένα τμήματα.

<<Public,*,*>,dtd.xml:/division/about_div/member/name,read,+,loca l,->

2. Οι πληροφορίες για το όνομα των δημόσιων προγραμμάτων πρέπει να είναι δημόσια προσιτές.

<<Public,*,*>,dtd.xml:/division/res_activity/project[./@domain="p ublic"]/name,read,+,local,hard>

3. Οι πληροφορίες για την έκθεση των δημόσιων προγραμμάτων πρέπει να είναι δημόσια προσιτές.

<<Public,*,*>,dtd.xml:/division/res_activity/project[./@domain="p ublic"]/report,read,+,recursive,hard>

3.13.2. Πολιτική του τμήματος πληροφορικής

Διευκρινισμένο στο επίπεδο DTD και σε στιγμιαίο επίπεδο να συμπληρώσει ή να αγνοήσει την πολιτική της οργάνωσης.

4. Οι πληροφορίες για τα μέλη οποιουδήποτε τμήματος στο τμήμα είναι προσιτές σε όλα τα μέλη της οργάνωσης (ομάδα OrgMembers) εκτός αν έχει δηλωθεί διαφορετικά από την οργάνωση.

<<OrgMembers,*,*>,dtd.xml:/division/about_div/member,read,+,recur sive,soft>

5. Οι πληροφορίες για τα κεφάλαια οποιουδήποτε τμήματος είναι προσιτές μόνο στα μέλη της ομάδας Adminπου συνδέεται από το δίκτυο 145.*.

<<Admin,145.*,*>,dtd.xml:/division//fund,read,+,recursive,->

<<Public,*,*>,dtd.xml:/division//fund,read,-,recursive,->

6. Οι πληροφορίες για τα δημόσια σεμινάρια οποιουδήποτε τμήματος είναι δημόσια προσιτές.

<<Public,*,*>,dtd.xml:/division/seminar[./@category

="public"],read,+,recursive,->

7. Οι πληροφορίες για τα σεμινάρια του τμήματος ασφάλειας είναι προσιτές μόνο στους χρήστες που συνδέονται από το δίκτυο 145.*.

<<Public,145.100.*,*>,sec.xml:/division/seminar,read,+,recursive, -><<Public,*,*>,sec.xml:/division/seminar,read,-,recursive,->

8. Τα θέματα και η περιγραφή των ερευνητικών δραστηριοτήτων του τμήματος ασφάλειας είναι δημόσια προσιτά.

<<Public,*,*>,sec.xml:/division/res_activity/topic,read,+,recursi ve,->

<<Public,*,*>,sec.xml:/division/res_activity/description,read,+,r ecursive,->

9. Τα στοιχεία επαφής για το τμήμα ασφάλειας είναι δημόσια προσιτά εκτός αν έχει δηλωθεί διαφορετικά από την οργάνωση.

<<Public},*,*>,sec.xml:/division/about_div/contact,read,+,local,s oft>

10. Ο Bob δεν μπορεί να έχει πρόσβαση στις πληροφορίες για τα προγράμματα του τμήματος ασφάλειας.

<<Bob},*,*>,sec.xml:/division//project,read,-,recursive,->

11. Οι πληροφορίες για τα προγράμματα μπορούν να προσεγγιστούν από τα μέλη του τμήματος ασφάλειας όταν συνδέονται στην περιοχή *.com.

<<Security,*,*.com>,sec.xml:division//project,read,+,recursive,->

3.13.3. Μορφή εγγράφων

Επεξηγούμε τώρα ένα παράδειγμα της μορφής εγγράφων, ορατό σε έναν αιτούντα που υπακούει στις εγκρίσεις που διευκρινίζονται.

Θεωρούμε σαν ένα αίτημα να διαβαστεί το έγγραφο http://www.acme.com/sec.xml περιγράφοντας το τμήμα ασφάλειας (σχήμα.3.13.). Το αίτημα υποβάλλεται από τον χρήστη Bob, ο οποίος είναι μέλος της ομάδας ασφάλειας, που συνδέεται από τη μηχανή cslab.uniacme.edu με την IP 150.100.80.3.

Σύμφωνα με το επίπεδο DTD authorizations1 και 4, ο Bob μπορεί να έχει πρόσβαση στις πληροφορίες για τα μέλη του τμήματος. Σύμφωνα με την authorization10 επιπέδου εγγράφου, ο Bob δεν μπορεί να έχει πρόσβαση στις πληροφορίες για τα προγράμματα. Εντούτοις, για τα δημόσια προγράμματα, αυτή η άρνηση αγνοείται από τις σκληρές εξουσιοδοτήσεις 2 και 3 που δηλώνονται από την οργάνωση.

Τέλος, ο Bob δεν μπορεί να έχει πρόσβαση στις πληροφορίες σεμιναρίων, δεδομένου ότι αυτό είναι ορατό μόνο στις συνδέσεις από το δίκτυο 145.*

(authorizations7). Η τελική μορφή σχετικά με το έγγραφο στο σχήμα.3.12.

και σχετικά με τον Bob παρουσιάζεται στο σχήμα.3.13.

Σχήμα 3.13. : Ένα παράδειγμα της άποψης σχετικά με το έγγραφο στο σχήμα.3.12.

3.13.4. Συμπεράσματα παραδείγματος.

Έχουμε παρουσιάσει ένα σύστημα ελέγχου πρόσβασης που παρέχει υψηλού βαθμού έλεγχο πρόσβασης για τα έγγραφα XML.

Η προτεινόμενη προσέγγιση στρέφεται στην επιβολή και την επίλυση των λεπτομερών εγκρίσεων όσον αφορά το πρότυπο στοιχείων και της σημασιολογίας. Αν και παρουσιάζεται σε συνδυασμό με μια συγκεκριμένη προσέγγιση στην προδιαγραφή έγκρισης και τον προσδιορισμό θεμάτων, όπως υποστηρίζεται στο τρέχον πρωτότυπο, η λειτουργία της είναι ανεξάρτητη από τέτοιες προσεγγίσεις και θα μπορούσε να εφαρμοστεί σε συνδυασμό με τις διαφορετικές διαχειριστικές πολιτικές.

Για παράδειγμα, μπορεί να συνδυαστεί με την επεξεργασία των ρόλων 45 και των πιστοποιητικών επικύρωσης/έγκρισης 46.

(*Βλ. http://www9.org/w9cdrom/419/419.html)

45 R. S. Sandhu, E. J. Coyne, H. L. Feinstein, and C. E. Youman. Role-based access control models. IEEE Computer, 29(2):38-47,

Φεβρουαρίου 1996.

46 B. Gladman, C. Ellison, and N. Bohm. Digital signatures, certificates and electronic commerce.

http://www.clark.net/pub/cme/html/spki.html.

3.14. Κανόνες ελέγχου πρόσβασης

Το τμήμα ελέγχου πρόσβασης (Access Control) μας επιτρέπει να δημιουργήσουμε τους κανόνες που περιορίζουν ή επιτρέπουν την πρόσβαση στον καθολικό κεντρικό Server (Helix Universal Server).

Βασίζουμε αυτούς τους κανόνες στη διεύθυνση IP ή το host name (όνομα) της μηχανής απ’ όπου υποβάλλεται η αίτηση, και το σημεία (port) στον κεντρικό υπολογιστή στον οποίο το αίτημα υποβάλλεται.

Παρακάτω θα ρίξουμε μια πιο περιληπτική μάτια στον συντακτικό τομέα των κανόνων ελέγχου πρόσβασης :

3.14.1. Δείγμα ελέγχου πρόσβασης

Το ακόλουθο δείγμα υποθέτει ότι ο Administrator - διαχειριστής χρησιμοποιεί την πύλη 8888. Το παράδειγμα περιέχει δύο κανόνες. Ο πρώτος κανόνας επιτρέπει την πρόσβαση στη πύλη 8888, αλλά μόνο από το localhost. Ο δεύτερος κανόνας αρνείται την πρόσβαση στη πύλη 8888 από οπουδήποτε αλλού. Μαζί, αυτοί οι κανόνες περιορίζουν αποτελεσματικά την πρόσβαση στον Administrator από οπουδήποτε, εκτός από έναν browser που να βρίσκεται στο μηχάνημα που φιλοξενεί τον Server.

<!-- A C C E S S C O N T R O L -->

<List Name="AccessControl">

<List Name="100">

<Var Access="Allow"/>

<Var To="localhost"/>

<Var From="localhost"/>

<List Name="Ports">

<Var Port_1="8888"/>

</List>

</List>

<List Name="200">

<Var Access="Deny"/>

<Var To="Any"/>

<Var From="Any"/>

<List Name="Ports">

<Var Port_1="8888"/>

</List>

</List>

</List>

List: Access Control - Κατάλογος: Έλεγχος πρόσβασης

Η λίστα "AccessControl" περιέχει όλες τις πληροφορίες ελέγχου πρόσβασης:

<List Name="AccessControl">

...all access control information...

</List>

Χρησιμοποιoύμε έναν ονομασμένο κατάλογο με την ονομασία AccessControl στη ρίζα του τμήματος Access Control. Τοποθετούμε τα πρόσθετα στοιχεία καταλόγων (additional List) και τα VAR στοιχεία μεταξύ αυτών των ετικετών για να αρθρώσουμε τους κανόνες πρόσβασης.

Registry Value config.AccessControl

Παράδειγμα

<List Name="AccessControl"> ... </List>

List: Rule List

Ένας κατάλογος κανόνων (Rule List) δημιουργεί έναν κανόνα μέσα στην λίστα ελέγχου πρόσβασης:

<List Name="AccessControl">

<List Name="Rule List">

...variables that creates the rule...

</List>

</List>

Χρησιμοποιούμε έναν ονομασμένο κατάλογο (named list) με έναν μοναδικό ακέραιο αριθμό για να δημιουργήσουμε έναν κανόνα. Οι κανόνες περιλαμβάνουν τα στοιχεία List και Var που απαιτούνται για να αρθρώσουν κάθε μεμονωμένο κανόνα. Οκεντρικός Serverεπεξεργάζεται τους κανόνες με αριθμητική σειρά.

Ένας κανόνας ακέραιου αριθμού μπορεί να είναι οποιουδήποτε μήκους, αλλά τα RealNetworks συστήνουν περισσότερα από ένα ψηφία σε περίπτωση που πρέπει να προσθέσουμε περισσότερους κανόνες αργότερα. Με τα πολλαπλά ψηφία, οι νέοι κατάλογοι μπορούν να παρεμβληθούν μεταξύ των υπαρχόντων καταλόγων.

Ο κεντρικός Server ψάχνει τη λίστα κανόνων για να βρεθεί ο πρώτος κανόνας που ταιριάζει με τη διεύθυνση. Επειδή ο κεντρικός Server ψάχνει τη λίστα κανόνων με αριθμητική σειρά, κάνουμε τις ευρύτερες κατηγορίες μας πρώτα.

Registry Value

config.AccessControl.Rule List Παράδειγμα :

<List Name="100"> ... </List>

Μεταβλητή : Access

Χρησιμοποιούμε ¨ Access ¨ για να καθορίσουμε εάν ο κανόνας είναι ένας κανόνας που επιτρέπει ή που αρνείται.

Σύνταξη ετικετών Tag

<Var Access="value"/>

Πιθανές τιμές :

• επιτρέψτε

• αρνηθείτε Παράδειγμα :

<Var Access="deny"/>

Μεταβλητή : From

Χρησιμοποιώντας την μεταβλητή ¨ From ¨ θέτουμε τις διευθύνσεις ή την επιλογή διεύθυνσης για τον εκάστοτε χρήστη του υπολογιστή, του οποίου θέλουμε να περιορίσουμε την πρόσβαση. Για να διευκρινίσουμε μια σειρά διευθύνσεων IP, είτε τοποθετούμε μια άνω και κάτω τελεία μετά από τη διεύθυνση IP και δίνουμε την πλήρη μάσκα υποδικτύου (subnet mask ), είτε τοποθετούμε μία κάθετο (slash) μετά από τη διεύθυνση IP και δίνουμε τον αριθμό των bytesγια τη μάσκα υποδικτύου (subnet mask).

Παραδείγματος χάριν, τα εξής είναι ισοδύναμες τιμές που χρησιμοποιούν τη μεταβλητή From:

• 172.16.3.0: 255.255.255.0

• 172.16.3.0 /24

Και τα δύο παραδείγματα διευκρινίζουν τις διευθύνσεις από το 172.16.3.0 στο 172.16.3.254.

(Αυτό παρουσιάζεται ως διεύθυνση πελατών IP στον Administrator.)

Σύνταξη ετικετών - Tag Syntax

<Var From="string"/>

Πιθανές τιμές :

• Συγκεκριμένη διεύθυνση IP

• Σειρά των διευθύνσεων IP

• Οποιοιαδήποτε

Παράδειγμα :

<Var To="172.16.3.0/24"/>

Μεταβλητή : To

Χρησιμοποιείται για να θέσει τη διεύθυνση του Server ή της κάρτας δικτύων της φιλοξενώντας μηχανής (hosting machine).

Σύνταξη ετικετών : <Var To="string"/>

Πιθανές τιμές :

• Συγκεκριμένη διεύθυνση IP

• Οποιοιαδήποτε Παράδειγμα :

<Var To="Any"/>

Μεταβλητή : Transport

Χρησιμοποιούμε την Transport για να θέσουμε τη μέθοδο μετάδοσης που προσεγγίζεται.

Σύνταξη ετικεττών :

<Var Transport="TCP"/>

Πιθανές τιμές

• TCP

*Σημείωση: Το TCP είναι η μόνη επιλογή για αυτήν την μεταβλητή.

Παράδειγμα :

<Var Transport="TCP"/>

List: Ports

Χρησιμοποιούμε έναν κατάλογο ονομαζόμενο ¨ named Ports ¨ για να συνδέσουμε έναν κατάλογο σημείων εισόδου – ports, με έναν κανόνα:

<List Name="AccessControl">

<List Name="integer">

<List Name="Ports">

...variables that define a port...

</List>

</List>

</List>

Αξία εγγραφής :

config.AccessControl.[integer].ports

Παράδειγμα :

<List Name="Ports"> ... </List>

Μεταβλητή : Port_n

Χρησιμοποιούμε τη μεταβλητή Port_n που ταιριάζει με τους portαριθμούς που ο Server χρησιμοποιεί για χαρακτηριστικά γνωρίσματα που θέλουμε να ρυθμίσουμε την πρόσβαση. Παραδείγματος χάριν, εάν ο Server ρυθμίζεται για να χρησιμοποιήσει το σημείο εισόδου 554 για να αφουγκραστεί RTSP, και θέλουμε να ρυθμίσουμε την πρόσβαση σε RTSP, θα χρησιμοποιούσαμε την τιμή 554 για να προσθέσουμε το σημείο εισόδου RTSP στον κατάλογο σημείων εισόδου που ρυθμίζονται από αυτόν τον κανόνα.

Σύνταξη ετικεττών :

<Var Port_n="string"/>

*Σημείωση: Όπου το ν χρησιμοποιεί έναν μοναδικό ακέραιο αριθμό για κάθε μεταβλητή.

Πιθανές τιμές :

• Χρησιμοποιούμε αριθμούς σημείων εισόδου που ορίζονται στο χαρακτηριστικό γνώρισμα ή τα χαρακτηριστικά γνωρίσματα για τα οποία θέλουμε να ρυθμίσουμε την πρόσβαση.

Παράδειγμα :

<Var Port_1="8888"/>

(*Βλ.http://service.real.com/help/library/guides/helixserverconfig/htmfiles/access_c.

html)

Π Α Ρ Α Ρ Τ Η Μ Α – Γ Λ Ω Σ Σ Α Ρ Ι

Authentication : (Επικύρωση) Στους όρους Ιστού: η μέθοδος που χρησιμοποιείται για να ελέγξει την ταυτότητα ενός χρήστη, ενός προγράμματος ή ενός υπολογιστή στον Ιστό.

DOM : είναι ένα προκαθορισμένο σύνολο λειτουργιών για τη διαχείριση αρχείων XML (και HTML) από μία γλώσσα προγραμματισμού.

DTD (Document Type Definition) : (DTD ορισμός τύπου εγγράφου) Ένα σύνολο κανόνων (μια γλώσσα) για τον καθορισμό των νομικών δομικών μονάδων ενός εγγράφου Ιστού όπως το HTML ή XML. Τα DTD αναφέρονται και σαν λεξικά (dictionaries), επειδή ορίζουν ένα κοινό σύνολο από δομημένα στοιχεία και ιδιότητες.

Μπορούμε να χρησιμοποιήσουμε ένα DTD για να ορίσουμε ότι ένα XML έγγραφο να μπορεί να περιέχει μόνο δεδομένα χαρακτήρων. Μπορούμε να συμπεριλάβουμε το κείμενο ενός DTD μέσα στο XML έγγραφο (inline DTD), κάτι που είναι χρήσιμο όταν δεν πρόκειται να εφαρμόσουμε αυτό το DTD και σ' άλλα XML έγγραφα, ή μπορούμε να αποθηκεύσουμε το κείμενο ενός DTD σαν ένα εξωτερικό αρχείο (external DTD) και να αναφερθούμε σ' αυτό μέσα από ένα XML έγγραφο.

Encryption : (Κρυπτογράφηση) Χρησιμοποιείται για να μετατρέψει τα στοιχεία από την αρχική μορφή τους σε μια μορφή που μπορεί μόνο να διαβαστεί από κάποιον που μπορεί να αντιστρέψει την κρυπτογράφηση.

Ο σκοπός της κρυπτογράφησης είναι να αποτραπεί η αναρμόδια ανάγνωση των στοιχείων.

IP Address (Internet Protocol Address) : (Διεύθυνση IP -διεύθυνση πρωτοκόλλου Διαδικτύου) Ένας μοναδικός αριθμός που προσδιορίζει κάθε υπολογιστή στο διαδίκτυο (όπως το 197.123.22.240)

IP Number (Internet Protocol Number) : (Αριθμός IP) Αριθμός πρωτοκόλλου Διαδικτύου. Όπως διεύθυνση IP.

Markup language : Markup γλώσσα είναι ένας μηχανισμός που καθορίζει δομές σε ένα έγγραφο.

Metalanguage : Είναι μια γλώσσα που χρησιμοποιείται για να καθορίσει νέες markup γλώσσες.

MySQL : Ελεύθερο ανοικτό λογισμικό βάσεων δεδομένων πηγής που χρησιμοποιείται συχνά στον Ιστό.

PHP (PHP: Hypertext Preprocessor) : Μια τεχνολογία που επιτρέπει την εισαγωγή των εκτελέσιμων χειρογράφων κεντρικών υπολογιστών ιστοσελίδας. Συνήθως για το Unix, τις πλατφόρμες Linux και Solaris.

RDF : (Resource Description Framework) Σκελετός Περιγραφής Πόρων του W3C, είναι μία μορφή κειμένου XML η οποία υποστηρίζει περιγραφή πόρων και εφαρμογές μεταδεδομένων, όπως οι κατάλογοι μουσικής, οι συλλογές φωτογραφιών και οι βιβλιογραφίες.

SAML : (security access markup language based on XML) Μarkup γλώσσα πρόσβασης ασφαλείας, βασισμένη στην XML.

Schema : Μια διάταξη (schema) είναι μια δήλωση που περιέχει κανόνες επικύρωσης (validation rules) για να μπορέσουμε να περιορίσουμε τις τιμές δεδομένων XML.

SOAP : (Simple Object Access Protocol) Απλό πρωτόκολλο πρόσβασης αντικειμένου.

Static IP (address) : (Στατική IP διεύθυνση) Μια διεύθυνση IP που είναι η ίδια που συνδέεται κάθε φορά με το Διαδίκτυο.

TCP/IP (Transmission Control Protocol / Internet Protocol) : (πρωτόκολλο ελέγχου μετάδοσης/πρωτόκολλο Διαδικτύου) Μια συλλογή των πρωτοκόλλων επικοινωνίας Διαδικτύου μεταξύ δύο υπολογιστών. Το πρωτόκολλο TCP είναι αρμόδιο για μια ελεύθερη σύνδεση λάθους μεταξύ δύο υπολογιστών, ενώ το πρωτόκολλο IP είναι αρμόδιο για τα πακέτα στοιχείων που στέλνονται πέρα από το δίκτυο.

UDDI : (Universal Description, Discovery and Integration) Καθολική περιγραφή, ανακάλυψη και ολοκλήρωση.

W3C : World Wide Web Consortium, διεθνής οργανισμός.

WSDL : (Web Services Description Language) Γλώσσα περιγραφής υπηρεσιών Ιστού.

XML (Extensible Markup Language) : (XML επεκτάσιμη γλώσσα σήμανσης) Μια απλουστευμένη έκδοση του SGML που σχεδιάζεται ειδικά για τα έγγραφα Ιστού, που αναπτύσσονται για από W3C.

XML Document : (Έγγραφο XML) Ένα έγγραφο που γράφεται σε XML.

XML DOM (XML Document Object Model) : Μια διεπαφή προγραμματισμού για τα έγγραφα XML που αναπτύσσονται από W3C.

XML Schema : Ένα έγγραφο που περιγράφει, με έναν επίσημο τρόπο, τα στοιχεία σύνταξης και τις παραμέτρους μιας γλώσσας Ιστού.

Σχεδιασμένος από το W3C για να αντικαταστήσει τη DTD.

XSD (XML Schema Definition) : XSD (καθορισμός σχημάτων XML) Όπως το XML Schema παραπάνω.

XSL : είναι προηγμένη γλώσσα (advanced language) μορφοποίησης σελίδων. Βασίζεται στο XSLT, μία γλώσσα μετασχηματισμού η οποία χρησιμοποιείται για την αναδιάταξη, την πρόσθεση και την διαγραφή ετικετών και γνωρισμάτων.

Η Λ Ε Κ Τ Ρ Ο Ν Ι Κ Η “ Β Ι Β Λ Ι Ο Γ Ρ Α Φ Ι Α ”

• http://www.sitepoint.com/article/really-good-introduction-xml

• http://www.it.uom.gr/project/xml/Home%20Page.html

• Copyright © 1999-2002 W3C ( MIT, INRIA, Keio).

http://www.w3c.gr/office/docs/XML10points.el.html

• http://www.sitepoint.com/article/really-good-introduction-xml

• http://www.w3schools.com/xml/xml_whatis.asp

• http://dide.flo.sch.gr/Plinet/Tutorials/Tutorials-XML.html

• http://www.sitepoint.com/article/really-good-introduction-xml

• http://www.w3schools.com/PHP /PHP _intro.asp

• http://xprofile.berlios.de/

• http://www.thehfe.com/glossary.html

• http://en.wikipedia.org/wiki/Profile#Computing

• http://en.wikipedia.org/wiki/User_account

• http://www.windowsitlibrary.com/Content/509/05/1.html#1

• http://en.wikipedia.org/wiki/User_interface

• http://www.cilea.it/GARR-NIR/nir-it-95/atti/giannini/giannini/node5.html

• Notes - Registration and User Profiles - Access Management System http://www.projectliberty.org/

• http://drupal.org/profile

• http://docs.rinet.ru:8083/PublicPauk/ch28.htm#WhatDoAccessControl andAuthenticatio

• http://i2.sitepoint.com/graphics/sessions-flowchart

• http://www.microsoft.com/windows2000/en/server/iis.htm/core/iiacnsc1

• http://www.microsoft.com/windows2000/en/server/iis/htm/core/iiacns c.htm#overviewaccess

• http://service.real.com/help/library/guides/helixserverconfig/htmfiles/

access_c.html

• http://www.meryl.net/blog/archives/000199.php

• http://www.webreference.com/js/column96

• http://www.w3.org/DesignIssues/WebServices.html

• http://www.developerfusion.co.uk/show/3451 Introduction by Bruce Johnson on Web Services

• http://swiki.dlese.org/nsdl2003/33.print Authentication, Trust & Standards

• http://www.w3schools.com/webservices/ws_intro.asp

• http://www.ariadne.ac.uk/issue29/gardner/intro.html Article Title: "An Introduction to Web Services"

Author: Tracy Gardner, Publ. Date: 02/10/2001, Publ.: Ariadne Issue 29

Αναφορές

• World Wide Web Consortium (W3C). Extensible Stylesheet Language (XSL) Specification, Απριλίου 1999.

http://www.w3.org/TR/WD-xsl.

• World Wide Web Consortium (W3C). Resource Description Framework (RDF) Model and Syntax Specification, Φεβρουαρίου 1999.

http://www.w3.org/TR/REC-rdf-syntax.

• T.F. Lunt. Access Control Policies for Database Systems. In C.E.

Landwehr, editor, Database Security, II: Status and Prospects, pages 41-52. North-Holland, Amsterdam, 1989.

S. Castano, M.G. Fugini, G. Martella, and P. Samarati. Database Security.

Addison-Wesley, 1995.

• T. Berners-Lee, R. Fielding, και L. Masinter.

Uniform Resource Identifiers (URI): Generic Syntax, 1998.

http://www.isi.edu/in-notes/rfc2396.txt.

• World Wide Web Consortium (W3C). XML Path Language (XPath), Νοεμβρίου 1999.

http://www.w3.org/TR/xpath.

• E. Damiani, S. De Capitani di Vimercati, S. Paraboschi, and P.

Samarati. Securing XML documents. In Proc. of the 2000 International

Conference on Extending Database Technology (EDBT2000), Konstanz, Γερμανία, Μαρτίου 2000.

• S. Jajodia, P. Samarati, V.S. Subramanian, and E. Bertino. A Unified Framework for Enforcing Multiple Access Control Policies. In Proc. of the 1997 ACM International SIGMOD Conference on Management of Data, Tucson, AZ, Μαΐου 1997.

• World Wide Web Consortium (W3C). Document Object Model (DOM) Level 2 Specification Version 1.0, Σχέδιο εργασίας Σεπτεμβρίου 1999.

http://www.w3.org/TR/WD-DOM-Level-2

• S. Ceri, S. Comai, E. Damiani, P. Fraternali, S. Paraboschi, and L.

Tanca.

XML-GL: A graphical language for querying and restructuring XML documents. In Proc. of the 8th Int. Conference on the World Wide Web, Toronto, Μαΐου 1999.

• F. Buschmann, R. Meunier, H. Rohnert, P. Sommerlad, and M. Stal.

Pattern-Oriented Software Architecture - A System of Patterns.

Wiley and Sons Ltd., 1996.

• World Wide Web Consortium (W3C). Document Object Model (DOM) Level 1 Specification Version 1.0, Οκτωβρίου 1998.

http://www.w3.org/TR/REC-DOM-Level-1

• AlphaWorks. XML Security Suite, Απριλίου 1999.

http://www.alphaWorks.ibm.com/tech/xmlsecuritysuite.

• S. Mazzocchi. Cocoon User Manual.

• J. Kahan. WDAI: A simple World Wide Web distributed Authorization infrastructure. In Proc. of the 8th Int. World Wide Web Conference, Μαΐου 1999.

• S. Lewontin and M.E. Zurko. The DCE project: Providing authorizations and other distributed services to the world-wide web. In Proc. of the 2nd World Wide Web Conference, Οκτωβρίου 1994.

http://www.ncsa.uiuc.edu/SDG/IT94/Proceedings/Security/lewo ntin/Web_DCE_Conf_94.html.

• P. Samarati, E. Bertino, and S. Jajodia. An Authorization Model for a Distributed Hypertext System. IEEE Transactions on Knowledge and Data Engineering, 8(4):555-562, Αυγούστου 1996.

• R. S. Sandhu, E. J. Coyne, H. L. Feinstein, and C. E. Youman. Role- based access control models. IEEE Computer, 29(2):38-47,

Φεβρουαρίου 1996.

• B. Gladman, C. Ellison, and N. Bohm. Digital signatures, certificates and electronic commerce.

http://www.clark.net/pub/cme/html/spki.html.

Χ Ρ Η Σ Ι Μ Ο Π Ο Ι Η Θ Ε Ν Τ Α S I T E S :

http://www.google.com

http://www.sitepoint.com

http://www.it.uom.gr

http://www.w3c.gr

http://www.w3schools.com

http://xprofile.berlios.de

http://www.thehfe.com/glossary.htm

http://www.wikipedia.org

http://www.windowsitlibrary.com

http://www.projectliberty.org

http://www.drupal.org

http://www.microsoft.com

http://www.ncsa.uiuc.edu

http://www.clark.net

ΠΑΡΑΡΤΗΜΑ ΠΤΥΧΙΑΚΗΣ ΕΡΓΑΣΙΑΣ ΑΡΓΥΡΟΥ ΔΙΟΝΥΣΙΟΥ (ΑΜ.401)

Η ΤΕΧΝΟΛΟΓΙΑ XML

ΚΕΝΤΡΟ ΠΛΗ.ΝΕ.Τ. Ν. ΦΛΩΡΙΝΑΣ

Παράδειγμα 1 - Εισαγωγή στην XML

Για να δημιουργήσουμε ένα XML έγγραφο, μπορούμε να χρησιμοποιήσουμε έναν απλό επεξεργαστή κειμένου σε μορφή ASCII, όπως είναι το Σημειωματάριο (Notepad) των Windows, και να το αποθηκεύσουμε με την επέκταση .xml. Τα αρχικά XML σημαίνουν eXtensible Markup Language, δηλ. Εκτεταμένη Γλώσσα Σήμανσης. Η πρώτη εντολή που πρέπει να γράψουμε για να δημιουργήσουμε ένα XML έγγραφο είναι η εξής :

<?xml version="1.0"?>

Όλα τα XML έγγραφα πρέπει να έχουν τα εξής χαρακτηριστικά :

Να ορίζουν τα δεδομένα με μια δομημένη μορφή, σύμφωνα με το εξής στυλ : <tag> δεδομένα </tag>.

Να έχουν επέκταση αρχείου .xml.

Να μπορούν να δημιουργηθούν μ' έναν κειμενογράφο ή μ' έναν XML επεξεργαστή.

Να μεταφέρονται από τον Web server στον Web client μέσω του πρωτοκόλλου HTTP.

Να αποτελούν απαραίτητο στοιχείο μιας XML εφαρμογής, η οποία περιλαμβάνει επιπλέον ένα προαιρετικό DTD, έναν XML αναλυτή (parser) και μια λογική παρουσίασης/επεξεργασίας.

Το πρώτο μας XML έγγραφο είναι το εξής :

<?xml version="1.0"?>

<GREETING>

Hallo from Florina

</GREETING>

Περιέχει ένα XML στοιχείο με μια ετικέτα αρχής και μια ετικέτα τέλους και ένα κείμενο σαν περιεχόμενο. Η ιδιότητα version δηλώνει την έκδοση (τυποποίηση) της XML που χρησιμοποιούμε, που εδώ είναι η 1.0.

Παράδειγμα 2 - Πιστοποίηση ενός XML Εγγράφου

Για να ελέγξουμε αν ένα XML έγγραφο έχει συντακτικά λάθη, χρησιμοποιούμε έναν XML αναλυτή (parser). Υπάρχουν οι αναλυτές επικύρωσης, οι οποίοι ελέγχουν την σύνταξη των XML εγγράφων και επιβεβαιώνουν ότι τα XML δεδομένα ταιριάζουν με τους κανόνες επικύρωσης των DTD (Document Type Definition) εγγράφων, και οι αναλυτές μη επικύρωσης, οι οποίοι ελέγχουν την σύνταξη των XML εγγράφων αλλά δεν επιβεβαιώνουν τα XML έγγραφα με τα DTD έγγραφα ή τις διατάξεις.

Αν ένα XML έγγραφο είναι σωστά γραμμένο, θα εμφανισθεί στο παράθυρο του φυλλομετρητή, κατά κανόνα του Internet Explorer καθώς ο Netscape Navigator δεν παρέχει ακόμη πλήρη υποστήριξη για την XML. Υπάρχει ο XML αναλυτής (parser) επικύρωσης MSXML, που είναι ενσωματωμένος στον Internet Explorer 5.0, και ο οποίος εμφανίζει το XML έγγραφο, αν αυτό είναι σωστό και δεν έχει συντακτικά λάθη. Για να εμφανίσουμε τα δεδομένα της XML με μια ωραία μορφή, δηλ. χωρίς τις ετικέτες (tags), πρέπει να δημιουργήσουμε έναν XML επεξεργαστή που να περιγράφει αναλυτικά την εμφάνιση των δεδομένων.

Ο Internet Explorer 5.0 αναγνωρίζει την επέκταση .xml και ο ενσωματωμένος αναλυτής MSXML ξέρει πώς να μεταφράσει και να εμφανίσει ένα σωστό XML έγγραφο. Εκτός από τον MSXML αναλυτή, που υπάρχει ενσωματωμένος στον Internet Explorer 5.0, μπορούμε να συνδεθούμε από το Internet με τον δικτυακό τόπο ενός άλλου αναλυτή ή να τον φορτώσουμε σαν πρόγραμμα στον δίσκο μας και σ' ένα πεδίο κειμένου να γράψουμε το όνομα του XML αρχείου που θέλουμε να επικυρώσουμε. Κάνουμε κλικ σ' ένα πλήκτρο εντολής με ετικέτα Validate και ο αναλυτής θα επιστρέψει τα λάθη του XML αρχείου, αν φυσικά υπάρχουν.

Παράδειγμα 3 - Ενας Απλός XML Επεξεργαστής

Για να μπορέσουμε να επεξεργαστούμε τα δεδομένα ενός XML εγγράφου, πρέπει να δημιουργήσουμε έναν XML επεξεργαστή, δηλ. έναν κώδικα που μπορεί να προσπελάσει, να χειριστεί και να εμφανίσει τα XML δεδομένα. Υπάρχουν οι εξής τέσσερις κατηγορίες XML επεξεργαστών :

Διαδοχικά Φύλλα Στυλ (Cascading Style Sheets).

XSL (eXtensible Style Sheet Language) Φύλλα Στυλ.

Νησίδες Δεδομένων (Data Islands) με Script.

Μοντέλο Δεδομένων με Script ή Client Side Προγράμματα.

Τα παραπάνω θα τα δούμε αναλυτικότερα στην πορεία και προς το παρόν θα δούμε πώς μπορούμε να δημιουργήσουμε ένα απλό φύλλο στυλ (CSS) και πώς να το συνδέσουμε μ' ένα XML έγγραφο. Τα διαδοχικά φύλλα στυλ (CSS) είναι ο πιο απλός και με περιορισμένες δυνατότητες XML επεξεργαστής που μπορούμε να δημιουργήσουμε.

Σ' έναν επεξεργαστή κειμένου όπως το Notepad, γράφουμε το παρακάτω κείμενο και το αποθηκεύουμε με όνομα style.css :

GREETING {

display: block;

color: blue }

Το παραπάνω στυλ θα εφαρμοσθεί σ' ένα XML στοιχείο που ονομάζεται GREETING. Δημιουργούμε κι ένα XML έγγραφο που θέλουμε να εμφανίσουμε χρησιμοποιώντας κανόνες φύλλων στυλ, ως εξής :

<?xml version="1.0"?>

<?xml-stylesheet type="text/css" href="style.css"?>

<GREETING>

Hallo from Florina

</GREETING>

Προσθέσαμε μια εντολή φύλλου στυλ στο XML έγγραφο, όπου καθορίζουμε το αρχείο φύλλου στυλ που θέλουμε να χρησιμοποιήσουμε για να εφαρμοσθεί στα XML δεδομένα. Αν ανοίξουμε τώρα το XML έγγραφο με τον Internet Explorer, θα δούμε τα XML δεδομένα χωρίς τις ετικέτες (tags) και με το χρώμα κειμένου και τα άλλα χαρακτηριστικά που έχουμε καθορίσει στο αρχείο φύλλου στυλ.

Παράδειγμα 4 - Η XML Δήλωση

Υπάρχει ένα ειδικό είδος εντολής επεξεργασίας που ονομάζεται XML δήλωση και πρέπει να αποτελεί την πρώτη γραμμή σ' ένα XML έγγραφο. Η σύνταξή της είναι ως εξής :

<?xml version="versionNumber"

[encoding="encodingValue"]

[standalone="yes | no"]?>

Το versionNumber είναι ο αριθμός της XML προδιαγραφής που πρέπει να ακολουθεί το XML έγγραφο που θα δημιουργήσουμε, το encodingValue είναι μια προαιρετική τιμή που δηλώνει το σύνολο χαρακτήρων Unicode του κειμένου του XML εγγράφου, με προεπιλογή την UTF-8 (αμερικανικά αγγλικά) και η προαιρετική ιδιότητα standalone παίρνει μόνο μία από τις τιμές yes ή no, ανάλογα με το αν το XML έγγραφο δεν εξαρτάται από άλλα XML έγγραφα για να είναι έγκυρο ή όχι, αντίστοιχα. Η εξ ορισμού τιμή είναι yes, δηλ. το XML έγγραφο δεν εξαρτάται από άλλα XML έγγραφα.

Παράδειγμα 5 - Το Στοιχείο Ρίζα (Root Element)

Κάθε έγκυρο XML έγγραφο πρέπει να έχει ένα και μόνο ένα στοιχείο ρίζα (root element), το οποίο περιέχει (περικλείει) όλα τα άλλα στοιχεία του εγγράφου. Το στοιχείο ρίζα βρίσκεται στην κορυφή της ιεραρχίας των δεδομένων ενός XML εγγράφου και λογικά και συντακτικά.

Η δήλωση ενός στοιχείου ρίζα πρέπει να εμφανίζεται μετά από την XML δήλωση αλλά πριν από άλλες δηλώσεις στοιχείων. Πρέπει να έχουμε υπόψη μας ότι η XML ξεχωρίζει τα πεζά από τα κεφαλαία γράμματα και οι ετικέτες αρχής και τέλους πρέπει να ταιριάζουν απόλυτα.

<?xml version="1.0"?>

<Florina>

<!- - Δηλώσεις άλλων στοιχείων - ->

</Florina>

Παράδειγμα 6 - Τα Σχόλια (Comments) στην XML

Είδαμε στο προηγούμενο παράδειγμα πώς μπορούμε να γράψουμε σχόλια (comments) σ' ένα XML έγγραφο. Η XML θεωρεί σαν σχόλιο ο,τιδήποτε υπάρχει ανάμεσα στα σύμβολα <!- - και - ->. Πρέπει να έχουμε υπόψη μας ότι τα σχόλια πρέπει να γράφονται μετά από την XML δήλωση, δεν μπορούν να τοποθετηθούν μέσα σε XML κωδικούς και δεν μπορούν να είναι ένθετα.

Παράδειγμα 7 - Δηλώσεις Αλλων Στοιχείων Δεδομένων

Για να περιγράψουμε την δομή των στοιχείων δεδομένων στην XML, πρέπει να τοποθετήσουμε ένθετα στοιχεία μέσα σ' άλλα στοιχεία. Ολα τα στοιχεία δεδομένων πρέπει να περιέχονται μέσα στο στοιχείο ρίζας του εγγράφου. Η σύνταξη για την δήλωση στοιχείων δεδομένων που δεν είναι ρίζα είναι η εξής :

<element1 [attribute]>

[<element2 [attribute]>

</element2>]

</element1>

Το element1 είναι το στοιχείο δεδομένων που περιέχει ένα ή περισσότερα άλλα στοιχεία δεδομένων και το προαιρετικό element2 είναι ένα στοιχείο δεδομένων που περιέχεται μέσα σ' ένα άλλο στοιχείο δεδομένων. Το attribute (ιδιότητα) είναι προαιρετικό και είναι ένα σύνολο από ζευγάρια ονομάτων και τιμών που καθορίζουν τις συγκεκριμένες ιδιότητες ενός στοιχείου. Δεν πρέπει να υπάρχουν κενά μέσα στο όνομα ενός στοιχείου δεδομένων.

Ακολουθεί ένα παράδειγμα.

<?xml version="1.0"?>

<Nomos_Florinas>

<Eparxia_Florinas>

<Prespes> Λίμνη Μικρή Πρέσπα </Prespes>

<Small_Prespes> Αγιος Αχίλλειος </Small_Prespes>

<Prespes> Λίμνη Μεγάλη Πρέσπα </Prespes>

</Eparxia_Florinas>

<Eparxia_Amyntaiou>

<Nymfeo> Αρκτούρος </Nymfeo>

<Nymfeo> Νίκειος Σχολή </Nymfeo>

</Eparxia_Amyntaiou>

</Nomos_Florinas>

Παράδειγμα 8 - Οι Ιδιότητες (Attributes) των Στοιχείων

Μπορούμε να δηλώσουμε μια ιδιότητα (attribute) στην ετικέτα αρχής ενός στοιχείου για να το κάνουμε να ξεχωρίζει από άλλα στοιχεία δεδομένων με το ίδιο όνομα, με την εξής σύνταξη :

<elementName

[attributeName1="attribute1Value"]

[attributeName2="attribute2Value"]

...

[attributeNameN="attributeNValue"]> elementValue </elementName>

Τα ονόματα των ιδιοτήτων πρέπει να ξεκινούν μ' ένα γράμμα ή με τον χαρακτήρα _ και μπορούν να περιέχουν γράμματα, ψηφία και τους χαρακτήρες _, - και τελεία (.). Οι τιμές των ιδιοτήτων πρέπει να περικλείονται σε μονά ή διπλά εισαγωγικά και μπορούν να περιέχουν οποιαδήποτε δεδομένα χαρακτήρων.

Ακολουθεί ένα παράδειγμα.

<?xml version="1.0"?>

<Florinas_Products>

<product name="sweet" code="100"> Γλυκά κουταλιού </product>

</Florinas_Products>

Παράδειγμα 9 - Οι Προκαθορισμένες Οντότητες

Για να μπορέσουμε να ορίσουμε δεδομένα σ' ένα XML έγγραφο που να περιέχουν ειδικούς χαρακτήρες, όπως είναι οι <, >, & ', και ", η XML ορίζει προκαθορισμένες οντότητες (predefined entities) για να τους διαφοροποιήσει από τους ίδιους χαρακτήρες που έχουν ειδική σημασία στην XML.

Η XML υποστηρίζει τις εξής πέντε προκαθορισμένες οντότητες :

&lt; = <

&gt; = >

&amp; = &

&apos; = '

&quot; = "

Ακολουθεί ένα παράδειγμα.

<saler name="James &amp; Johnson"> </saler>

Παράδειγμα 10 - Ειδικές Εντολές Επεξεργασίας

Μπορούμε να περάσουμε ειδικές εντολές επεξεργασίας μιας εφαρμογής από ένα XML έγγραφο σ' έναν XML επεξεργαστή, χρησιμοποιώντας μια δομή που ονομάζεται εντολή επεξεργασίας και που έχει την εξής σύνταξη :

<?εφαρμογή παράμετροι?>

Για παράδειγμα, το

<?xml-stylesheet type="text/xsl" href="prog01.xsl"?>

καλεί μια λειτουργική μονάδα που παρέχει υποστήριξη για την XSL.

Οι εντολές επεξεργασίας γράφονται μετά την XML δήλωση.

Παράδειγμα 11 - Μη Τυπικό Κείμενο

Είδαμε προηγουμένως πώς μπορούμε να συμπεριλάβουμε σ' ένα XML έγγραφο ειδικούς χαρακτήρες, όπως είναι οι < και >. Αν, όμως, πρέπει να συμπεριλάβουμε έναν μεγάλο αριθμό από ειδικούς χαρακτήρες, είναι προτιμότερο να χρησιμοποιήσουμε την ενότητα CDATA που έχει σχεδιαστεί ειδικά γι' αυτήν την χρήση.

Η ευκολία με την ενότητα CDATA είναι ότι μπορούμε να έχουμε ένα μεγάλο κομμάτι κειμένου που να περιέχει πολλούς ειδικούς χαρακτήρες μέσα σ' ένα XML έγγραφο, χωρίς να χρειάζεται να αντικαθιστούμε τον κάθε ειδικό χαρακτήρα με μια αναφορά οντότητας.

Η σύνταξη της ενότητα CDATA είναι η εξής :

<![CDATA[ ... κείμενο ... ]]>

Το κείμενο μπορεί να περιέχει ό,τι χαρακτήρες θέλουμε και δεν ελέγχεται από τον XML αναλυτή.

Παράδειγμα 12 - Δήλωση ενός Εσωτερικού (Inline) DTD

Μπορούμε να ορίσουμε ειδικούς τύπους δεδομένων για κάθε στοιχείο ενός XML εγγράφου, χρησιμοποιώντας έναν ορισμό τύπου εγγράφου, που καλείται Document Type Definition (DTD). Τα DTD αναφέρονται και σαν λεξικά (dictionaries), επειδή ορίζουν ένα κοινό σύνολο από δομημένα στοιχεία και ιδιότητες.

Για παράδειγμα, μπορούμε να χρησιμοποιήσουμε ένα DTD για να ορίσουμε ότι ένα XML έγγραφο να μπορεί να περιέχει μόνο δεδομένα χαρακτήρων. Μπορούμε να συμπεριλάβουμε το κείμενο ενός DTD μέσα στο XML έγγραφο (inline DTD), κάτι που είναι χρήσιμο όταν δεν πρόκειται να εφαρμόσουμε αυτό το DTD και σ' άλλα XML έγγραφα, ή μπορούμε να αποθηκεύσουμε το κείμενο ενός DTD σαν ένα εξωτερικό αρχείο (external DTD) και να αναφερθούμε σ' αυτό μέσα από ένα XML έγγραφο.

Για να δημιουργήσουμε ένα εσωτερικό (inline) DTD χρησιμοποιούμε την εξής σύνταξη :

<!DOCTYPE rootElement [ κανόνεςDTD

]>

Το rootElement είναι το στοιχείο ρίζα του XML εγγράφου στο οποίο συμπεριλαμβάνεται το DTD και οι κανόνεςDTD είναι κάποιες XML εντολές που ορίζουν DTD κανόνες για ξεχωριστά στοιχεία μέσα στο στοιχείο ρίζα. Η δήλωση ενός εσωτερικού DTD γράφεται μετά από την XML δήλωση και πριν από την δήλωση του στοιχείου ρίζα.

Στο παρακάτω παράδειγμα χρησιμοποιούμε την λέξη κλειδί #PCDATA για να δηλώσουμε ότι το στοιχείο ρίζα Florina πρέπει να περιέχει μόνο χαρακτήρες.

<?xml version="1.0"?>

<!DOCTYPE Florina [

<!ELEMENT Florina (#PCDATA)>

]>

<Florina>

Hallo from Florina!

</Florina>

Ολα τα στοιχεία ενός XML εγγράφου πρέπει να σχετίζονται με μια αντίστοιχη DTD δήλωση. Η δήλωση του παραπάνω στοιχείου στο DTD περιγράφει τον κανόνα επικύρωσης που ισχύει γι' αυτό το στοιχείο. Για να δηλώσουμε τον τύπο ενός XML στοιχείου, μπορούμε να χρησιμοποιήσουμε κάποιο από τα εξής :

(#PCDATA), ένας μόνο χαρακτήρας.

(#PCDATA)*, κανένας ή περισσότεροι χαρακτήρες.

(element01), μία επανάληψη του στοιχείου element01.

(element01+), μία ή περισσότερες επαναλήψεις του στοιχείου element01.

(element01?), καμία ή περισσότερες επαναλήψεις του στοιχείου element01.

(element01, element02), μία επανάληψη καθενός από τα στοιχεία element01 και element02.

(element01 | element02), μία επανάληψη ενός από τα στοιχεία element01 ή element02.

(#PCDATA | element01)*, είτε μία επανάληψη του στοιχείου element01 ή πολλοί χαρακτήρες.

EMPTY, κενό, χωρίς περιεχόμενο.

ANY, οποιοδήποτε περιεχόμενο.

Παράδειγμα 13 - Δήλωση ενός Εξωτερικού (External) DTD

Αν θέλουμε να εφαρμόσουμε ένα DTD σε πολλά XML έγγραφα, θα πρέπει να το αποθηκεύσουμε σαν ένα ξεχωριστό, εξωτερικό αρχείο και να αναφερόμαστε σ' αυτό μέσα από ένα XML έγγραφο με την δήλωση DOCTYPE σε συνδυασμό με την λέξη κλειδί SYSTEM. Έτσι, πολλά XML έγγραφα μπορούν να αναφέρονται στο ίδιο DTD αρχείο, χωρίς να χρειάζεται να κάνουμε αντιγραφή των ίδιων κανόνων επικύρωσης.

Η σύνταξη για να αναφερθούμε σ' ένα εξωτερικό (external) DTD αρχείο είναι η εξής :

<!DOCTYPE rootElement SYSTEM "αρχείοdtd">

Το rootElement είναι το στοιχείο ρίζα του XML εγγράφου στο οποίο εφαρμόζεται το εξωτερικό DTD αρχείο και το αρχείοdtd είναι το όνομα του εξωτερικού DTD αρχείου. Συμβατικά, όλα τα DTD αρχεία έχουν επέκταση .dtd.

<?xml version="1.0"?>

<!DOCTYPE Florina SYSTEM "file01.dtd">

<Florina>

Hallo from Florina!

</Florina>

Αν το DTD αρχείο βρίσκεται σ' έναν άλλον φάκελο, πρέπει να χρησιμοποιήσουμε μια δήλωση σαν την εξής :

<!DOCTYPE Florina SYSTEM "/DTDfiles/file01.dtd">

Μπορούμε να προσθέσουμε και σχόλια (comments) σ' ένα DTD αρχείο, ως εξής :

<!- - ... κείμενο σχολίου ... - ->

Παράδειγμα 14 - Δήλωση ενός Στοιχείου Container

Τα container είναι στοιχεία που αποτελούνται πλήρως από άλλα προκαθορισμένα στοιχεία. Η σύνταξη για να δημιουργήσουμε ένα στοιχείο container είναι η εξής :

<!ELEMENT στοιχείοContainer (περιεχόμενοΣτοιχείο1,

περιεχόμενοΣτοιχείο2 ...)>

Οι δηλώσεις των ιδιοτήτων μπορεί να έχουν τις εξής προκαθορισμένες τιμές :

#REQUIRED, η ιδιότητα πρέπει να έχει μια τιμή.

#IMPLIED, η ιδιότητα δεν είναι απαραίτητο να έχει μια τιμή.

"τιμή", προεπιλεγμένη τιμή.

#FIXED "τιμή", σταθερή τιμή.

Παράδειγμα 15 - Δήλωση ενός Υποχρεωτικού Στοιχείου

Μπορούμε να δημιουργήσουμε έναν κανόνα επικύρωσης για να βεβαιωθούμε ότι ένα συγκεκριμένο στοιχείο σχετίζεται με μία μόνο τιμή. Ακολουθεί ένα παράδειγμα :

<!ELEMENT product (name, price, stock, quantity)>

Τα περιεχόμενα στοιχεία μπορούν να έχουν τις εξής μορφές :

element, πρέπει να υπάρχει μία μόνο τιμή γι' αυτό το στοιχείο.

element+, μπορούν να υπάρχουν μία ή περισσότερες τιμές γι' αυτό το στοιχείο.

element*, μπορούν να υπάρχουν καμία ή περισσότερες τιμές γι' αυτό το στοιχείο.

Ακολουθούν παραδείγματα :

<!ELEMENT customer (order)>

<!ELEMENT customer (order+)>

<!ELEMENT customer (order*)>

Παράδειγμα 16 - Δήλωση ενός Προαιρετικού Στοιχείου

Μπορούμε να δηλώσουμε ένα προαιρετικό στοιχείο χρησιμοποιώντας τον χαρακτήρα ? και μπορούμε να δηλώσουμε ένα στοιχείο container που να περιέχει και υποχρεωτικά και προαιρετικά στοιχεία. Ακολουθεί ένα παράδειγμα.

<!ELEMENT customer (order+, name, address*, phone?)>

Παράδειγμα 17 - Δήλωση Ιδιοτήτων

Μπορούμε να δηλώσουμε έναν κανόνα επικύρωσης που να ορίζει ότι η ιδιότητα ενός XML στοιχείου μπορεί να περιέχει μόνο χαρακτήρες. Προς τον σκοπό αυτό χρησιμοποιούμε την λέξη κλειδί CDATA και η σύνταξη για να δηλώσουμε μια ιδιότητα (attribute) ενός XML στοιχείου (element) είναι η εξής :

<!ATTLIST όνομα_στοιχείου όνομα_ιδιότητας CDATA (#REQUIRED |

#IMPLIED)>

Το όνομα_στοιχείου που υπάρχει μετά από την λέξη κλειδί ATTLIST πρέπει να ταιριάζει με το όνομα ενός στοιχείου που έχει ορισθεί προηγουμένως και έτσι αποτελεί καλή πρακτική να δηλώνουμε την λίστα των ιδιοτήτων ενός στοιχείου αμέσως μετά την δήλωση του στοιχείου.

Το επόμενο παράδειγμα ορίζει μια λίστα ιδιοτήτων για ένα XML στοιχείο με όνομα car, όπου η ιδιότητα color είναι υποχρεωτική, ενώ η ιδιότητα length είναι προαιρετική. Και οι δύο ιδιότητες περιορίζονται σε χαρακτήρες δεδομένων.

<!ATTLIST car color CDATA #REQUIRED length CDATA #IMPLIED>

Παράδειγμα 18 - Ορισμός Οντοτήτων

Μπορούμε να χρησιμοποιήσουμε την λέξη κλειδί ENTITY για να περιορίσουμε την τιμή μιας ιδιότητας ενός XML στοιχείου σ' ένα εξωτερικό αρχείο δεδομένων.

Την ώρα της εκτέλεσης, οι μόνοι τύποι δεδομένων που επιτρέπονται για ένα στοιχείο που έχει δηλωθεί σαν ENTITY είναι αυτοί που έχουν ορισθεί στο αρχείο DTD με την δήλωση <!ENTITY>. Η σύνταξη για να δηλώσουμε μια οντότητα είναι η εξής :

<!ATTLIST όνομα_στοιχείου όνομα_ιδιότητας ENTITY (#REQUIRED |

#IMPLIED)>

Η λέξη κλειδί ENTITY δηλώνει μια εξωτερική πηγή δεδομένων. Ακολουθεί ένα παράδειγμα, όπου σ' ένα DTD αρχείο ορίζουμε μια οντότητα με όνομα PIC1, που είναι ένα αρχείο εικόνας gif, και την ιδιότητα image που σχετίζεται με το αυτοκίνητο σαν οντότητα :

<!ENTITY PIC1 SYSTEM "car01.gif" NDATA GIF>

<!ATTLIST car image ENTITY #IMPLIED>

Μέσα στο XML έγγραφο ορίζουμε το στοιχείο και την ιδιότητά του :

<car image="PIC1">

Παράδειγμα 19 - Η Λέξη Κλειδί NMTOKEN

Μπορούμε να χρησιμοποιήσουμε την λέξη κλειδί NMTOKEN για να περιορίσουμε την τιμή της ιδιότητας ενός XML στοιχείου μ' ένα μόνο διακριτικό (token). Για να περιορίσουμε την τιμή σ' ένα σύνολο από ξεχωριστά διακριτικά, μπορούμε να χρησιμοποιήσουμε την λέξη κλειδί NMTOKENS. Η σύνταξη είναι η εξής :

<!ATTLIST όνομα_στοιχείου όνομα_ιδιότητας NMTOKEN (#REQUIRED

| #IMPLIED)>

Η λέξη κλειδί NMTOKEN ξεχωρίζει τα πεζά από τα κεφαλαία γράμματα και η τιμή της ιδιότητας στην οποία αναφέρεται πρέπει να είναι μία μόνο λέξη και χωρίς κενά. Ακολουθεί ένα παράδειγμα.

<!ELEMENT car (make, capacity)>

<!ATTLIST car plate_number NMTOKEN #REQUIRED>

Παράδειγμα 20 - Τιμές Ιδιοτήτων από Λίστα Επιλογής

Μπορούμε να ορίσουμε έναν κανόνα επικύρωσης για να περιορίσουμε την τιμή μιας ιδιότητας της XML σε μια λίστα που περιέχει έτοιμες επιλογές. Η σύνταξη για να δηλώσουμε μια λίστα επιλογής για μια XML ιδιότητα είναι η εξής :

<!ATTLIST όνομα_στοιχείου όνομα_ιδιότητας (επιλογή1 | επιλογή2 | επιλογή3 ) (#REQUIRED | #IMPLIED)>

Ακολουθεί ένα παράδειγμα.

<!ATTLIST car make (Ford | Skoda | Citroen) #REQUIRED>

Παράδειγμα 21 - Η Λέξη Κλειδί ID

Χρησιμοποιούμε την λέξη κλειδί ID για να περιορίσουμε μια ιδιότητα ώστε να δέχεται μοναδικές τιμές σε μια XML εφαρμογή την ώρα εκτέλεσης (μοναδικό αναγνωριστικό ή πρωτεύον κλειδί). Η σύνταξη είναι η εξής :

<!ATTLIST όνομα_στοιχείου όνομα_ιδιότητας ID #REQUIRED>

Ακολουθεί ένα παράδειγμα.

<!ATTLIST car serial_no ID #REQUIRED>

Παράδειγμα 22 - Η Λέξη Κλειδί IDREF

Χρησιμοποιούμε την λέξη κλειδί IDREF για να αναφερθούμε σ' έναν κανόνα επικύρωσης και να είμαστε έτσι σίγουροι ότι η τιμή μιας XML ιδιότητας ταιριάζει με την τιμή μιας ιδιότητας που έχει ορισθεί προηγουμένως (αναφορά αναγνωριστικού ή ξένο κλειδί). Η σύνταξη είναι η εξής :

<!ATTLIST όνομα_στοιχείου όνομα_ιδιότητας IDREF (#REQUIRED |

#IMPLIED)>

Ακολουθεί ένα παράδειγμα.

<!ATTLIST car serial_no ID #REQUIRED>

<!ATTLIST ford number IDREF #IMPLIED>

Σύμφωνα με τον παραπάνω DTD κώδικα, η ιδιότητα serial_no έχει αποδεκτές μόνο μοναδικές τιμές και η ιδιότητα number πρέπει να έχει μια από τις τιμές που δόθηκαν προηγουμένως στην ιδιότητα serial_no.

Παράδειγμα 23 - Δημιουργία Παραμετρικής Οντότητας

Μπορούμε να ορίσουμε ένα ειδικό κείμενο, που αποκαλείται παραμετρική οντότητα (parameter entity), και να αναφερόμαστε σ' αυτό πολλές φορές μέσα από ένα DTD αρχείο. Στην ουσία δημιουργούμε μια συντόμευση για ένα μεγάλο ή περίπλοκο κείμενο που εμφανίζεται πολλές φορές μέσα σ' ένα DTD αρχείο.

Πρέπει να δηλώσουμε μια παραμετρική οντότητα πριν την χρησιμοποιήσουμε και είναι σωστό να την δηλώνουμε στην αρχή του DTD αρχείου.

Για να δηλώσουμε μια παραμετρική οντότητα χρησιμοποιούμε την λέξη κλειδί

<!ENTITY> και το σύμβολο % μ' ένα κενό πριν και ένα κενό μετά. Για ένα εσωτερικό στοιχείο παραμέτρου, η σύνταξη είναι η εξής :

<!ENTITY % όνομα "κείμενο αντικατάστασης">

Για μια εξωτερική παραμετρική οντότητα, πρέπει να καθορίσουμε το DTD αρχείο στο οποίο βρίσκεται το κείμενο αντικατάστασης, ως εξής :

<!ENTITY % όνομα SYSTEM "αρχείο.dtd">

Ακολουθεί ένα παράδειγμα.

<!ENTITY % answer "(yes | no)">

Την ώρα της εκτέλεσης, θα αντικατασταθεί το όνομα αναφοράς %answer; με το κείμενο αντικατάστασης "(yes | no)".

Παράδειγμα 24 - Δημιουργία Γενικής Οντότητας

Εκτός από τις παραμετρικές οντότητες, μπορούμε να χρησιμοποιήσουμε και μια γενική οντότητα (general entity) και να αναφερόμαστε σ' αυτήν μέσα σ' ένα XML αρχείο. Στην ουσία δημιουργούμε μια συντόμευση για ένα μεγάλο ή περίπλοκο κείμενο που εμφανίζεται πολλές φορές μέσα σ' ένα XML αρχείο.

Για να δηλώσουμε μια γενική οντότητα χρησιμοποιούμε την λέξη κλειδί

<!ENTITY>, το όνομα της οντότητας και το κείμενο αντικατάστασης. Για μια εσωτερική γενική οντότητα, η σύνταξη είναι η εξής :

<!ENTITY όνομα "κείμενο αντικατάστασης">

Για μια εξωτερική παραμετρική οντότητα, πρέπει να καθορίσουμε το XML αρχείο στο οποίο βρίσκεται το κείμενο αντικατάστασης, ως εξής :

<!ENTITY όνομα SYSTEM "αρχείο.dtd">

Ακολουθεί ένα παράδειγμα.

<!ENTITY flo "Prefecture of Florina">

Την ώρα της εκτέλεσης, θα αντικατασταθεί το όνομα αναφοράς "&flo;" με το κείμενο αντικατάστασης "Prefectue of Florina".

Για να ξεκαθαρίσουμε λίγο τα πράγματα με τους τέσσερις τύπους οντοτήτων, πρέπει να έχουμε υπόψη μας ότι ορίζουμε και τους τέσσερις τύπους οντοτήτων σ' ένα DTD αρχείο με την ετικέτα <!ENTITY> ή στην ενότητα <!DOCTYPE> ενός XML αρχείου.

Οι γενικές οντότητες αναφέρονται μέσα σε XML αρχεία με το & και το σύμβολο ; (&entityName;), ενώ οι παραμετρικές οντότητες αναφέρονται μέσα σε DTD αρχεία με το % και το σύμβολο ; (%entityName;). Οι εσωτερικές οντότητες ορίζουν ένα κείμενο αντικατάστασης στο ίδιο το έγγραφο που αναφέρει αυτές τις οντότητες, ενώ οι εξωτερικές οντότητες με την λέξη κλειδί SYSTEM αναφέρονται σ' ένα κείμενο ανατικατάστασης που βρίσκεται σ' ένα εξωτερικό έγγραφο.

Παράδειγμα 25 - Δημιουργία Σήμανσης (Notation)

Με την δήλωση μιας σήμανσης (notation), μπορούμε να αναφερθούμε σ' έναν εξωτερικό τύπο δεδομένων που σχετίζεται με μια εξωτερική γενική οντότητα.

Ενας εξωτερικός τύπος δεδομένων είναι ένας τύπος δεδομένων μη XML, όπως ένα αρχείο .gif ή ένα αρχείο .doc, και μια εξωτερική οντότητα είναι ένα DTD στοιχείο που το χρησιμοποιούμε για να βρίσκουμε εξωτερικούς τύπους δεδομένων που χρησιμοποιούνται σε XML έγγραφα.

Η σύνταξη για την δήλωση μιας notation είναι η εξής :

<!NOTATION όνομα SYSTEM "τύπος αρχείου">

Το name είναι το όνομα της σήμανσης notation και ο τύπος αρχείου είναι μια τιμή που μπορεί να αναγνωρίσει ένας XML επεξεργαστής και να την επεξεργαστεί την ώρα εκτέλεσης.

Ακολουθεί ένα παράδειγμα.

<!NOTATION GIF SYSTEM "image/gif">

Το GIF είναι το όνομα της σήμανσης notation και το image/gif είναι ο τύπος δεδομένων. Οι σημάνσεις (notation) περιγράφουν την μορφή αρχείων δεδομένων που δεν είναι XML, ενώ οι οντότητες (entities) παρέχουν συνδέσεις στην φυσική θέση των μη XML δεδομένων.

Για να δηλώσουμε τώρα μια εξωτερική γενική οντότητα ώστε να συμπεριλάβουμε ένα αρχείο που περιέχει μη XML δεδομένα, όπως ένα αρχείο jpeg ή ένα αρχείο pdf, πρέπει πρώτα να δηλώσουμε μια ιδιότητα notation. Η σύνταξη είναι η εξής :

<!ENTITY όνομα_οντότητας SYSTEM "όνομα_αρχείου" NDATA όνομα_notation>

Η σήμανση θα πρέπει να έχει ήδη ορισθεί στο DTD αρχείο. Ακολουθεί ένα παράδειγμα.

<!NOTATION GIF SYSTEM "image/gif">

<!ENTITY P1 SYSTEM "../images/florina.gif" NDATA GIF>

Παράδειγμα 26 - Δήλωση ενός Αρχείου Διάταξης (Schema)

Μια διάταξη (schema) είναι μια δήλωση που περιέχει κανόνες επικύρωσης (validation rules) για να μπορέσουμε να περιορίσουμε τις τιμές δεδομένων XML.

Αποτελούν μια εναλλακτική λύση για τους ορισμούς τύπου εγγράφων (DTD) και έχουν τα εξής πλεονεκτήματα :

Χρησιμοποιούν τυπική σύνταξη XML.

Μπορούμε να επικυρώσουμε εξειδικευμένους τύπους δεδομένων, όπως integer, date και time.

Το MSXML προσφέρει επί του παρόντος την καλύτερη υποστήριξη για τις διατάξεις. Η σύνταξη για την δημιουργία μιας διάταξης είναι η εξής :

<Schema

name="όνομα_διάταξης"

xmlns="urn:schemas-microsoft-com:xml-data"

xmlns:dt="urn:schemas-microsoft-com:datatypes">

</Schema>

Για να βάλουμε σχόλια (comments) σε μια διάταξη, χρησιμοποιούμε την γνωστή σύνταξη :

<!- - κείμενο σχολίου - ->

Ειδικά για τις διατάξεις (Schemas), η Microsoft υποστηρίζει ένα ειδικό στοιχείο, το

<description>, για να σχολιάσουμε τον κώδικα μιας διάταξης, ως εξής :

<description> Η Φλώρινα βρίσκεται στην Δυτική Μακεδονία

</description>

Παράδειγμα 27 - Τοποθέτηση Στοιχείων μέσα σε Διάταξη (Schema)

Μπορούμε να δημιουργήσουμε σχέσεις container σε μια διάταξη. Τα στοιχεία container αποτελούνται από ένα ή περισσότερα άλλα προκαθορισμένα στοιχεία. Η σύνταξη για να δημιουργήσουμε ένα στοιχείο container μέσα σε μια διάταξη Schema είναι η εξής :

<Schema ...>

<ElementType name="όνομα_XML_στοιχείου_container"

content="eltOnly" model="closed">

<element type="όνομα_περιεχόμενου_στοιχείου1">

<element type="όνομα_περιεχόμενου_στοιχείου2">

...

</ElementType>

...

</Schema>

Για κάθε στοιχείο δεδομένων ενός XML εγγράφου πρέπει να δηλώσουμε ένα ElementType στην διάταξη και με το ίδιο όνομα κατά προτίμηση.

Παράδειγμα 28 - Οι Δηλώσεις minOccurs και maxOccurs

Μπορούμε να δημιουργήσουμε έναν κανόνα επικύρωσης για ένα στοιχείο μιας διάταξης (Schema) ώστε να είμαστε σίγουροι ότι σχετίζεται με μία μόνο ή με περισσότερες τιμές κατά την ώρα εκτέλεσης. Προς τον σκοπό αυτό χρησιμοποιούμε τις δηλώσεις minOccurs και maxOccurs, όπου η πρώτη αναφέρεται στον ελάχιστο αριθμό τιμών που μπορεί να υπάρχουν γι' αυτό το στοιχείο την ώρα εκτέλεσης (προεπιλογή=1) και η δεύτερη αναφέρεται στον μέγιστο αριθμό τιμών που μπορεί να υπάρχουν γι' αυτό το στοιχείο την ώρα εκτέλεσης (προεπιλογή=1 και το * δηλώνει πολλές τιμές).

Η σύνταξη είναι ως εξής :

<element type="τύπος_στοιχείου"

[minOccurs="1"]

[maxOccurs="{1 | *} "] />

Ο τύπος_στοιχείου πρέπει να ταιριάζει με το όνομα ενός στοιχείου που έχουμε ήδη ορίσει σαν ElementType. Ακολουθεί ένα παράδειγμα.

<element type="car" minOccurs="1" maxOccurs="*" />

Αν ορίσουμε την τιμή 0 για την δήλωση minOccurs, το στοιχείο της διάταξης γίνεται προαιρετικό. Για να περιορίσουμε τον αριθμό των τιμών ενός στοιχείου, πρέπει να ορίσουμε μια τιμή για την δήλωση maxOccurs, όπως π.χ. 20.

Παράδειγμα 29 - Οι Ιδιότητες content, model και dt:type

Μπορούμε να χρησιμοποιήσουμε την ιδιότητα content ενός στοιχείου ElementType για να δηλώσουμε τον τύπο δεδομένων ενός στοιχείου της XML σαν τύπο κειμένου (textOnly) σε μια διάταξη (Schema). Τα στοιχεία που δηλώνονται σαν textOnly μπορούν να περιέχουν μόνο χαρακτήρες και όχι άλλα προκαθορισμένα στοιχεία. Η σύνταξη της ιδιότητας content είναι η εξής :

<ElementType name="όνομα_στοιχείου"

content="textOnly" model="closed" />

Το όνομα_στοιχείου είναι το όνομα του στοιχείου που θέλουμε να ορίσουμε σαν τύπο κειμένου. Οι διατάξεις (Schemas) προσφέρουν πιο συγκεκριμένους τύπους δεδομένων από τα DTD.

Ακολουθεί ένα παράδειγμα.

<ElementType name="product" content="textOnly" model="closed"

/>

Η ιδιότητα content ενός ElementType μπορεί να έχει μια από τις εξής τιμές :

empty, κενό στοιχείο.

textOnly, στοιχεία που περιέχουν μόνο κείμενο.

elementOnly, στοιχεία που περιέχουν άλλα στοιχεία και όχι κείμενο.

mixed, στοιχεία που περιέχουν άλλα στοιχεία και κείμενο.

Προκαθορισμένη επιλογή.

Αν δώσουμε την τιμή open στην ιδιότητα model και όχι την τιμή closed, θα επιτρέψουμε σ' ένα στοιχείο διάταξης να μπορεί να περιέχει την ώρα εκτέλεσης μια τιμή κειμένου και ένα ή περισσότερα προκαθορισμένα στοιχεία. Καταργούμε δηλαδή τους περιορισμούς του στοιχείου. Ακολουθεί ένα παράδειγμα.

<ElementType name="product" model="open" />

Μπορούμε να χρησιμοποιήσουμε την ιδιότητα dt:type για να ορίσουμε τον τύπο δεδομένων ενός στοιχείου σε boolean, integer, real, time ή date. Ακολουθεί ένα παράδειγμα.

<ElementType name="product_price" content="textOnly"

dt:type="fixed, 10.2" model="closed" />

Παράδειγμα 30 - Δήλωση Ιδιότητας για μια Διάταξη (Schema)

Για να μπορέσουμε να δηλώσουμε μια ιδιότητα για μια διάταξη (Schema), πρέπει πρώτα να δηλώσουμε ένα τύπο ιδιότητας (AttributeType), με την εξής σύνταξη :

<AttributeType

default="προκαθορισμένη_τιμή"

dt:type="τύπος_δεδομένων"

dt:values="απαριθμητές_τιμές"

name="idref"

required="{yes | no}" />

<attribute type ="idref" />

Το dt:type καθορίζει τον τύπο δεδομένων της ιδιότητας και μπορεί να έχει μια από τις τιμές entity, entities, enumeration, id, idref, idrefs, nmtoken, nmtokens, notation, int, bool ή string. Το dt:values καθορίζει τις απαριθμητές τιμές όταν το dt:type είναι απαριθμητή τιμή (enumeration) και οι απαριθμητές τιμές πρέπει να χωρίζονται με κενά ανάμεσά τους. Το name είναι το όνομα της ιδιότητας για να μπορούμε να αναφερόμαστε σ' αυτήν και το required καθορίζει αν απαιτείται μια τιμή γι' αυτή την ιδιότητα την ώρα εκτέλεσης.

Οι ιδιότητες τύπου nmtoken ξεχωρίζουν από τις ιδιότητες τύπου string στο ότι τα string μπορεί να περιέχουν κενά, ενώ οι έγκυρες ιδιότητες τύπου nmtoken όχι. Οι ιδιότητες τύπου nmtoken χρησιμοποιούνται συνήθως σαν πρωτεύοντα και ξένα κλειδιά. Η δήλωση μιας ιδιότητας με τύπο id την κάνει να μπορεί να δέχεται μόνο μοναδικές τιμές σε μια XML εφαρμογή (πρωτεύον κλειδί), ενώ η δήλωση με τύπο idref την κάνει να είναι μια αναφορά αναγνωριστικού ή ξένο κλειδί, σε σχέση βέβαια με μια άλλη δήλωση του τύπου id.

Οι δηλώσεις των ιδιοτήτων γίνονται μετά από την δήλωση της διάταξης (Schema) και χρησιμοποιούμε την δήλωση <attribute type="idref" /> μέσα σε μια δήλωση <ElementType ... > ... </ElementType> για να καθορίσουμε τον τύπο της ιδιότητας ενός στοιχείου.

Ακολουθεί ένα παράδειγμα δήλωσης μιας ιδιότητας για δεδομένα χαρακτήρων.

<?xml version="1.0"?>

<Schema name="myName"

...>

</Schema>

<AttributeType name="attr1" dt:type="string" />

<ElementType name="element1" content="textOnly"

model="closed">

<attribute type="attr1" />

</ElementType>

Παράδειγμα 31 - Δημιουργία Διαδοχικών Φύλλων Στυλ (CSS)

Μπορούμε να δημιουργήσουμε ένα διαδοχικό φύλλο στυλ (Cascading Style Sheet, CSS) για να μορφοποιήσουμε και να εμφανίσουμε XML στοιχεία δεδομένων. Με τα CSS, μπορούμε να ξεχωρίσουμε τα δεδομένα από τις λεπτομέρειες της παρουσίασής τους, όπως είναι το μέγεθος της γραμματοσειράς, το χρώμα και η θέση.

Η σύνταξη για την δήλωση ενός κανόνα CSS είναι η εξής : όνομα_XML_στοιχείου

{

ιδιότητα : τιμή;

}

Για παράδειγμα, δημιουργούμε ένα αρχείο κειμένου με όνομα file01.css και καταχωρούμε τον εξής κανόνα για ένα XML στοιχείο :

element01 {

display : block;

font-family : Arial, sans-serif;

}

Σ' αυτό το παράδειγμα, οι CSS κανόνες εμφανίζουν τις XML τιμές ξεχωριστά (display:block) και σ' ένα από τα στυλ γραμματοσειρών Arial ή san-serif.

Για να προσθέσουμε σχόλια (comments) σ' ένα αρχείο CSS, χρησιμοποιούμε την εξής σύνταξη :

/* κείμενο σχολίου */

Τα σχόλια για τα CSS μπορούν να επεκτείνονται σε πολλές γραμμές αλλά δεν μπορούν να είναι ένθετα (nested).

Στα CSS, οι επιλογές που έχουμε ορίσει για ένα στοιχείο container εφαρμόζονται σ' όλα τα στοιχεία που περιέχει, αλλά μπορούμε να ορίσουμε και διαφορετικές επιλογές εμφάνισης για κάθε μεμονωμένο περιεχόμενο στοιχείο. Στο παρακάτω παράδειγμα, το στοιχείο element01 είναι το στοιχείο container και τα στοιχεία element02 και element03 περιέχονται σ' αυτό και κληρονομούν τα χαρακτηριστικά του element01 αλλά έχουν και τα δικά τους χαρακτηριστικά.

element01 {

display : block;

font-family : Arial, sans-serif;

}

element02 {

display : block;

font-size : large;

font-weight : bold;

color : red;

border-top : 2px solid #225566;

border-bottom : 2px solid #00FF11;

background-color : #AACCFF;

}

element03 {

display : block;

margin-bottom : 2em;

margin-left : 4em;

margin-top : 1em; }

Παράδειγμα 32 - Κανόνες Στυλ για Παράβλεψη Στοιχείων

Μπορούμε να χρησιμοποιήσουμε κανόνες φύλλων στυλ για να παραβλέψουμε συγκεκριμένα XML στοιχεία, με την εξής σύνταξη :

όνομα_στοιχείου_1, όνομα_στοιχείου_2

{

display : none;

}

Η παράβλεψη των XML στοιχείων είναι χρήσιμη όταν ελέγχουμε ένα φύλλο στυλ.

Επειδή με την βοήθεια των φύλλων στυλ μπορούμε να ξεχωρίσουμε τα XML δεδομένα από την παρουσίασή τους, μπορούμε να εφαρμόσουμε πολλαπλά φύλλα στυλ στο ίδιο XML έγγραφο. Αυτό, για παράδειγμα, μπορεί να φανεί χρήσιμο όταν θέλουμε να δημιουργήσουμε τρία διαφορετικά φύλλα στυλ για να

παρουσιάσουμε ένα XML έγγραφο σαν ένα έγχρωμο έγγραφο, σαν ένα ασπρόμαυρο έγγραφο ή σαν ένα έγγραφο με κείμενο μεγάλου μεγέθους.

Παράδειγμα 33 - Σύνδεση Φύλλου Στυλ μ' ένα XML Αρχείο

Μπορούμε να επισυνάψουμε ένα φύλλο στυλ σ' ένα XML έγγραφο και την ώρα εκτέλεσης, το MSXML εφαρμόζει τους κανόνες του φύλλου στυλ για να μορφοποιήσει και να εμφανίσει τα XML δεδομένα. Η σύνταξη για να συνδέσουμε ένα XML έγγραφο μ' ένα αρχείο φύλλου στυλ είναι η εξής:

<?xml-stylesheet type="τύπος_φύλλου_στυλ"

href="όνομα_αρχείου_φύλλου_στυλ"?>

Ο τύπος_φύλλου_στυλ είναι ο ΜΙΜΕ τύπος του φύλλου στυλ που θέλουμε να εφαρμόσουμε στο XML έγγραφο και μπορεί να έχει τις εξής δύο έγκυρες τιμές : text/css, για ένα φύλλο στυλ, και text/xsl, για ένα XML φύλλο στυλ.

Το όνομα_αρχείου_φύλλου_στυλ είναι το όνομα του εγγράφου του φύλλου στυλ που θέλουμε να επισυνάψουμε, όπως π.χ. file01.css.

Ακολουθεί ένα παράδειγμα.

<?xml version="1.0"?>

<?xml-stylesheet type="text/css" href="file01.css"?>

Οταν καθορίζουμε τους κανόνες εμφάνισης των δεδομένων ξεχωριστά από τα ίδια τα δεδομένα, έχουμε μεγάλη ευελιξία στην παρουσίαση των δεδομένων, αντί να χρησιμοποιούμε αυτούς τους κανόνες μέσα σ' ένα XML έγγραφο. Ετσι, το ίδιο XML έγγραφο μπορεί να έχει τρία διαφορετικά CSS έγγραφα, ένα για τους πελάτες χονδρικής, ένα για τους πελάτες λιανικής και ένα για τους εργαζόμενους.

Για κάθε νέα ομάδα που θα πρέπει να εμφανισθεί με διαφορετική μορφοποίηση, μπορούμε πολύ απλά να δημιουργήσουμε ένα νέο CSS έγγραφο, χωρίς να επέμβουμε καθόλου στο XML αρχείο.

Παράδειγμα 34 - Η Ιδιότητα display

Με την ιδιότητα display των φύλλων στυλ μπορούμε να ορίσουμε πώς ακριβώς θέλουμε να εμφανίζεται το κείμενο σ' ένα XML έγγραφο. Η σύνταξη της ιδιότητας display είναι η εξής :

όνομα_στοιχείου

{

display : μορφή;

}

Οι επιλογές που μπορούμε να χρησιμοποιήσουμε για την μορφή είναι οι εξής :

block, μπαίνει μια αλλαγή γραμμής πριν και μετά από το στοιχείο, κάτι δηλ. σαν μια παράγραφος σε κείμενο.

inline, είναι η προκαθορισμένη επιλογή και δεν εισάγει αλλαγές γραμμών.

none, δεν εμφανίζεται το στοιχείο (απόκρυψη).

Παράδειγμα 35 - Οι Ιδιότητες Γραμματοσειρών

Με την ιδιότητα font-family μπορούμε να ορίσουμε τις γραμματοσειρές ή τις κατηγορίες γραμματοσειρών που θέλουμε να χρησιμοποιήσουμε για κάποιο στοιχείο. Η σύνταξη είναι η εξής :

όνομα_στοιχείου

{ font-family : επιλογή1, επιλογή2, ... }

Μπορούμε να δηλώσουμε συγκεκριμένα ονόματα ενός ή περισσοτέρων γραμματοσειρών, όπως Arial, Courier, TimesRoman, ή γενικές κατηγορίες γραμματοσειρών. Υπάρχουν οι εξής πέντε κατηγορίες γραμματοσειρών :

Serif, έχουν λεπτές, διακοσμητικές γραμμές στην άκρη των γραμμάτων, όπως η Times.

Sans-Serif, έχουν ουρίτσες, όπως η Arial και η Helvetica.

Monospace, θυμίζουν τις γραφομηχανές, όπως η Courier.

Cursive, γραμματοσειρές script, όπως η ZapfChancery.

Fantasy, βασικά διακοσμητικές, όπως η Western.

Πρέπει να έχουμε υπόψη μας ότι οι ιδιότητες family κληρονομούνται, έτσι αν δεν έχει ορισθεί άλλη γραμματοσειρά, θα χρησιμοποιηθεί η γονική. Ακολουθεί ένα παράδειγμα.

name {

display : block;

font-family : Arial, Times, sans-serif }

Με την ιδιότητα font-size μπορούμε να ορίσουμε το ύψος (μέγεθος) για κάποιο στοιχείο. Η σύνταξη είναι η εξής :

όνομα_στοιχείου

{ font-size : επιλογή_μεγέθους; }

Η επιλογή_μεγέθους μπορεί να ανήκει σε μια από τις εξής κατηγορίες :

Μια τιμή σχετική με το τρέχον μέγεθος της γραμματοσειράς του φυλλομετρητή και με δυνατές επιλογές xx-small, x-small, small, medium, large, x-large και xx-large.

Μια τιμή σχετική με το τρέχον μέγεθος της γραμματοσειράς του γονικού στοιχείου και με δυνατές επιλογές smaller ή larger.

Μια τιμή ποσοστού του μεγέθους της γραμματοσειράς του γονικού στοιχείου, π.χ. 35%.

Μια συγκεκριμένη τιμή μεγέθους, συνήθως σε στιγμές, π.χ. 14pt.

Πρέπει να έχουμε υπόψη μας ότι οι ιδιότητες font-size κληρονομούνται, έτσι αν δεν έχει ορισθεί άλλη γραμματοσειρά, θα χρησιμοποιηθεί η γονική. Ακολουθεί ένα παράδειγμα.

name {

display : block;

font-family : Arial, Times, sans-serif;

font-size : 20pt

}

Με την ιδιότητα font-style μπορούμε να ορίσουμε το στυλ (κανονικό ή πλάγιο) για κάποιο στοιχείο. Η σύνταξη είναι η εξής :

όνομα_στοιχείου

{ font-style : επιλογή_στυλ; }

Η επιλογή_στυλ μπορεί να ανήκει σε μια από τις εξής κατηγορίες :

normal, εμφανίζει το κείμενο όπως δημιουργείται και είναι η προκαθορισμένη επιλογή.

italic, εμφανίζει την γραμματοσειρά με πλάγια γράμματα.

oblique, πλάγιο στυλ, αλλά δεν είναι πάντα διαθέσιμο.

Πρέπει να έχουμε υπόψη μας ότι οι ιδιότητες font-style κληρονομούνται, έτσι αν δεν έχει ορισθεί άλλη γραμματοσειρά, θα χρησιμοποιηθεί η γονική.

Ακολουθεί ένα παράδειγμα :

name {

display : block;

font-family : Arial, Times, sans-serif;

font-style : italic }

Με την ιδιότητα font-weight μπορούμε να ορίσουμε το πάχος της γραμματοσειράς για κάποιο στοιχείο. Η σύνταξη είναι η εξής :

όνομα_στοιχείου { font-weight : τιμή; }

Η τιμή μπορεί να ανήκει σε μια από τις εξής δύο κατηγορίες :

Σχετικές τιμές, είναι τέσσερις επιλογές που ορίζουν την ένταση του κειμένου του στοιχείου σε σχέση με την ένταση του κειμένου του γονικού στοιχείου και είναι οι : normal, lighter, bold και bolder.

Αριθμητικές τιμές, είναι εννέα επιλογές (100, 200 ... 900) που ορίζουν την ένταση του κειμένου του στοιχείου με απόλυτη τιμή.

Πρέπει να έχουμε υπόψη μας ότι οι ιδιότητες font-weight κληρονομούνται, έτσι αν δεν έχει ορισθεί άλλη γραμματοσειρά, θα χρησιμοποιηθεί η γονική. Ακολουθεί ένα παράδειγμα.

name {

display : block;

font-size : large;

font-weight : 600 }

Με την ιδιότητα font-variant μπορούμε να προσθέσουμε ειδική έμφαση σε κάποιο στοιχείο. Η σύνταξη είναι η εξής :

όνομα_στοιχείου

{ font-variant : τιμή; }

Η τιμή έχει τις εξής δύο επιλογές :

small-caps, μετατρέπει το κείμενο σε μικρά κεφαλαία.

normal, αφήνει το κείμενο στην κανονική του μορφή.

Πρέπει να έχουμε υπόψη μας ότι οι ιδιότητες font-variant κληρονομούνται, έτσι αν δεν έχει ορισθεί άλλη γραμματοσειρά, θα χρησιμοποιηθεί η γονική. Ακολουθεί ένα παράδειγμα.

name {

display : block;

font-style : italic;

font-variant : small-caps }

Υπάρχει και η δυνατότητα να ορίσουμε μαζί πολλές ιδιότητες γραμματοσειράς σε μια δήλωση με την ιδιότητα font. Οι ιδιότητες αυτές είναι οι style, variant, weight, size και family.

Πρέπει να έχουμε υπόψη μας ότι οι ιδιότητες font κληρονομούνται, έτσι αν δεν έχει ορισθεί άλλη γραμματοσειρά, θα χρησιμοποιηθεί η γονική.

Ακολουθεί ένα παράδειγμα.

name {

display : block;

font : normal normal normal 12pt Times, serif; }

Παράδειγμα 36 - Η Ιδιότητα color

Με την ιδιότητα color μπορούμε να εφαρμόσουμε χρώμα σε γραμματοσειρές.

Πρέπει να έχουμε υπόψη μας ότι οι ιδιότητες color κληρονομούνται, έτσι αν δεν έχει ορισθεί άλλο χρώμα, θα χρησιμοποιηθεί το χρώμα του γονικού στοιχείου.

Η σύνταξη είναι η εξής : όνομα_στοιχείου

{ color : χρώμα; }

Για το χρώμα έχουμε τις εξής επιλογές :

Ένα συγκεκριμένο όνομα χρώματος, από τα 16 έτοιμα χρώματα που υποστηρίζει το CSS (aqua, black, blue, fuchsia, gray, green, lime, maroon, navy, olive, purple, red, silver, teal, white, yellow).

Μια RGB 16δική τιμή, όπως #000000 για μαύρο και #0000FF για μπλε.

Μια RGB δεκαδική τιμή, όπως RGB(0, 0 ,0) για μαύρο και RGB(0, 0, 255) για μπλε.

Μια RGB τιμή ποσοστού, όπως RGB(0%, 0%, 0%) για μαύρο και RGB(0%, 0%, 100%) για μπλε.

Ακολουθεί ένα παράδειγμα.

name {

display : block;

font-style : italic;

font-weight : bold;

color : green }

Παράδειγμα 37 - Οι Ιδιότητες Κειμένου

Με την ιδιότητα text-transform μπορούμε να ρυθμίσουμε τα πεζά και τα κεφαλαία γράμματα για κάποιο στοιχείο. Η σύνταξη είναι η εξής :

όνομα_στοιχείου

{ text-transform : στυλ; }

Το στυλ μπορεί να έχει μια από τις εξής τέσσερις τιμές :

capitalize, κάνει κεφαλαίο μόνο το πρώτο γράμμα κάθε λέξης του στοιχείου.

uppercase, κάνει κεφαλαία όλα τα γράμματα του στοιχείου.

lowercase, κάνει μικρά όλα τα γράμματα του στοιχείου.

none, δεν κάνει καμία αλλαγή στο στοιχείο.

Πρέπει να έχουμε υπόψη μας ότι οι ιδιότητες text-transform κληρονομούνται, έτσι αν δεν έχει ορισθεί κάποια άλλη τιμή, θα χρησιμοποιηθεί η τιμή του γονικού στοιχείου.

Ακολουθεί ένα παράδειγμα.

name {

display : inline;

color : green;

text-transform : capitalize }

Με την ιδιότητα text-decoration μπορούμε να διακοσμήσουμε το κείμενο ενός στοιχείου. Η σύνταξη είναι η εξής :

όνομα_στοιχείου

{ text-decoration : στυλ; }

Το στυλ μπορεί να έχει μια από τις εξής πέντε τιμές :

underline, τοποθετεί μια γραμμή κάτω από το κείμενο.

overline, τοποθετεί μια γραμμή πάνω από το κείμενο.

line-through, τοποθετεί μια γραμμή δια μέσου του κειμένου.

none, δεν κάνει καμία αλλαγή στο στοιχείο.

blink, κάνει το κείμενο να αναβοσβήνει.

Πρέπει να έχουμε υπόψη μας ότι η ιδιότητα text-decoration δεν κληρονομείται.

Ακολουθεί ένα παράδειγμα.

name {

display : block;

color : green;

text-transform : capitalize;

text-decoration : underline }

Υπάρχει και η ιδιότητα text-shadow για να δημιουργήσουμε εφέ σκιάς για ένα κείμενο, αλλά δεν χρησιμοποιείται ευρέως.

Με την ιδιότητα line-height μπορούμε να ρυθμίσουμε την κατακόρυφη απόσταση των στοιχείων. Η σύνταξη είναι η εξής :

όνομα_στοιχείου

{ line-height : τιμή; }

Η τιμή μπορεί να ανήκει σε μια από τις εξής τρεις κατηγορίες :

Ενας αριθμός για το πολλαπλάσιο της απόστασης της γονικής ιδιότητας, όπως π.χ. 3 για τριπλάσια απόσταση από την απόσταση της γονικής ιδιότητας.

Ενας αριθμός ποσοστού για το πολλαπλάσιο της απόστασης της γονικής ιδιότητας, όπως π.χ. 300% για τριπλάσια απόσταση από την απόσταση της γονικής ιδιότητας.

Μια απόλυτη τιμή αριθμού μαζί με μια μονάδα μέτρησης cm, in, mm, pc ή pt, όπως π.χ. 3 cm για μια κατακόρυφη απόσταση 3 εκατοστών.

Πρέπει να έχουμε υπόψη μας ότι η ιδιότητα line-height κληρονομούνται, έτσι αν δεν έχει ορισθεί κάποια άλλη τιμή, θα χρησιμοποιηθεί η τιμή του γονικού στοιχείου.

Ακολουθεί ένα παράδειγμα.

name {

display : block;

color : red;

line-height : 200%

}

Μπορούμε να χρησιμοποιήσουμε την ιδιότητα text-align για να ελέγξουμε τον τρόπο στοίχισης των στοιχείων. Η ιδιότητα αυτή υποστηρίζει μόνο τα στοιχεία που έχουν την τιμή block για την ιδιότητά τους display. Η σύνταξη είναι η εξής : όνομα_στοιχείου

{ text-align : τιμή; }

Η τιμή μπορεί να ανήκει σε μια από τις εξής τέσσερις γνωστές επιλογές :

left, αριστερή στοίχιση.

right, δεξιά στοίχιση.

center, κεντράρισμα.

justify, πλήρης στοίχιση.

Ακολουθεί ένα παράδειγμα.

name {

display : block;

line-height : 3.5;

text-align : center }

Μπορούμε να χρησιμοποιήσουμε την ιδιότητα letter-spacing για να αυξήσουμε ή να ελαττώσουμε την απόσταση μεταξύ των χαρακτήρων των λέξεων ενός στοιχείου. Η σύνταξη είναι η εξής :

όνομα_στοιχείου

{ letter-spacing : τιμή; }

Η τιμή μπορεί να ανήκει σε μια από τις εξής τρεις κατηγορίες :

normal, που δεν επηρεάζει την τρέχουσα απόσταση.

Ενα πολλαπλάσιο ως προς την γονική ιδιότητα σαν ποσοστό.

Μια απόλυτη τιμή μεγέθους σε cm, in, mm, pc ή pt.

Μπορούμε να χρησιμοποιήσουμε και αρνητικές τιμές για να μειώσουμε την απόσταση μεταξύ των χαρακτήρων.

Ακολουθεί ένα παράδειγμα.

name {

display : block;

text-decoration : underline;

line-spacing : 10px }

Μπορούμε να χρησιμοποιήσουμε την ιδιότητα word-spacing για να αυξήσουμε ή να ελαττώσουμε την απόσταση μεταξύ των λέξεων ενός στοιχείου. Η σύνταξη είναι η εξής :

όνομα_στοιχείου

{ word-spacing : τιμή; }

Η τιμή μπορεί να ανήκει σε μια από τις εξής τρεις κατηγορίες :

normal, που δεν επηρεάζει την τρέχουσα απόσταση.

Μια απόλυτη τιμή μεγέθους σε cm, in, mm, pc ή pt.

Μια σχετική τιμή, όπως 5px.

Μπορούμε να χρησιμοποιήσουμε και αρνητικές τιμές για να μειώσουμε την απόσταση μεταξύ των λέξεων. Η ιδιότητα αυτή δεν χρησιμοποιείται πολύ.

Ακολουθεί ένα παράδειγμα.

name {

display : block;

text-decoration : underline;

word-spacing : 1 mm }

Μπορούμε να χρησιμοποιήσουμε την ιδιότητα text-indent για να ορίσουμε την εσοχή της πρώτης γραμμής του κειμένου ενός στοιχείου. Η σύνταξη είναι η εξής : όνομα_στοιχείου

{ text-indent : τιμή; }

Η τιμή μπορεί να ανήκει σε μια από τις εξής τρεις κατηγορίες :

normal, που δεν επηρεάζει την τρέχουσα απόσταση.

Ενα πολλαπλάσιο ως προς την γονική ιδιότητα σαν ποσοστό.

Μια απόλυτη τιμή μεγέθους σε cm, in, mm, pc ή pt.

Πρέπει να έχουμε υπόψη μας ότι η ιδιότητα αυτή κληρονομείται.

Ακολουθεί ένα παράδειγμα.

name {

display : block;

text-decoration : underline;

text-indent : 3em }

Για να δημιουργήσουμε μια κρεμαστή εσοχή, δηλ. μια εσοχή σ' όλες τις γραμμές μιας παραγράφου εκτός από την πρώτη, πρέπει να δώσουμε μια αρνητική τιμή στην ιδιότητα text-indent.

Μπορούμε να χρησιμοποιήσουμε την ιδιότητα vertical-align για να μετατρέψουμε στοιχεία σε εκθέτες ή δείκτες. Η σύνταξη είναι η εξής :

όνομα_στοιχείου

{ vertical-align : τιμή; }

Η τιμή μπορεί να ανήκει σε μια από τις εξής πέντε επιλογές :

baseline, στοιχίζει την γραμμή βάσης του πλαισίου του στοιχείου με την γραμμή βάσης του γονικού στοιχείου.

sub, μετατρέπει το στοιχείο σε δείκτη.

super, μετατρέπει το στοιχείο σε εκθέτη.

middle, στοχίζει το στοιχείο με το μέσο του γονικού στοιχείου.

text-top, στοιχίζει το πάνω μέρος του στοιχείου κειμένου με το πάνω μέρος του πλαισίου κειμένου του γονικού στοιχείου.

text-bottom, στοιχίζει το κάτω μέρος των δύο πλαισίων κειμένου των στοιχείων.

Ακολουθεί ένα παράδειγμα.

name {

display : block;

text-transform : capitalize;

vertical-align : super }

Παράδειγμα 38 - Το Μοντέλο Πλαισίου

Για να εμφανίσει το CSS όλα τα στοιχεία πρέπει να χρησιμοποιήσουμε ένα μοντέλο πλαισίου.

Για να ορίσουμε το πλάτος, το χρώμα και το στυλ ενός περιγράμματος, χρησιμοποιούμε τις ιδιότητες border.

Το κέντρο ενός μοντέλου πλαισίου είναι εκεί όπου βρίσκονται τα περιεχόμενα του στοιχείου.

Η αναπλήρωση είναι η περιοχή που βρίσκεται μεταξύ των περιεχομένων του στοιχείου και του περιγράμματος και την ελέγχουμε με την ιδιότητα padding.

Το περιθώριο είναι μια αόρατη περιοχή από το περίγραμμα ως την άκρη του στοιχείου και το ελέγχουμε με την ιδιότητα margin.

Το ύψος ενός στοιχείου είναι το συνολικό ύψος του περιγράμματος, της αναπλήρωσης και των περιεχομένων του.

Το πλάτος ενός στοιχείου είναι το συνολικό πλάτος του περιγράμματος, της αναπλήρωσης και των περιεχομένων του.

Παράδειγμα 39 - Το Χρώμα Φόντου

Για να εφαρμόσουμε χρώμα φόντου σ' ένα στοιχείο, χρησιμοποιούμε την ιδιότητα background-color, με την εξής σύνταξη :

όνομα_στοιχείου

{ background-color : τιμή; }

Η τιμή μπορεί να ανήκει σε μια από τις εξής επιλογές :

transparent, διαφανές δηλ. χωρίς καθόλου χρώμα φόντου, που είναι η προκαθορισμένη επιλογή.

Ενα από τα 16 ονόματα χρωμάτων,

Μια 16δική τιμή RGB .

Μια τιμή ποσοστού RGB.

Πρέπει να έχουμε υπόψη μας ότι η ιδιότητα αυτή δεν κληρονομείται, δηλ. τα στοιχεία παιδιά δεν κληρονομούν αυτόματα το χρώμα φόντου των γονικών τους στοιχείων. Αλλά, επειδή η προκαθορισμένη επιλογή είναι η transparent, αν ένα στοιχείο παιδί δεν έχει ένα δικό του φόντο, θα φαίνεται το φόντο του γονικού του στοιχείου.

Ακολουθεί ένα παράδειγμα.

name {

display : block;

text-align : center;

background-color : olive }

Παράδειγμα 40 - Η Εικόνα Φόντου

Για να ορίσουμε μια εικόνα σαν φόντο σ' ένα στοιχείο, χρησιμοποιούμε την ιδιότητα background-image, με την εξής σύνταξη :

όνομα_στοιχείου

{ background-image : τοποθεσία; }

Η τοποθεσία μπορεί να ανήκει σε μια από τις εξής επιλογές :

none, είναι η προκαθορισμένη επιλογή και δεν εισάγει εικόνα φόντου.

url ("διαδρομή/αρχείο_εικόνας.jpg"), είναι η διαδρομή και το όνομα της εικόνας φόντου που θέλουμε να εισάγουμε.

Πρέπει να έχουμε υπόψη μας ότι οι εικόνες φόντου δεν κληρονομούνται, αλλά αν έχουμε μια εικόνα φόντου και ένα χρώμα φόντου, η εικόνα τοποθετείται πάνω από το χρώμα, έτσι ώστε το χρώμα να φαίνεται μόνο μέσα από τα διαφανή τμήματα της εικόνας.

Ακολουθεί ένα παράδειγμα.

name {

display : block;

line-height : 2em;

background-image : url("florina01.gif") }

Μπορούμε να χρησιμοποιήσουμε την ιδιότητα background-repeat για να επαναλάβουμε μια εικόνα φόντου (παράθεση), με την εξής σύνταξη :

όνομα_στοιχείου

{ background-image : τοποθεσία; background-repeat : τιμή; } Η τιμή μπορεί να ανήκει σε μια από τις εξής επιλογές :

repeat-x, η εικόνα φόντου θα επαναληφθεί οριζόντια.

repeat-y, η εικόνα φόντου θα επαναληφθεί κατακόρυφα.

repeat, η εικόνα φόντου θα επαναληφθεί και οριζόντια και κατακόρυφα.

no-repeat, θα εμφανισθεί ένα μόνο αντίγραφο της εικόνας και είναι η προκαθορισμένη επιλογή.

Πρέπει να έχουμε υπόψη μας ότι η ιδιότητα αυτή δεν κληρονομείται.

Documentos relacionados