3.8. Jelölt szakaszok
Vissza | 3. fejezet - SGML alapismeretek | Előre

## 3.8. Jelölt szakaszok

Az SGML tartalmaz olyan megoldást, amellyel a dokumentum bizonyos részeit speciális feldolgozásra jelölhetjük meg. Ezeket nevezik „jelölt szakaszoknak”.

3.14. példa - A jelölt szakaszok felépítése
<![ `KULCSSZÓ` [ A jelölt szakasz tartalma. ]]>

A korábbiakban tapasztaltak szerint természetesen a jelölt szakaszokat az SGML részeként a `<!` szimbólummal vezetjük be.

Ezt követően az első szögletes zárójel határolja el a jelölt szakaszt.

Az elemző a feldolgozás során a `KULCSSZÓ` alapján értelmezi az adott jelölt szakaszt.

A második szögletes zárójellel kezdődik a jelölt szakasz tényleges tartalma.

A jelölt szakasz az iménti két szögletes zárójel lezárásával ér véget, majd a `>` szimbólummal visszaváltunk az SGML környezetből a dokumentum környezetébe.

### 3.8.1. A jelölt szakaszok kulcsszavai

#### 3.8.1.1. `CDATA`, `RCDATA`

A kulcsszavakkal a jelölt szakasz tartalmi modelljét tudjuk megváltoztatni.

Az SGML elemző a dokumentum feldolgozása során tárol egy ún. „tartalmi modellt”.

Röviden úgy foglalhatnánk össze, hogy ez a tartalmi modell írja le az elemző részéről várt információkat és azok feldolgozását.

A két ilyen leghasznosabb tartalmi modell a `CDATA` és az `RCDATA`.

A `CDATA` jelentése „Character Data”, vagyis „karakteres adat”. Az elemző ebben a tartalmi modellben kizárólag csak karaktereket lát. Ebben a modellben a `<` és `&` szimbólumok elveszítik különleges jelentésüket.

Az `RCDATA` jelentése „Entity references and character data”, vagyis „egyedhivatkozások és karakteres adatok”. Ebben a tartalmi modellben az elemző karakterekre és egyedekre számít. A `<` szimbólum ilyenkor elveszíti a különleges jelentését, azonban az `&` továbbra is általános egyedek kezdetét fogja jelölni.

Ezek használata különösen hasznos abban az esetben, amikor rengeteg `<` és `&` karaktert tartalmazó nyers szöveget akarunk beilleszteni valahova a dokumentumba. Természetesen ez megoldható úgy is, ha minden `<` szimbólumot `&lt;` karaktersorozattá, illetve minden `&` szimbólumot `&amp;` karaktersorozattá alakítunk, de sokkal könnyebb ezeket a szakaszokat `CDATA` típusúnak megjelölni. Az SGML elemzők ilyenkor tehát figyelmen kívül hagyják a tartalomban talált `<` és `&` szimbólumokat.

### Megjegyzés:

A `CDATA` vagy `RCDATA` kulcsszavakat bemutató SGML példákkal kapcsolatban megjegyezzük, hogy a `CDATA` szakaszok tartalma nem érvényesítődik. Az így beillesztett SGML szöveget valamilyen más módon kell ellenőrizni. Például írjuk meg a karakteres szakasz tartalmát egy másik dokumentumban, ellenőriztessük le, majd másoljuk be a `CDATA` részbe.

3.15. példa - CDATA típusú jelölt szakaszok használata
<para>Ebben a példában láthatjuk hogyan tudunk sok <literal>&lt;</literal> és <literal>&amp;</literal> szimbólumot tartalmazó szöveget elhelyezni a dokumentumunkban. A minta most egy HTML kódrészlet lesz, az ezt övező szöveg (<para>) és (<programlisting>) pedig DocBook.</para> <programlisting> <![CDATA[ <p>Ezzel a példával mutatjuk HTML elemek használatát a dokumentumban. Mivel elég sok relációjelet kell ilyenkor megadni, sokkal egyszerűbb azt mondani, hogy legyen az egész példa egy CDATA szakaszban, mintsem végig egyedekkel jelöljük a balra és jobb nyitó relációjeleket.</p> <ul> <li>Ez egy listaelem</li> <li>Ez egy másik listaelem</li> <li>Ez már egy harmadik listaelem</li> </ul> <p>Itt a vége a példának.</p> ]]> </programlisting>

Ha megnézzük a dokumentum forrását, láthatjuk a jelölésnél alkalmazott megoldásokat.

#### 3.8.1.2. `INCLUDE` és `IGNORE`

Az `INCLUDE` kulcsszó megadásakor a jelölt szakasz teljes tartalma feldolgozódik. Ezzel szemben viszont az `IGNORE` kulcsszó esetén a jelölt szakasz tartalmát figyelmen kívül fogja hagyni az elemző és ezáltal nem dolgozódik fel, tehát nem jelenik meg az eredményben.

3.16. példa - Az `INCLUDE` és `IGNORE` használata jelölt szakaszokban
<![ INCLUDE [ Ez a szöveg feldolgozódik és beillesztődik. ]]> <![ IGNORE [ Ez a szöveg nem dolgozódik fel és nem is illesztődik be. ]]>

Ezek önmagukban nem túlzottan hasznosak, elvégre, ha el akarunk távolítani egy szövegrészt a dokumentumunkból, akkor vagy egyszerűen kivágjuk, vagy megjegyzésbe tesszük.

Sokkal hasznosabbá válhatnak viszont a számunkra, ha észrevesszük, hogy paraméteregyedek segítségével mindez vezérelhető. Emlékezzünk vissza, hogy a paraméteregyedek csak SGML környezetben használhatóak, és a jelölt szakaszokhoz tartozó kulcsszavak pontosan egy ilyen SGML környezetben vannak.

Például tegyük fel, hogy egy dokumentáció nyomtatott és elektronikus változatán dolgozunk egyszerre. Az elektronikus változatban szeretnénk azonban néhány olyan elemet is betenni, amelyeket nem akarunk megjelentetni nyomtatásban.

Hozzunk létre egy paraméteregyedet és legyen az értéke `INCLUDE`. Készítsük el a dokumentumot, és jelölt szakaszokkal határoljuk el a csak az elektronikus változat megjelenő részeket. Ezekben a jelölt szakaszokban a kulcsszavak helyére írjuk be az előbbi paraméteregyedet.

Amikor a dokumentumot nyomtatásra akarjuk előkészíteni, akkor legyen a paraméteregyed értéke `IGNORE`, majd dolgozzuk fel újra az egész dokumentumot.

3.17. példa - Jelölt szakaszok vezérlése paraméteregyeddel
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN" [ <!ENTITY % elektronikus.valtozat "INCLUDE"> ]]> ... <![ %elektronikus.valtozat [ Ez a rész csak a dokumentum elektronikus változatában fog megjelenni. ]]>

A nyomtatott változat előkészítésekor így állítsuk át az egyed értékét:

<!ENTITY % elektronikus.valtozat "IGNORE">

A dokumentum újbóli feldolgozása során a jelölt szakaszok a `%elektronikus.valtozat` értékét fogják kulcsszóként megkapni, és így kimaradnak.

### 3.8.2. Egy kis gyakorlás…

1. A következő szöveggel hozzunk létre egy állományt `szakasz.xml` néven:

   <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN" [ <!ENTITY % szoveges.kimenet "INCLUDE"> ]> <html> <head> <title>Példa a jelölt szakaszok használatára</title> </head> <body> <p>Ez a bekezdés <![CDATA[sok-sok < karaktert (< < < < <) tartalmaz, így érdemesebb CDATA szakaszba tenni]]>.</p> <![IGNORE[ <p>Ez a bekezdés egyértelműen nem fog látszódni az eredményben.</p> ]]> <![ %szoveges.kimenet [ <p>Ez a bekezdés nem fog feltétlenül megjelenni az eredményben.</p> <p>A konkrét megjelenését a %szoveges.kimenet paraméteregyed értéke befolyásolja.</p> ]]> </body> </html>

2. A `osgmlnorm` használatával normalizáljuk ezt az állományt, majd elemezzük az eredményt. Nézzük meg melyik bekezdések tűntek el, melyek jelentek meg és mi történt a CDATA szakaszok tartalmával.

3. A `szoveges.kimenet` értéke legyen `INCLUDE` az `IGNORE` helyett. Futassuk le újra így a normalizálást és vizsgáljuk meg mi változott az eredményben.

Vissza | Fel | Előre
3.7. Állományok tartalmának elérése egyedeken keresztül | Főoldal | 3.9. Befejezés

Ha kérdése van a FreeBSD-vel kapcsolatban, a következő címre írhat (angolul): <questions@FreeBSD.org>.
Ha ezzel a dokumentummal kapcsolatban van kérdése, kérjük erre a címre írjon: <gabor@FreeBSD.org>.