Redagowanie dokumentów XML w edytorze Emacs: tryb nxml

Transkrypt

Redagowanie dokumentów XML w edytorze Emacs: tryb nxml
Redagowanie dokumentów XML
w edytorze Emacs: tryb nxml
Tomasz Przechlewski
Spis treści
1.
2.
3.
4.
5.
Konfigurowanie pliku .emacs .........................................................................
Użyteczne skróty klawiszowe .........................................................................
Pakiet xmlunicode.el ....................................................................................
Instalowanie Emacsa i trybu nxml w systemie MS Windows ..........................
Dokumentacja/oprogramowanie .....................................................................
1
2
4
4
4
1. Konfigurowanie pliku .emacs
Minimalna konfiguracja nxml wymaga dopisania do pliku .emacs następujących poleceń:
(load "rng-auto.el")
(add-to-list 'auto-mode-alist (cons (concat "\\."
(regexp-opt '("xml" "xsd" "rng" "xslt" "xsl" "svg" "rss") t) "\\'")
'nxml-mode))
Do walidacji redagowanego dokumentu nxml wymaga schematu w formacie RNC.
Dystrybucja nxml zawiera kilka popularnych schematów oraz plik konfiguracyjny
NXML-DIR/schema/schemas.xml zawierający reguły, według których ustalane jest
automatycznie jaki schemat ma zostać przypisany do jakiego dokumentu. Reguły
przypisania są następujące:
<uri pathSuffix='.p' typeId='T'/>
Przypisz plikom kończącym się na .p typ T
<namespace ns='n' typeId='T'/>
Przypisz plikom, dla których element-korzeń jest z przestrzeni nazw n typ T
<documentElement prefix='n' localname='e' typeId='T'/>
Przypisz plikom, dla których korzeniem jest element e z przestrzeni nazw n typ
T. Jeżeli atrybut prefix='n' jest pominięty, to przestrzeń nazw korzenia nie jest
brana pod uwagę.
<typeId='T' uri='s'/>
Zwiąż typ T ze schematem s. Napis T jest dowolnym napisem -- identyfikatorem
typu. Atrybut uri zawiera adres URI schematu. Względne adresy URI są interpretowane jako odnoszące się do katalogu zawierającego plik schemas.xml.
Zamiast atrybutu typeId elementy namespace, documentElement, uri mogą zwierać atrybut uri, zawierający adres URI schematu. Lepiej jednak definiować regułę
1
Redagowanie dokumentów XML w edytoprzypisania poprzez typeId.
to na
definiowanie wielu reguł odnoszących
rze Pozwala
Emacs: tryb
nxml
się do tego samego schematu. Przykład
<uri pattern="*.xsd" typeId="XML Schema"/>
<namespace ns="http://www.w3.org/2001/XMLSchema" typeId="XML Schema"/>
<documentElement localName="schema" typeId="XML Schema"/>
<typeId id="XML Schema" uri="/usr/local/schemas/xmlschema.rnc"/>
Jeżeli adres URI zmieni się, to wystarczy dokonać poprawki raz, mianowicie zmienić
wartość atrybutu uri w elemencie typeId.
Plik schemas.xml może także znajdować się w tym samym katalogu co redagowany
dokument. Co więcej może on zostać utworzony automatycznie. Wybranie z menu
XML → Set Schema kończy się wyświetleniem komunikatu: Save type identyfier
to ŚCIEŻKA/schemas.xml. Wybranie Yes spowoduje dopisane odpowiedniej reguły
przypisania schematu do pliku ŚCIEŻKA/schemas.xml.
Jeżeli nie posiadamy schematu w formacie RNC, to można go wygenerować korzystając z aplikacji trang [http://www.thaiopensource.com/relaxng/trang.html]. Trang
potrafi tłumaczyć składnie szablonów zapisanych w formatach DTD, XSD, RNG
i RNC. Przykładowo: trang -I xsd -O rnc plik.xsd plik.rnc zamienia szablon
z formatu XSD na format RNC.
2. Użyteczne skróty klawiszowe
W poniższym opisie symbol C- oznacza jednoczesne naciśnięcie klawisza Control
i innego klawisza, np. C-Enter to naciśnięcie Enter przy wciśniętym klawiszu Control. Podobnie kombinacja C-c-C-i oznacza naciśnięcie klawiszy c a następnie i przy
wciśniętym klawiszu Control. Symbole klawiszowe Emacsa wydają się dziwne i nieintuicyjne dla początkujących, ale można się przyzwyczaić. Wiele poleceń można
uruchomić poprzez wybór myszą z menu zamiast korzystać ze skrótów klawiszowych. Funkcje udostępnione przez tryb nxml są dostępne w pozycji XML menu.
C-Enter
Kontekstowe uzupełnienie nazw znaczników/atrybutów. Wpisanie znaku < i naciśnięcie C-Enter powoduje wyświetlenie listy poprawnych -- tj. możliwych do
wstawienie w miejscu kursora -- znaczników. Znacznik można wybrać wskaźnikiem myszy lub dopisać początkowe znaki nazwy i powtórnie nacisnąć C-Enter.
Po wstawieniu nazwy otwierającego znacznika, naciśnięcie C-Enter kolejny raz
spowoduje wyświetlenie listy dostępnych atrybutów. Wstawiamy je analogicznie
jak nazwę znacznika. Emacs nie wstawia zamykającego znaku >. Znak > oraz
znacznik zamykający należy wstawiać korzystając ze skrótów klawiszowych Cc-C-i oraz C-c-C-b.
C-c-C-i
Domknięcie znacznika dla elementu ,,wierszowego''. Należy stosować w sytuacji gdy wstawiony została nazwa znacznika otwierającego plus ewentualne nazwy/wartości atrybutów, ale nie wstawiono zamykającego znaku > . Emacs wstawi znak > oraz znacznik zamykający a następnie umieści kursor pomiędzy znacznikami.
C-c-C-b
Domknięcie znacznika dla elementu ,,blokowego''. Działanie jest podobne do Cc-C-i, różni się tylko sposobem formatowania. Należy stosować w sytuacji gdy
2
Redagowanie dokumentów XML w edytowstawiony została nazwa
otwierającego
plus ewentualne nazwy/warrze znacznika
Emacs: tryb
nxml
tości atrybutów, ale nie wstawiono zamykającego znaku > . Emacs wstawi znak
>, potem znacznik zamykający a następnie umieści kursor w pustym wierszu pomiędzy znacznikami.
C-c-C-f
Jeżeli otwierający znacznik jest kompletny (tj. został zakończony znakiem >), to
wstawia znacznik zamykający.
C-c-C-n
Przesuwa kursor do miejsce, w którym struktura dokumentu zawiera błąd.
W wierszu minibufora zostanie wyświetlony komunikat o błędzie.
Reasumując: jeżeli nie wiesz jaki znacznik wstawić w określonym miejscu wpisz <
i naciśnij C-Enter (por. rys 1 (Dodanie elementu z uzupełnienia) ).
Rysunek 1. Dodanie elementu z uzupełnienia
Jeżeli nie pamiętasz nazwy atrybutu, to dodaj odstęp po nazwie otwierającego znacznika i także naciśnij C-Enter (por. rys 2 (Dodanie atrybutu z uzupełnienia) ).
Rysunek 2. Dodanie atrybutu z uzupełnienia
3
Redagowanie dokumentów XML w edytorze Emacs: tryb nxml
3. Pakiet xmlunicode.el
Aby wygodniej posługiwać się Unicode można zainstalować pakiet xmlunicode Normana Walsha [http://norman.walsh.name/2003/10/03/xmlunicode]. W tym celu należy pobrać xmlunicode.el [http://nwalsh.com/emacs/xmlchars/xmlunicode.el]
oraz unichars.el [http://nwalsh.com/emacs/xmlchars/unichars.el]). Instalacja polega na skopiowaniu ww. plików do katalogu czytanego przez Emacsa przy starcie (np.
site-lisp); następnie należy określić wartość zmiennej unicode-character-list-file w pliku xmlunicode.el. Żeby było łatwiej można dopisać w ~/.emacs:
(define-key global-map (kbd "C-c u") 'unicode-character-insert-char )
(autoload 'unicode-character-insert "xmlunicode" "Unicode support for XML" t)
(autoload 'unicode-character-insert-char "xmlunicode" "Unicode support for XML" t)
(autoload 'unicode-character-menu-insert "xmlunicode" "Unicode support for XML" t)
Teraz naciskając C-c u można wstawić dowolny znak Unicode z minibufora (z uzupełnianiem (completion) oczywiście). Funkcję unicode-character-menu-insert,
pozwalającą na wybór znaku przez wskazanie myszą, można dopisać do menu. Funkcja unicode-character-menu-insert obsługuje rzecz jasna tylko znikomą część
znaków Unicode -- te najczęściej używane. Menu zawierające wszystkie znaki raczej
byłoby niewygodne w użyciu. NB, to co wyświetlane jest w menu jest zdefiniowane
w zmiennej unicode-character-menu-alist.
4. Instalowanie Emacsa i trybu nxml
w systemie MS Windows
Należy pobrać i rozpakować plik emacs-22.2-bin-i386.zip [http://ftp.gnu.org/
gnu/emacs/windows/emacs-22.2-bin-i386.zip] w wybranym katalogu, np. c:\emacs
\. Następnie pobrać i rozpakować w katalogu EMACS-DIR/site-lisp (EMACSDIR oznacza katalog główny instalacji Emacsa) archiwum zawierające tryb
nxml [http://gnu.univ.gda.pl/~tomasz/Download/nxml/]. W katalogu EMACS-DIR/
site-lisp/nxml-mode-20041004/win32 znajduje się plik konfiguracyjny site-start.el. Należy go przenieść do katalogu EMACS-DIR/site-lisp. To wszystko.
Emacsa uruchamia się poprzez program runemacs.exe znajdujący się w katalogu
EMACS-DIR/bin.
5. Dokumentacja/oprogramowanie
1. James Clark, nXML mode, http://www.thaiopensource.com/nxml-mode/
2. John W. Shipman, XML document authoring with emacs nxml-mode, http://
www.nmt.edu/tcc/help/pubs/nxml.pdf
3. Michael Fitzgerald, Edit XML Documents with Emacs and nXML, http://
oreilly.com/catalog/xmlhks/chapter/hack12.pdf
4. James Clark, Trang. Multi-format schema converter based on RELAX NG, http://
www.thaiopensource.com/relaxng/trang.html
Ten dokument w formacie: pdf [./nxml.pdf] oraz xml [./nxml.xml].
4