Multi-Saxon

Multi-Saxon: parallell XSLT-bearbetning av stora TEI-korpusar
Multi-Saxon fyller en kännbar lucka bland XML-verktygen genom att möjliggöra parallell körning av XSLT 2.0- och 3.0-transformationer som LXML (ett populärt XML-bibliotek för Python) inte klarar. Multi-Saxon är utformat särskilt för stora samlingar av XML-TEI-dokument och kortar bearbetningstiden avsevärt genom effektiv parallellkörning.
Huvudfunktioner
- Avancerat XSLT-stöd: bearbetar XSLT 2.0- och 3.0-transformationer bortom LXML:s förmåga
- Parallell bearbetning: kortar transformationstiden dramatiskt för stora dokumentsamlingar genom parallellisering
- TEI-optimerat: särskilt konstruerat för XML-dokument enligt Text Encoding Initiative (TEI)
- Skalbar prestanda: hanterar effektivt korpusar från hundratals till tusentals dokument
- Plattformsoberoende: fungerar i olika operativsystem och miljöer
Problemet Multi-Saxon löser
Forskare inom digital humaniora som arbetar med TEI ställs ofta inför två stora svårigheter:
- LXML (ett vanligt XML-bibliotek för Python) stöder bara XSLT 1.0, vilket gör det omöjligt att använda de mer avancerade funktionerna i XSLT 2.0/3.0
- Att bearbeta stora TEI-korpusar sekventiellt kan ta oöverkomligt lång tid
Multi-Saxon löser båda problemen genom att utnyttja Saxons avancerade XSLT-funktioner och samtidigt fördela bearbetningen över flera processorkärnor, med betydande prestandavinster som följd.
Implementering
Multi-Saxon kombinerar Python med Javas Saxon-processor i en högpresterande transformationskedja:
- använder Javas Saxon-bibliotek för robust XSLT 2.0/3.0-bearbetning
- använder multiprocessing för att fördela transformationerna över tillgängliga processorkärnor
- hanterar processorpooler effektivt för maximal genomströmning
- erbjuder ett enkelt gränssnitt för batchbearbetning av TEI-dokument
Användningsexempel
from multi_saxon import MultiSaxon
# Initialize with your XSLT stylesheet
transformer = MultiSaxon("transform.xsl")
# Transform a single document
transformer.transform("input.xml", "output.xml")
# Transform an entire directory in parallel
transformer.transform_directory("input_dir", "output_dir")
Betydelse för digital humaniora
För projekt inom digital humaniora med stora TEI-samlingar möjliggör Multi-Saxon:
- komplexa transformationer av hela korpusar som vore omöjliga med LXML
- dramatiskt kortare bearbetningstider (ofta 5–10 gånger snabbare på flerkärniga system)
- mer avancerad analys tack vare funktionerna i XSLT 2.0/3.0
- ett enklare arbetsflöde för bearbetning av hela dokumentsamlingar
Källkod och dokumentation finns i GitHub-repot.
