Scraping script version 2 (CS) http://sourceforge.net/projects/strigil/ 16.6.2012
Popisuje výběr dat ze zdrojového dokumentu / URL Popisuje mapování dat na ontologické prvky Obsahuje instrukce pro zpracování vstupů (datový protokol, kontrola mime type souboru) Skript začíná zpracováním elementu call-template, který volá hlavní template scriptu Výstup: Zpracování skriptu vznikne jeden nebo více RDF souborů. Jeden výstupní soubor obsahuje všechny sémanticky platné RDF trojice. Zvlášť je důležité dodržet vazby blank nodes v jednom RDF souboru.
Kořenový element script @prefix deklarace namespace ontologií @id unikátní identifikátor skriptu @version verze skriptu <>params parametry skriptu <>call-template začátek zpracování skriptu, volá se hlavní template celého skriptu, najčastěji se začíná na pevné URL <>template definice templatů/šablon <?xml version="1.0" encoding="windows-1250"?> <scr:script version= 2.0 xmlns:scr= http://sourceforge.net/projects/strigil/ prefix= rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns# rdfs: http://www.w3.org/2000/01/rdf-schema#...
Element param (parent: params) Deklarace pojmenovaných parametrů skriptu @name jméno parametru @default navrhovaná hodnota může být i v těle elementu, přednost má hodnota v atributu <?xml version="1.0" encoding="windows-1250"?> <scr:script > <scr:params> <scr:param name= currentdate >2011-12-20</scr:param> </scr:params> </sscr:script>
Element meta (parent: script) Instrukce pro zpracování (frekvence spouštění, doména použití skriptu) @status draft skript se nespouští, je ve zpracování released skript je uvolněný @maxrate, frequency regx: [0-9]+[dmYh] Pokud by se skutečná frekvence spouštění měnila, neměla by přesáhnout maxrate @maxrate kolikrát se maximálně spustí skript za časovou jednotku @frequency navrhovaná doba mezi dvěma následujícími spuštěními skriptu <scr:meta domain=www.softender.cz/ frequency= 14d author= Karel Dvořák date= 2011-12-23 status= released maxrate= 1000d />
Element call-template (parent: template, ontoelem,script) Volá template a předává parametry URL, cookies získané v předchozích voláních, RDF kontext, pojmenované parametry <>value-of function vrací pole URL adress, na každou z nich se zavolá template, před samotným spuštěním templatu se provede download URL. <> with-param přiřazuje hodnotu pojmenovaným parametrům volané templatu <> http-param dovoluje nastavit parametry pro volání POST nebo GET a pevné hodnoty cookies. Dynamické cookies se předávají v běhovém prostředí. @type protokol a příkaz pro stažení URL adres (např. http/get) @name jedinečné jméno templatu uvnitř skriptu
Element call-template (parent: template, ontoelem,script) Pokud se volá template uvnitř <>ontoelem předává se v kontextu volání i RDF graf a odkaz na právě zpracovávaný uzel grafu. Tím by měli být použity ve vnořeném volání i stejné blank nodes ID. Volání template uvnitř <>script je první element, který se aktivně zpracovává. Představuje vstupní bod procesu zpracování skriptu. <scr:call-template name= SoftenderContract type= hhtp/get > <scr:value-of select=.column-three a @href /> </scr:call-template>
Element template (parent: script) @name unikátní identifikátor templatu @mime internet media type (např.html/text) <>samplepage URL stránky, která byla vzorem pro sestavení templatu <>params deklarace parametrů templatu <>variables deklarace proměnných, proměnné mají platnost pro template <>assign dosazení do proměnné <>ontoelem mapování dat na ontologii <>call-script asynchronní volání skriptu <scr:template name= SoftenderContract mime= text/html >
Element template (parent: script) Template očekává na vstupu následující parametry: odkaz na stažený soubor (např. InputStream) mime type souboru ověřuje se jestli je s tímto typem kompatibilní cookies získané při stahování URL RDF graf odkaz na uzel v RDF grafu, který se zpracovává a bude se uvnitř templatu rozvětvovat. pojmenované parametry
Element group functionorvaluetype(parent: ontoelem) Skupina zaměnitelných elementů použávaných uvnitř ontoelem elementu <>value-of v tomto kontextu použití je element typu value-oftype. Tento typ umožňuje vnořovat ontologické typy a používat výčtové prvky <>function volání funkce. Definice implementovaných funkcí je součástí samostatného dokumentu. Zatím je implementována funkce []string concatenate(string prefix, []string args) (spojování řetězců ). <>switch výběr hodnoty podle podmínek
Element value-of(in group: functionorvaluetype) Návratová hodnota se hledá podle následující hierachie v pořadí: 1. @text 2. @var 3. @value (pokud je definovaná a atributy 4.,5. nebo 6. vrací neprázdnou hodnotu) 4. @replace 5. @regexp (pole hodnot všech matching groups) 6. @select @property - ontologický typ hodnoty <scr:template name= SoftenderContract >.<scr:value-of select=".column-two p @name property= gr:legalname />...
Element value-of(in group: functionorvaluetype) Typ hodnoty vrácené elementem závisí na typu selektoru. Pro html/text platí: Pokud se vybírá element se stromovou strukturou návratová hodnota je pole html elementů. Pokud se vybírá atribut nebo textový uzel - návratová hodnota je pole textových řetězců. Pro každou vybranou hodnotu se prochází tělo elementu value-of. Další vnořené selektory mohou vybírat pouze z části dokumentu vybrané v nadřazeném value-of elementu. Zpracování tabulky může probíhat např. následujícím způsobem vyberu celý řádek pomocí jednoho value-of a buňky v řádku vybírám pomocí vnořených value-of <value-of select="div#uchazecmore tr:not(.dod)" > <scr:ontoelem rel="pc:tender" typeof="pc:tender"> <scr:ontoelem rel="pc:supplier" typeof="gr:businessentity > </scr:ontoelem > </scr:ontoelem > </value-of>
Element value-of(in group: functionorvaluetype) @value Obsahuje hodnotu výčtového typu ontologie Hodnota platí pokud select, regexp, replace dává neprázdnou hodnotu Nahrazuje hodnotu selektoru na výstupu <scr:switch > <scr:value-of select="div#content th:contains(druh zakázky) + td regexp= "(?/d(/w)) property= pc:kind value= pc:supplies /> <scr:value-of select= div#content th:contains(druh zakázky) + td property= pc:kind value= pc:works /> <scr:value-of select=" div#content th:contains(druh zakázky) + td property= pc:kind value= pc:services /> </scr:switch >... @regexp - regulární výraz (...javase/tutorial/essential/regex/) @replace nahradí všechny capturing groups vyhledané regulárním výrazem za řetězec uvedený v atributu INPUT = "aabfooaabfooabfoob"; REGEXP = "a*b"; REPLACE = "- "; OUTPUT = -foo-foo-foo- ;
Element group functionorvalueselect (parent: assign with-apram call-tamplate) Skupina zaměnitelných elementů použávaných hlavně uvnitř volání templatu nebo v parametrech funkcí. Není možné použít <>switch <>value-of v tomto kontextu použití je element typu value-selecttype. Tento typ nedovoluje přiřazovat ontologickou property a výčtové prvky <> function použitá funkce by měla mít návratový typ vyhovující kontextu, ve kterém se používá. Ve schématu skriptu žádné omezení není. Nejčastěji se očekává, že funkce vrací pole textových řetězců, které se podle kontextu např: převedou na URL adresy. Pokud konverze není možná, nastane běhová chyba programu skriptu.
Element function(in group: functionorvaluetype functionorvalueselect) Volání pojmenované funkce. Definice implementovaných funkcí je/bude součástí jiného samostatného dokumentu. Autor skriptu by měl použít jména známých implementovaných funkcí. <>with-param zadání hodnoty parametru funkce, počet parametrů se řídí signaturou implementované funkce. Program skriptu @text jméno volané funkce <function name="concatenate"> <with-param> <value-of var="baseuri"/> </with-param> <with-param> <value-of select="tr:nthchild(odd)"/> </with-param> </function> se pokusí přetypovat parametry a pokud to není možné, dojde k běhové chybě. <function name= add"> <with-param> <value-of var="counter"/> </with-param> </function>...
Element variables (parent: template) Deklaruje jména proměnných platných v kontextu jednoho templatu. Typ proměnné je pole textových řetězců (string[] a;) @name jméno proměnné Příklad: <variables> <variable name="baseuri"/> <variable name="counter"/> </variables> Element assign(parent: template, value-of) Dosazení hodnoty do proměnné <assign var="baseuri"> <value-of text="http://www.samplepage.com/ "/> </assign> Čtení z proměnné <value-of var="baseuri"/>
Element switch(in group: functionorvaluetype) Vytváří větevní programu skriptu. Vnořené value-of se postupně vyhodnocují a vyhodnocování se zastaví u prvního value-of elementu, který vrací hodnotu. <>value-of - může obsahovat vnořené ontoelementya vyhodnotí se pokud je první v poředí, který se vzhodnotí na neprázdnou hodnotu. <scr:switch > <scr:value-of select="div#content th:contains(druh zakázky) + td regexp= "(?/d(/w)) property= pc:kind value= pc:supplies /> <scr:value-of select= div#content th:contains(druh zakázky) + td property= pc:kind value= pc:works /> <scr:value-of select=" div#content th:contains(druh zakázky) + td property= pc:kind value= pc:services /> </scr:switch >...
Element http-params (parent: call-template) Parametry volání http <>cookies pevné hodnoty cookies. Dynamické cookies se předávají v programu automaticky bez definice ve scriptu. <>with-param hodnoty parametrů jak GET/POST <http-params> <cookies> <cookie name="216-ad" domain="www.samplepage.com"> 5646-464-AD5-AD45654A-AD4-HRVSD5-GAH4-45649</cookie> <cookie name="sfaaa >5S66A5E8EGA654JS6556546;G;4S554</cookie> </cookies> <with-param name="datumod">2012-01-01</with-param> </http-params>
Element ontoelem(parent: ontoelem template value-of) Kostruktor RDF dat. OntoElem se mohou do sebe zanořovat. Pro první ontoelem, který se vyskytne ve skriptu může existovat samostantý RDF graf, protože jeho graf není závislý na žádném kontextu. Proto je možné pro něj vytvořit samostatný výstup. @rel ontologický predikát, popisuje vztah mezi objektem a subjektem v RDF trojci. @typeof ontologický typ pro uzel blank node nebo rdf:ressource @about rdf:ressource URI, pokud se dá definovat pevnou hodnotou <>value-of pokud value-of neobsahuje @property ani zanořené ontoelem elementy chápe se výsledek selektoru jako URI označující rdf:ressource ontologického typu definovaného v ontoelem elmentu. Má stejný význam jako hodnota @about.
RDF výstup blank node <scr:template name= SoftenderContract >... <scr:ontoelem rel="pc:bid typeof="pc:bid" >...<scr:call-template name= Foo >... pc: - jmenný prostor ontologie deklarovaný v prefix atributu script elementu Když ve <>value-of není uveden atribut @about vzniká blank node typu @typeof Blank node musí mít jednoznačné ID v rámci jednoho výstupu Template Foo získá RDF graf z kontextu volání a odkaz na právě zpracovávaný blank node (na výstupu templatu budou trojice vztahující se k objektu typu pc:bid)
Příklad zdroj http://www.semily.cz/cz/podnikatel/verejne-zakazky/archiv-verejnychzakazek/nakup-4-elektrokol-pro-sportovni-centrum-semilyhtml pro RDF výstup ve fiktivní ontologii : http://foo/publiccontracts.owl (neexistuje pouze fiktivní) Vstup
<?xml version="1.0" encoding="utf-8"?> <scr:script xmlns:scr="http://sourceforge.net/projects/strigil" version="2.0" prefix="rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns# rdfs: http://www.w3.org/2000/01/rdf-schema# foo: http://foo/publiccontracts.owl# foaf: http://xmlns.com/foaf/0.1/primarytopic#" id="semilyscript"> <scr:meta author="xx" domain="www.semily.cz" date="2012-06-16" frequency="1m" maxrate="1d" status="released"/> <scr:call-template name="maintemplate" type="http/get"> <scr:value-of text="http://www.semily.cz/cz/podnikatel/verejne-zakazky/archiv-verejnychzakazek/nakup-4-elektrokol-pro-sportovni-centrum-semilyhtml"/> </scr:call-template> <scr:template name="maintemplate" mime="text/html"> <scr:ontoelem typeof="foo:publiccontract"> <scr:ontoelem rel="foo:submittedby" typeof="foaf:organization"> <scr:value-of select=".mod-vz-detail table tr(/td/text()='zadavatel')/td[2]" property="foaf:name"/> </scr:ontoelem> <scr:ontoelem rel="foo:disclosedin" typeof="foaf:document"> <scr:value-of select=".mod-vz-detail table tr(/td/text()='připojené soubory')/td[2]/a(text()='oznámení o zakázce')/@href"/> </scr:ontoelem> <scr:value-of select=".mod-vz-detail table tr(/td/text()='platnost od')/td[2]" property="foo:validfrom"/> <scr:value-of select=".mod-vz-detail table tr(/td/text()='platnost do')/td[2]" property="foo:validuntil"/> <scr:value-of select=".mod-vz-detail table tr(/td/text()='název poptávky')/td[2]" property="foo:hasdescription"/> </scr:ontoelem> </scr:template> </scr:script> Příklad
Příklad očekávaný výstup subject predicate object <http://www.semily.cz/customers/semily/st orage/seznamverzakazky/1297839196.pdf> <Id:1> rdf:type rdf:type foaf:document <http://foo/publiccontracts.owl#p ubliccontract> <Id:7> rdf:type foaf:organization <Id:1> <http://foo/publiccontracts.owl# submittedby> <Id:7> <Id:1> <http://foo/publiccontracts.owl# validfrom> "2011-02-16T00:00:00+01:00"@cs <Id:1> <http://foo/publiccontracts.owl# validuntil> "2011-03-04T12:00:00+01:00"@cs <Id:1> <http://foo/publiccontracts.owl# disclosedin> <http://www.semily.cz/customers/ semily/storage/seznamverzakazky/1297839196.pdf> <Id:1> <http://foo/publiccontracts.owl# hasdescription> <Id:7> foaf:name "SC města X p.o."@cs "Nákup 4 elektrokol pro Sportovní centrum Semily"@cs