
Podatki, ki sodijo v vsebinsko predlogo, so večinoma podatki z razmeroma natančno opredeljeno strukturo. Pri pripravi vsebinskih predlog je zato smiselno najprej identificirati področja dokumenta, v katerih se podatki pojavljajo, v nadaljevanju pa ugotoviti, ali se ponavljajo, kakšna je struktura podatkov, kaj so viri teh podatkov, ali je mogoče sestaviti šifrante vrednosti ipd. Šele ko so ti parametri znani, je smiselno začeti uvajanje v predloge oz. druge elemente.
V Microsoftovem Wordu imamo za gradnjo vsebinskih predlog na voljo že omenjene gradnike dokumentov, kontrolnike (content controls), ki olajšajo neposredni vnos, še iz prejšnjih različic pa so znana polja (fields), zaznamki (bookmarks) in lastnosti dokumenta (document properties). V Wordu 2007 oz. Officeu 2007 so slednje bistveno obširneje podprte (vrednosti se zapišejo v datoteko v obliki XML, dosegljive so skozi »prijazen« uporabniški vmesnik, t.i. Ploščo za dokumente (Document Information Panel). Ta je dodatno razširljiva z obrazci, ki jih sproducira Infopath, kar s seboj prinese vso moč izdelave vnosnih mask, avtomatizacije vnosa ter »priklapljanja« na obstoječe šifrante podatkov ne glede na vir (zbirke podatkov, spletni servisi ipd.) ter seveda preverjanje veljavnosti podatkov. Če pa je komu Infopath preveč ali odveč, lahko za preverjanje veljavnosti uporabi tudi nekoliko manj prijazno orodje znotraj Worda, ki to omogoči s pripenjanjem sheme XML dokumentu.
LASTNOSTI DOKUMENTA IN POLJA
Microsoft je že od nekdaj podpiral opredelitev metapodatkov (lastnosti) datoteke. V datotečnem sistemu NTFS je lastnosti zapisoval v binarno datoteko samo ali pa t.i. alternate data stream (www.flexhex.com/docs/articles/alternate-streams.phtml) . Z uvedbo zapisa OpenXML pa so metapodatki dokumenta zapisani v posebnih datotekah XML. Praviloma so te datoteke vsaj tri, in sicer app.xml, core.xml ter custom.xml.

V datoteki core.xml so osnovne lastnosti, kot so Naslov, Zadeva, Avtor in Ključne besede itd., ki se vsaj deloma prekrivajo tudi s standardno opredeljenimi lastnostmi iz Doublin Core Metadata Initiative (http://dublincore.org/). Lastnosti, ki se ne prekrivajo z DC, pa so v tej datoteki, po mojem vedenju izhajajo iz zgodovine paketa MS Office. Večino teh lastnosti je mogoče vpisati prek Plošče za dokumente (Document Information Panel), ki jo vsebujejo MS Word, Excel in PowerPoint.

Ploščo je mogoče prikazati z izbiro Gumb Office/ Pripravi/ Lastnosti. Priporočam, da uporabnike spodbudite k vpisovanju lastnosti dokumenta tako, da v predlogi dokumenta označite izbiro Razvijalec/ Plošča za dokumente in izberete možnost »Ploščo z informacijami o dokumentih vedno prikaži pri odpiranju dokumenta in prvem shranjevanju.«
Dodatne lastnosti so večinoma shranjene v datoteki app.xml in se pokažejo na »star« način v grdem pogovornem oknu, če v Plošči za dokumente izberete Dodatne lastnosti.

Na zadnjem zavihku tega pogovornega okna pa lahko dodam še poljubne lastnosti dokumenta, za katere menim, da bi bile koristne. Nekoliko skrito, pa vendar. Te lastnosti se shranijo v datoteko custom.xml.
Po mojem najbolj spregledana možnost je ta, da lahko lastnosti uporabim kot del dokumenta. Vstavljanje vrednosti na »lep« način s kontrolniki je sicer Microsoft predvidel le za nekatere lastnosti (izbira Vstavljanje/ Hitri deli/ Lastnosti dokumenta). Po kakšnem ključu se je Microsoft odločil, katere lastnosti je mogoče »lepo« vstaviti, je meni čista skrivnost. No, je, kar je. Druge lastnosti lahko vstavim v kontrolnike po nekoliko bolj zapletenem postopku (z ukazom v VBA, ki je nakazan v nadaljevanju, ko bom pisal o kontrolnikih, vendar je potrebno osnovno poznavanja XPatha), ali pa jih vstavim skozi izbiro Vstavljanje/ Hitri deli/ Polje/ Podatki o dokumentu. V samem dokumentu ne bodo videti tako »luksuzni«, vendar je postopek preprost in hiter.
Polja so posebni »predalčki«, ki jih je moč vstaviti v dokument in v katerih je vsebina, ki se običajno v končnem dokumentu vidi. Polja vsebujejo veliko Wordove »moči«– vsebujejo lahko lastnosti dokumenta oz. metapodatke, ki jih vpiše avtor (npr. kategorija dokumenta, različica, stanje ipd.) kot tudi metapodatke, za katere sicer »skrbi« Word (npr. podatki o tem, kdaj je bil dokument narejen, kdo ga je zadnji shranil ipd.). V poljih lahko prikažem, nastavim ali povečam števce (strani, odsekov, odstavkov, slik, ali celo lastne števce), ob dvokliku polja pa lahko tudi sprožim kako dejanje (npr. odpri pogovorno okno za nov dokument, shrani dokument …). In ta polja lahko vstavimo kamorkoli v dokument!
OFFICEOVI KONTROLNIKI
Wordovi kontrolniki olepšajo in olajšajo vnos podatkov v pripravljen dokument, omogočajo sklicevanje na enkrat vnesene vrednosti ter nadzor veljavnosti podatkov. V nasprotju s kontrolniki AcitveX in kontrolniki obrazca se Officeovi kontrolniki ob tiskanju dokumenta ne natisnejo, v čemer so podobni zaznamkom. Po drugi strani pa so v nasprotju z zaznamki, ki so v dokumentu slabo sledljivi, uporabniku dobro vidni. Prav tako za osveževanje vsebine kontrolnikov ni treba posebej skrbeti, kot je to potrebno pri poljih. Tako na neki način združujejo najboljše lastnosti kontrolnikov ActiveX, zaznamkov in polj.
Kontrolnikov je več vrst. Najpreprostejša (Obogateno besedilo in Besedilo) ne potrebujeta posebnega komentarja. Uporabimo ju za označevanje dela, kjer mora uporabnik vstaviti besedilo. Kontrolnik slike je uporaben, kadar želimo vnaprej nastaviti lastnosti vstavljene slike (npr. velikost, napis slike, prosojnost, okvir ipd.), uporabniku pa pustiti možnost, da sliko dejansko vstavi. Kontrolnik Izbirnik datuma je primeren za vstavljanje datuma, kjer lahko »format« datuma opredelimo, kakor nam srce poželi, kontrolnika Kombinirano polje in Spustni seznam uporabimo za vstavljanje izbrane vrednosti iz šifranta, posebej zanimiv pa je kontrolnik Galerija gradnikov, v katerem lahko z nastavitvijo filtra prikažemo seznam (predolged) izbranih gradnikov. Vendar pozor, v kontrolniku se ne da prikazati vseh galerij, tako da je potrebno nekaj razmisleka, preden se lotite razvrščanja obstoječih gradnikov v galerije. Ne pozabimo, da velja tudi obratno – tak ali drugačen kontrolnik je lahko del gradnika.
Kontrolnike lahko vežem na element v datoteki XML, ki jo spravimo v datoteko novega formata (.docx). To sicer lahko delam ročno (kar ni ravno trivialno), programsko (http://msdn.microsoft.com/en-us/library/bb243814.aspx), za ustvarjalce predlog pa priporočam orodje Content Control Toolkit (www.codeplex.com/dbe) , kjer je moč te povezave ustvariti s klikanjem. Najprej naredim t. i. datoteko Custom XML, v kateri ustvarim potrebno strukturo XML, na katero bom vezal kontrolnike. Od tu naprej pa orodje omogoča metodo povleci in spusti.
UPORABA V PRAKSI
In zakaj bi to hotel početi? No, razlogov je več. Prvič, če mora kak programer iz tako pripravljenega dokumenta potegniti podatke, potrebne npr. za ustrezno arhiviranje (npr. številko zapisnika seje uprave), je to preprosto narediti, saj odpre .docx datoteko, ki je navadna stisnjena datoteka, poišče ustrezen del XML in ga prebrska, kar je v zadnjih nekaj letih najbolj standardno opravilo programerjev. Seveda pa koristi od tega nimajo samo programerji.
Oglejmo si primer, v katerem sem pripravil vsebinsko predlogo za vabilo in zapisnika sestanka v enem dokumentu. Tako v vabilu kot v zapisniku se pojavlja isti datum – to je datum sestanka. Le zakaj bi ga moral uporabnik dvakrat vpisati? Rešitev je v tem, da vstavim dva kontrolnika za datum (lahko tudi enega za datum, drugega »read only« pa npr. besedilnega) in ju povežem z istim vnosom XML. Ko uporabnik spremeni vsebino prvega, se njegova vsebina prepiše v XML, od koder drug kontrolnik »samodejno« potegne spremenjeno vsebino.

Kako to naredim? Najprej v Wordu prikažem zavihek za razvijalca (Wordove možnosti/ Priljubljeno/ Prikaži jeziček za razvijalca). Na njem s klikom kontrolnika Izbirnik datuma vstavim prvi kontrolnik ter popravim besedilo/navodilo v načinu načrtovanja. Potem prikažem lastnosti kontrolnika, nastavim obliko datuma ter določim, naj se vsebina pri preslikavi shrani kot besedilo.

V nadaljevanju vstavim drugi kontrolnik, tokrat izberem kar kontrolnik besedila. Od vrste kontrolnika je namreč odvisen predvsem uporabniški vmesnik, in v tega datuma ne bom vpisoval (ker se bo prepisal iz prvega), tako da me dodatne lastnosti kontrolnika pravzaprav ne zanimajo.

Označim možnost, da vsebine ni mogoče urejati ter da kontrolnika ni mogoče izbrisati (da ne bo zmede, saj bo vsebino prepisal Word sam iz prvega kontrolnika).
Dokument shranim in ga odprem s programom Content Control Toolkit.

Ustvarim nov Custom XML Part in v Edit View dotipkam spodnje besedilo:
< ?xml version="1.0" encoding="UTF-8"?>
< df:vabilo xmlns:df="http://df.si">
< df:datum> < /df:datum>
< /df:vabilo>

Spremenim pogled v »Bind view« ter polje datuma povlečem najprej na kontrolnik DatePicker potem pa še na kontrolnik PlainText. Rezultat je povezava z vpisanim XPathom.

Shranim, odprem dokument in preskusim. Ker pa kontrolnik določa samo način vnosa podatkov (spustni koledar), ne pa tudi, kateri podatki so veljavni in kateri ne, lahko v kontrolnik neposredno vpišem še karkoli.
Da vsaj deloma zmanjšam možnost napake ob neposrednem vnosu, lahko tako pripravljen dokument povežem še s shemo XML, po kateri bo Word ocenil, ali je konkreten vnos pravilen.
Kako tako shemo pridelam? Malo sem brskal po internetu, pa sem hitro ugotovil, da bom v primeru, da moram shemo pridelati na roke, na to temo lahko še veliko spisal. Zato sem raje začel z datoteko XML, v kateri so podatki zapisani, in z orodjem (trang) pridelal »osnovo« sheme (glej www.dotkam.com/2008/05/28/generate-xsd-from-xml/) . Nekaj podobnega menda naredi tudi Microsoftov XML Schema Definition Tool (Xsd.exe). V nadaljevanju sem »osnovo« dopolnil, saj sem z nekaj brskanja naletel na možnost, da omejim tip »string« v shemi z uporabo t.i. regularnih izrazov (www.w3.org/TR/xmlschema-2/#regexs). Nekaj tipkanja in poskušanja, pa sem pridelal shemo za zgornji primer, ki omejuje datume na vnos v obliki podobni datumu (ena ali dve števki, pika, presledek, ena ali dve števki, pika, presledek, štiri števke). Ni popolno, a bolje kot nič:
< ?xml version="1.0" encoding="UTF-8"?>
< xs:schema xmlns:xs="www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://schematest.si" xmlns:test="http://schematest.si">
< xs:element name="root">
< xs:complexType>
< xs:sequence>
< xs:element ref="test:datum"/>
< /xs:sequence>
< /xs:complexType>
< /xs:element>
< xs:element name="datum">
< xs:simpleType>
< xs:restriction base="xs:string">
< xs:pattern value="\d{1,2}\.\s\d{1,2}\.\s\d{4}"/>
< /xs:restriction>
< /xs:simpleType>
< /xs:element>
< /xs:schema>
Mimogrede: precej boljšo shemo, ki pa bi bila manj funkcionalen zgled, bi pridelal, če bi datum, ki ga izberem v kontrolniku, shranil v obliki xsd:date, za kar bi moral spremeniti lastnost kontrolnika Izbirnik datuma (glej sliko 7) in namesto »Vrednost XML pri preslikavi shrani v naslednji obliki: Besedilo (enako kot prikaz)« izbrati »xsd:date«. Potem bi lahko v shemi namesto čaranja z vzorci uporabil boljši, preprostejši in natančnejši »vgrajeni« tip xsd:date.
NEDOKONČANA ZGODBA
Tako, na kratko sem opisal »moč« metapodatkov v Wordu. Zgodba o metapodatkih pa še zdaleč ni končana. Samo bežno sem omenil povezavo s programom Infopath, s katerim lahko vnos metapodatkov centraliziram na Plošči za dokumente. Celotno ploščo je namreč moč zamenjati z Infopathovim obrazcem. Precej prinese tudi povezava s strežnikom SharePoint, ki Wordovim, Excelovim in PowerPointovim »notranjim« lastnostim dokumenta doda še lastnosti dokumentne knjižnice v strežniku. Tako prek vnosa na plošči za dokumente ali z vrednostjo v kontrolniku v dokumentu lahko nastavljam vrednosti, ki jih potem lahko uporabim npr. v Sharepointu kot kriterij za filter pogleda ali pa kot vrednosti, s katerimi upravljam delovni tok. In tukaj zgodbo o predlogah končam. Vse do zdaj opisane elemente je sicer treba še povezati v smiselno celoto ter integrirati z obstoječim uporabniškim vmesnikom paketa Office, vendar je to že precej »programerska« tema, ki pa se je morda dotaknem ob kaki drugi priložnosti.
Moj mikro, Januar 2010 | Domen Ferbar