Skip to content

Instantly share code, notes, and snippets.

View line-o's full-sized avatar
🌱
weeding the garden

Juri Leino line-o

🌱
weeding the garden
View GitHub Profile
@line-o
line-o / inspect-sequence-types.xq
Last active November 6, 2024 16:41
proof of concept to use the output of the proposed function fn:type to find the most specific shared type among a sequence of items
(:
explore if the proposed XQuery 4 function fn:type can be used
to inspect sequences of items to find the most specific shared
type among them
:)
declare namespace ist="//line-o.de/ns/inspect-sequence-types";
declare function ist:find-shared-type ($acc as xs:string*, $next as xs:string*) as xs:string* {
let $count-a := count($acc)
let $count-n := count($next)
@line-o
line-o / enc.xq
Last active October 9, 2024 15:55
xquery version "3.1";
declare namespace enc="//-o/ns/xquery/encoding";
import module namespace bin="http://expath.org/ns/binary";
declare function enc:fix ($string as xs:string) as xs:string {
analyze-string($string, "(\\u00([0-9a-z]{2})\\u00([0-9a-z]{2}))")/element()
=> for-each(enc:process#1)
=> string-join("")
@line-o
line-o / emt.xq
Last active July 2, 2024 14:08
Preserve namespaces when traversing trees (see also the clean solution that works in Saxon https://xqueryfiddle.liberty-development.net/6qVSgfh/6)
xquery version "3.1";
module namespace emt="//external-module-test";
declare function emt:transform($node as node()) as node()+ {
typeswitch ($node)
case document-node() return document { emt:transform($node/element()) }
case attribute(xml:id) return (
attribute old-id { $node/string() },
attribute xml:id { "s" || $node }
@line-o
line-o / zip.xq
Last active December 5, 2023 19:48
Python like zip function in Xquery
import module namespace array="http://www.w3.org/2005/xpath-functions/array";
import module namespace map="http://www.w3.org/2005/xpath-functions/map";
declare namespace _="//line-o.de/ns/underline";
declare function _:nth-item ($sequence as item()*, $pos as xs:integer) as item()* {
$sequence[$pos]
};
declare function _:reduce-sequences (
@line-o
line-o / prob.xqm
Last active September 22, 2023 19:17
Selecting items skewed by weights was an interesting problem to solve
module namespace prob = "//line-o.de/ns/prob";
declare namespace map = "http://www.w3.org/2005/xpath-functions/map";
declare namespace array = "http://www.w3.org/2005/xpath-functions/array";
(: select by p from prepared sequence of options :)
declare
function prob:select-by-p($options as array(*)+, $p as xs:double) as item()* {
fold-left($options, (),
prob:select(?, ?, $p)
@line-o
line-o / has-cdata.html
Last active February 11, 2023 19:58
Illustrate a bug in existdb that leads to exist.log polluted with error messages
<html>
<body>
<script type="text/javascript"><![CDATA[ console.log(true && 1 < 2) ]]></script>
</body>
</html>
@line-o
line-o / orcid.xqm
Last active February 10, 2023 09:46
Validate ORCIDs (both format and checksum)
xquery version "3.1";
module namespace orcid="orcid/validate";
declare variable $orcid:R := 2;
declare variable $orcid:M := 11;
declare variable $orcid:format := '^(\d{4}-\d{4}-\d{4}-\d{3}|\d{15})[0-9X]$';
declare variable $orcid:is-valid-format := matches(?, $orcid:format);
declare variable $orcid:expected-sum := map{
'1':1, '2':2, '3':3, '4':4, '5':5, '6':6, '7':7, '8':8, '9':9, 'X':10
@line-o
line-o / expected-output.txt
Last active January 19, 2023 14:47
fun with permissions
0600 (.rw-------) -> 0700 (.rwx------)
0755 (.rwxr-xr-x) -> 0755 (.rwxr-xr-x)
0660 (.rw-rw----) -> 0770 (.rwxrwx---)
0664 (.rw-rw-r--) -> 0775 (.rwxrwxr-x)
0666 (.rw-rw-rw-) -> 0777 (.rwxrwxrwx)
0622 (.rw--w--w-) -> 0733 (.rwx-wx-wx)
0777 (.rwxrwxrwx) -> 0777 (.rwxrwxrwx)
@line-o
line-o / safe-ebv.xq
Last active March 2, 2023 19:23
A safe way to evaluate the effective boolean value of a sequence of items -> anything that cannot be evaluated is false
xquery version "3.1";
declare function local:safe-effective-boolean-value-if (
$result as item()*
) as xs:boolean {
try {
if ($result)
then true()
else false()
} catch err:FORG0006 {
@line-o
line-o / latest-news.html
Last active June 19, 2023 14:53
Prerender HTML with eXist-db's templating library
<main class="news-list__latest">
<ul>
<li data-template="templates:each" data-template-from="articles" data-template-to="article">
<a data-template="pr:article-link"/>
</li>
</ul>
</main>