Next Previous Contents

9. Linuxdoc και SGML

9.1 Εισαγωγή

Τα αρχικά SGML σημαίνουν Standard Generalised Mark-up Language. Η SGML, λοιπόν, είναι μια γλώσσα προσδιορισμού τύπων εγγράφων. Μπορείτε να φανταστείτε την SGML σαν ένα υπερσύνολο, και, για να σας δώσω ένα παράδειγμα, η HTML είναι ένα υποσύνολο της SGML. Η SGML επινοήθηκε από την IBM προκειμένου να λυθεί το πρόβλημα της μη τυποποποιημένης εμφάνισης κειμένων σε διάφορα υπολογιστικά συστήματα.

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

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

9.2 Ο τύπος Linuxdoc

Όπως θα καταλάβατε από το όνομά του, το Linuxdoc είναι ο τύπος που χρησιμοποιούμε για να γράψουμε έγγραφα στο/γύρω από/σχετικά με το Linux (ναι, όλα αυτά). Αυτός ο τύπος εγγράφων γράφεται ως εξής: Αρχίζουμε με τον τίτλο, ακολουθούμενο από το όνομα του συγγραφέα, την έκδοση και την ημερομηνία. Μετά ακολουθεί το abstract, δηλαδή μια σύντομη περιγραφή, ώστε να μην χρειαστεί να ανατρέξετε στα περιεχόμενα για να δείτε το θέμα του εγγράφου, αλλά να σας υποδηλώσει το αντικείμενο, με το οποίο ασχολείται ο συγγραφέας. Έπειτα, ακολουθούν τα περιεχόμενα, που δείχνουν το περιεχόμενο του εγγράφου, ώστε οι "γρήγοροι" να πάνε κατ' ευθείαν στο θέμα που τους ενδιαφέρει. Στη συνέχεια, έχουμε μια λίστα από κεφάλαια, παραγράφους και ενότητες (chapters, paragraphs, sections).

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

Τα tags και τα ειδικά εργαλεία που θα δούμε παρακάτω, στο σύνολό τους, αυτό είναι που ονομάζουμε γλώσσα markup: ένας τρόπος πληροφοριακής και περιγραφικής σύνταξης ενός εγγράφου με τέτοιο τρόπο, ώστε να είναι χρήσιμος σε διάφορα προγράμματα. Η HTML, το Tex και τα man pages του Unix είναι κι αυτά γνωστά παραδείγματα από γλώσσες markup.

H SGML, από μόνη της δεν περιγράφει μια γλώσσα markup, αλλά μια γλώσσα, με την οποία μπορεί κανείς να συγγράψει προσδιορισμούς για άλλες γλώσσες markup. Στη "διάλεκτο" της SGML ο markup προσδιορισμός ονομάζεται DTD (Document Type Definition). To DTD σας επιτρέπει να ορίσετε τη δομή ενός είδους εγγράφου, δηλαδή, ποιά μέρη θα έχει, και σε ποιά σειρά, ένα έγγραφο. Όταν ορίζετε DTD σε ένα έγγραφό σας, τότε ένας SGML "σαρωτής" μπορεί να ελέγξει αν το έγγραφό σας είναι σωστά γραμμένο. Επιπλέον, με τη χρήση του συνδυασμού ενός SGML "σαρωτή" και ενός συγκεκριμένου DTD, μπορεί κανείς να δημιουργήσει ένα πρόγραμμα που να μεταφράζει το έγγραφο, από μια markup γλώσσα σε μια άλλη.

9.3 Το πρώτο σας έγγραφο

Basic structure (Βασική Δομή)

Αρχίζοντας, πρέπει να προσθέσετε τις παρακάτω γραμμές στην αρχή του εγγράφου σας:

<!doctype linuxdoc system>
<article>
<title>Βάλτε εδώ τον τίτλο που θέλετε</title>
<author>
Όνομα συγγραφέα, το e-mail του, κλπ...
</author>
<date>
έκδοση και ημερομηνία
</date>

Στη συνέχεια, αν θέλετε να περιγράψετε περιληπτικά το περιεχόμενο του εγγράφου, βάλτε τα tags <abstract> πρίν την παράγραφο της περίληψης και </abstract> στο τέλος της περίληψης. Μετά από αυτά, βάλτε το tag <toc> το οποίο σημαίνει Table of Contents (Πίνακας περιεχομένων).

Κεφάλαια και ενότητες

Κάθε φορά, που θα θέλετε να ξεκινήσετε ένα νέο κεφάλαιο, θα πρέπει να βάζετε, πριν αρχίσετε, το tag <sect> και δίπλα του να γράφετε τον τίτλο του κεφαλαίου. Προσέξτε, σε αυτό το σημείο, πως δεν είναι ανάγκη να αριθμείτε τα κεφάλαιά σας, γιατί αυτό γίνεται αυτόματα από το tag <sect>. Με τον ίδιο ακριβώς τρόπο, μπορείτε να δημιουργήσετε ενότητες μέσα στα κεφάλαια, και μάλιστα ενότητες διαφόρων επιπέδων: Εισάγοντας το tag <sect1> και μετά από αυτό έναν τίτλο, αυτομάτως δημιουργείται μία ενότητα δευτέρου επιπέδου (αριθμημένη κατάλληλα). Η αρίθμησή της έχει 2 μέρη (αφού είναι δευτέρου επιπέδου) και ακολουθή την μορφή Χ.Υ. Χ είναι ο αριθμός του κεφαλαίου, μέσα στον οποίο βρίσκεται η ενότητα, ενώ το Υ είναι ο αριθμός της ενότητας. Προσέξτε ότι το Υ δεν αυξάνεται συνεχώς, αλλά ξαναπέρνει την τιμή 1 όταν φτιάξετε μια ενότητα σε καινούριο κεφάλαιο. Με παρόμοιο τρόπο, λοιπόν, μπορείτε να ορίσετε και ενότητες μεγαλύτερου επιπέδου, έως και 5ου, με το tag <sectN>, όπου το Ν πέρνει τις τιμές από 1 μέχρι 4.

Μορφοποίηση του κειμένου

Για να ορίσετε μια νέα παράγραφο, αρκεί να βάλετε το tag <p> πρίν αρχίσετε να τη γράφετε. Εάν απλώς θέλετε να αλλάξετε γραμμή (και όχι παράγραφο), τότε χρησιμοποιήστε το tag <newline>. Τα σχόλιά σας, μπορείτε να τα γράφετε ανάμεσα στα tags <!-- και -->.

Όταν θέλετε να δίνετε έμφαση σε κάποια τμήματα του κειμένου σας, τότε μπορείτε να κάνετε τη γραμματοσειρά να φαίνεται είτε ως italics (πλάγια γράμματα), είτε ως bold (έντονα γράμματα). Για να ορίσετε τα italics, αρκεί να "περικυκλώσετε" το τμήμα του κειμένου που θέλετε με τα tags <it> και </it>, ενώ για bold, χρησιμοποιήστε τα tags <bf> και </bf> με τον ίδιο ακριβώς τρόπο. Μπορείτε, επίσης, να κάνετε τη γραμματοσειρά σε typewriter style με τα tags <tt> και </tt>.

Η SGML σας δίνει την δυνατότητα να χρησιμοποιήσετε λίστες μέσα στο έγγραφό σας. Για να προσθέσετε μία μη αριθμημένη λίστα (λίστα με κουκίδες), περικυκλώστε την λίστα με τα tags <itemize> και </itemize>. Ανάμεσα στα δύο αυτά tags, ορίζετε τα στοιχεία της λίστας με το tag <item>. Δείτε ένα σχετικό παράδειγμα:

<itemize>
<item>1ο στοιχείο
<item>2ο στοιχείο
<item>3ο στοιχείο
</itemize>

Εάν τώρα θέλετε να δημιουργήσετε μια αριθμημένη λίστα, αρκεί να χρησιμοποιήστε τα tags <enum> και </enum> αντί των <itemize> και </itemize>.

Αν μέσα στο έγγραφό σας έχετε συμπεριλάβει ένα κομμάτι κώδικα και θέλετε να το κάνετε να ξεχωρίζει από το υπόλοιπο έγγραφο, τότε περικυκλώστε το από τα tags <verb> και </verb>. Παράδειγμα:

<verb>
#include <iostream.h>

void main()
{
cout << "Hello World !!" << endl;
}
</verb>

9.4 Ειδικοί χαρακτήρες

Μάλλον, μέχρι τώρα, θα έχετε καταλάβει ότι αν θέλετε να χρησιμοποιήσετε τους χαρακτήρες < και > δεν μπορείτε, γιατί χρησιμοποιούνται από την SGML, ώστε να υποδηλώνουν την παρουσία ενός tag. Μην ανησυχείτε, υπάρχει λύση σ' αυτό το πρόβλημα. Έχετε την δυνατότητα να παραστήσετε τους χαρακτήρες αυτούς (αλλά και άλλους όπως θα δούμε στη συνέχεια), χρησιμοποιώντας ειδικούς κώδικες (όπως άλλωστε και στην HTML).

Παρακάτω, θα αναφέρω σε μιά λίστα μερικούς από τους κωδικούς για τους ειδικούς χαρακτήρες. Βέβαια, υπάρχουν περισσότεροι ειδικοί χαρακτήρες από αυτούς, τους οποίους μπορείτε να βρείτε στο Guide των Sgml-Tools.

Εσωτερικά links

H SGML σας παρέχει τη δυνατότητα, ενώ γράφετε ένα κεφάλαιο, να αναφερθείτε με δεσμό (link) σε ένα άλλο κεφάλαιο του εγγράφου σας. Αυτό μπορείτε να το κάνετε δίνοντας έναν εσωτερικό κρυφό δεύτερο τίτλο στο κεφάλαιο που θα θέλετε να αναφερθείτε. Το επόμενο παράδειγμα σας δείχνει πως μπορείτε να το κάνετε αυτό:

<sect1>Τίτλος κεφαλαίου<label id="Κρυφός Τίτλος">

Μετά, όταν θα θέλετε να γράψετε το δεσμό για το κεφάλαιο, θα πρέπει να χρησιμοποιήσετε το εξής tag: <ref id="Κρυφός Τίτλος" name="Όνομα δεσμού">. Στο όνομα δεσμού, δεν είναι ανάγκη να γράψετε τον Τίτλο του κεφαλαίου, αλλά ότι όνομα εσείς επιθυμείτε.

Web links

Ας δούμε τώρα τα tags για να προσθέτετε δεσμούς που έχουν να κάνουν με το Internet, γενικά: To tag
<htmlurl name="Όνομα δεσμού" url="ότι διεύθυνση θέλετε"> σας επιτρέπει να παραπέμψετε τον αναγνώστη του εγγράφου σας σε έναν τόπο του παγκόσμιου ιστού.

Βέβαια, μπορείτε να βάλετε και δεσμούς που να δείχνουν την e-mail διεύθυνση κάποιου ατόμου. Το κατάλληλο tag είναι το: <url name="Όνομα δεσμού" url="mailto:διεύθυνση e-mail">.

Εισαγωγή εικόνων

Τέλος, έχετε τη δυνατότητα να αναφέρεστε σε εικόνες, μέσα στο έγγραφό σας (ακριβώς όπως και στην HTML). Το αντίστοιχο tag είναι το: <img src="όνομα εικόνας">.

9.5 SGML Tools

Τα SGML-Tools αναλαμβάνουν να μετατρέψουν το έγγραφό σας στην τελική του μορφή, την μορφή που εσείς θέλετε. Αν το θέλετε για εκτύπωση ή για απλή αποθήκευση, μπορείτε να το μετατρέψετε σε Postscript. Αν θέλετε να το εκδόσετε στον "κόσμο" μέσω του Internet, θα το μετατρέψετε σε HTML. Αν θέλετε να το διαβάσετε με οποιονδήποτε επεξεργαστή κειμένου στα Windows, θα το κάνετε RTF (rich text format).

Η ηλεκτρονική διεύθυνση των SGML-Tools είναι: http://www.sgmltools.org

Ελέγχοντας το έγγραφό σας

Τα SGML-Tools σας παρέχουν τη δυνατότητα να ελέγξετε αν συγγράψατε σωστά το έγγραφό σας, πρίν το μετρατρέψετε στην επιθυμητή μορφη. Για να το κάνετε αυτό, αρκεί να εκτελέσετε την ακόλουθη εντολή:

$ sgmlcheck έγγραφο.sgml

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

Δημιουργώντας plain text

Για να μετατρέψετε ένα sgml έγγραφο σε απλό text κείμενο, αρκεί να εκτελέσετε:

$ sgml2txt έγγραφο.sgml

Αν τώρα θέλετε το έγγραφό σας να το μετατρέψετε σε μορφή groff για να το χρησιμοποιήσετε σαν man page, τότε εκτελέστε:

$ sgml2txt --man έγγραφο.sgml

Δημιουργώντας LaTex

Παρακάτω, ακολουθούν οι εντολές που μπορείτε να εκτελέσετε, για να μετατρέψετε το έγγραφό σας σε LaTex, Postscript και DVI, αντίστοιχα:

$ sgml2latex έγγραφο.sgml 
$ sgml2latex --output=ps έγγραφο.sgml
$ sgml2latex --output=dvi έγγραφο.sgml

Δημιουργώντας HTML

Η εντολή για να μετατρέψετε το έγγραφό σας σε HTML είναι:

$ sgml2html  έγγραφο.sgml

Μπορείτε, όμως να χρησιμοποιήσετε και την παρακάτω εντολή:

$ sgml2html --imagebuttons έγγραφο.sgml

Η παραπάνω εντολή αντικαθιστά τα "Next", "Previous" και "Contents" που περιέχουν οι σελίδες HTML (για να προχωρήσει ο αναγνώστης στις σελίδες έγγραφο-1.html κλπ. ανάλογα με τα κεφάλαια του εγγράφου) με βελάκια. Τα βελάκια, έπειτα θα είναι τα αρχεία "next.gif", "prev.gif", και "toc.gif".

Δημιουργώντας RTF

Η αντίστοιχη εντολή σ' αυτήν την περίπτωση είναι:

$ sgml2rtf έγγραφο.sgml

9.6 Επίλογος

Πηγές

Για να συγγράψω αυτό το άρθρο συμβουλεύτηκα το Guide των SGML-Tools, το LinuxDoc+Emacs+Ispell HowTo, καθώς και ... τις πολλές ώρες ενασχόλησής μου με τη συγγραφή κειμένων, άρθρων κλπ. σε LinuxDoc.

Κατάργηση του LinuxDoc

Αν επισκεφτείτε την σελίδα των SGML-Tools, θα διαπιστώσετε, ότι το project για το LinuxDoc έχει σταματήσει, και ότι τα SGML-Tools από την έκδοση 2 και μετά υποστηρίζουν το καινούριο DTD, το BookDoc (ενώ για να τα χρησιμοποιήσετε για έγγραφα γραμμένα με LinuxDoc, χρειάζεστε έκδοση 1.χχ.χχ). Τώρα, το κατά πόσο θα καταργηθεί τελείως το LinuxDoc, αυτό εξαρτάται από πολλούς παράγοντες, όπως από το γεγονός ότι όλα τα How-To και FAQ για το Linux, είναι γραμμένα σε LinuxDoc. Ίσως, τελικά, στα ... πληκτρολόγια των Linuxάδων να μην καταργηθεί ποτέ ...


Next Previous Contents