/* генерирование информационной системы об УДК в виде web-ресурса */ main(X) :- XML = readXML("tree"+X+".xml"), numnum := X, itemTable := newHash(), getItemTable(eXElem(XML, "//item")), getXElem(XML, "//UDC") = xElem("UDC", _, C, _), [IT | Rest] = C, toHTML(IT, _, _, _, _) ; getItemTable(Enum) :- exhausted(Enum), !; getItemTable(Enum) :- El = eValue(Enum), ID = getXText(El, "//identifier"), write(ID+nl()), hPut(^itemTable, ID, El), getItemTable(eNext(Enum)) ; toHTML(CurItem, ID, Descr, SubSize, SubRef) :- ID = getXText(CurItem, "//identifier"), Title = sNorm(getXText(CurItem, "//title")), Father = sNorm(getXText(CurItem, "//isPartOf")), Descr = sNorm(getXText(CurItem, "//description")), SubVec = newVector([]), SubRef = newVector([]), subItems(getXConts(CurItem), SubVec, SubRef), SubSize = vLength(SubVec), ( SubSize = 0, ! ## HTML =
УДК _ID;_Descr;вверх домой |
|||||||
|
|||||||
|
Сгенерировано Флэнг-системой из метаописания УДК в формате Dublin Core © 2004 TeaCode.com | |||||||
_createRefs(Str);
), subItems(Rest, SubVec, SubRef) ; subItems([xElem("isReplacedBy", A, C, NS)|Rest], SubVec, SubRef) :- vAdd(SubRef,_C;
), subItems(Rest, SubVec, SubRef) ; subItems([_ | Rest], SubVec, SubRef) :- subItems(Rest, SubVec, SubRef) ; getItems([xElem("item", _, _, _) | Rest]) :- xElem(_,_, _, _), !, [El | getItems(Rest)]; getItems([_ | Rest]) :- getItems(Rest); getItems([]) :- []; correctID(Str) :- V = sToU(Str), corr(V, vLength(V)-1), uToS(V); corr(_, -1) :- true; corr(V, I) :- C = vGet(V, I), (C = ':' ## C = '/'), !, vSet(V, I, '_'), corr(V, I-1); corr(V, I) :- corr(V, I-1); createRefs(Str) :- V = sToU(Str), ResVec = newVector([]), checkCode(V, 0, vLength(V), ResVec), ResVec ; checkCode(Vect, null, LL, _) :- !, true ; checkCode(Vect, N, LL, _) :- N>=LL, !, true ; checkCode(Vect, N, LL, ResVec) :- checkNum(vGet(Vect, N)), !, Code = newVector([]), NN = getCode(Vect, N, LL, Code), C = uToS(Code), Item = hGet(^itemTable, C), ( Item = null, !, vAdd(ResVec, C) ## ( null = getXElem(Item, "/item/item"),!, CC = getXText(Item, "//isPartOf"), vAdd(ResVec, _C;) ## vAdd(ResVec, _C;) ) ), checkCode(Vect, NN, LL, ResVec) ; checkCode(Vect, N, LL, ResVec) :- Text = newVector([]), NN = getText(Vect, N, LL, Text), vAdd(ResVec, uToS(Text)), checkCode(Vect, NN, LL, ResVec) ; checkNum(X) :- X>=49, X<=57; checkText(X) :- (X<<49 ## X>>57); checkNext(X) :- (X=45 ## X=46 ## X>=48, X<=57); getCode(Vect, N, LL, Code) :- N>=LL, !, null; getCode(Vect, N, LL, Code) :- Cha = vGet(Vect, N), checkNext(Cha), !, vAdd(Code, Cha), getCode(Vect, N+1, LL, Code) ; getCode(Vect, N, LL, Code) :- N; getText(Vect, N, LL, Text) :- N>=LL, !, null; getText(Vect, N, LL, Text) :- Cha = vGet(Vect, N), checkText(Cha), !, vAdd(Text, Cha), getText(Vect, N+1, LL, Text) ; getText(Vect, N, LL, Text) :- N; t(X) :- trace("level", 2); t(N) :- trace("level", N);