Getting ready to model the irspy xml into zeerex using xslt.
authorAnders S. Mortensen <sondberg@indexdata.dk>
Thu, 26 Oct 2006 13:39:13 +0000 (13:39 +0000)
committerAnders S. Mortensen <sondberg@indexdata.dk>
Thu, 26 Oct 2006 13:39:13 +0000 (13:39 +0000)
Makefile.PL
lib/ZOOM/IRSpy.pm
xsl/irspy2zeerex.xsl [new file with mode: 0644]

index 00f43f3..fc86dc4 100644 (file)
@@ -1,4 +1,4 @@
-# $Id: Makefile.PL,v 1.6 2006-10-12 11:03:55 mike Exp $
+# $Id: Makefile.PL,v 1.7 2006-10-26 13:39:13 sondberg Exp $
 
 use 5.008;
 use ExtUtils::MakeMaker;
 
 use 5.008;
 use ExtUtils::MakeMaker;
@@ -10,6 +10,8 @@ WriteMakefile(
     PREREQ_PM         => {
        Net::Z3950::ZOOM => 1.13,
        XML::LibXML::XPathContext => 0.07, # For Web UI
     PREREQ_PM         => {
        Net::Z3950::ZOOM => 1.13,
        XML::LibXML::XPathContext => 0.07, # For Web UI
+        XML::LibXML => 1.59,
+        XML::LibXSLT => 1.59,
        URI::Escape => 3.28, # For Web UI
     },
     ($] >= 5.005 ?     ## Add these new keywords supported since 5.005
        URI::Escape => 3.28, # For Web UI
     },
     ($] >= 5.005 ?     ## Add these new keywords supported since 5.005
index 06b223a..15d1124 100644 (file)
@@ -1,4 +1,4 @@
-# $Id: IRSpy.pm,v 1.36 2006-10-25 15:42:47 mike Exp $
+# $Id: IRSpy.pm,v 1.37 2006-10-26 13:39:13 sondberg Exp $
 
 package ZOOM::IRSpy;
 
 
 package ZOOM::IRSpy;
 
@@ -10,6 +10,9 @@ use Exporter 'import';
 our @EXPORT_OK = qw(xml_encode irspy_xpath_context);
 
 use Data::Dumper;              # For debugging only
 our @EXPORT_OK = qw(xml_encode irspy_xpath_context);
 
 use Data::Dumper;              # For debugging only
+use File::Basename;
+use XML::LibXSLT;
+use XML::LibXML;
 use XML::LibXML::XPathContext;
 use ZOOM;
 use Net::Z3950::ZOOM 1.13;     # For the ZOOM version-check only
 use XML::LibXML::XPathContext;
 use ZOOM;
 use Net::Z3950::ZOOM 1.13;     # For the ZOOM version-check only
@@ -20,6 +23,7 @@ use ZOOM::IRSpy::Record;
 our @ISA = qw();
 our $VERSION = '0.02';
 our $irspy_ns = 'http://indexdata.com/irspy/1.0';
 our @ISA = qw();
 our $VERSION = '0.02';
 our $irspy_ns = 'http://indexdata.com/irspy/1.0';
+our $irspy_to_zeerex_xsl = dirname(__FILE__) . '/../../xsl/irspy2zeerex.xsl';
 
 
 # Enumeration for callback functions to return
 
 
 # Enumeration for callback functions to return
@@ -69,12 +73,19 @@ sub new {
     my $conn = new ZOOM::Connection($dbname, 0, @options)
        or die "$0: can't connection to IRSpy database 'dbname'";
 
     my $conn = new ZOOM::Connection($dbname, 0, @options)
        or die "$0: can't connection to IRSpy database 'dbname'";
 
+    my $xslt = new XML::LibXSLT;
+    my $libxml = new XML::LibXML;
+    my $xsl_doc = $libxml->parse_file($irspy_to_zeerex_xsl);
+    my $irspy_to_zeerex_style = $xslt->parse_stylesheet($xsl_doc);
+
     my $this = bless {
        conn => $conn,
        allrecords => 1,        # unless overridden by targets()
        query => undef,         # filled in later
        targets => undef,       # filled in later
        connections => undef,   # filled in later
     my $this = bless {
        conn => $conn,
        allrecords => 1,        # unless overridden by targets()
        query => undef,         # filled in later
        targets => undef,       # filled in later
        connections => undef,   # filled in later
+        libxml => $libxml,
+        irspy_to_zeerex_style => $xslt->parse_stylesheet($xsl_doc),
        tests => [],            # stack of tests currently being executed
     }, $class;
     $this->log("irspy", "starting up with database '$dbname'");
        tests => [],            # stack of tests currently being executed
     }, $class;
     $this->log("irspy", "starting up with database '$dbname'");
@@ -229,15 +240,25 @@ sub _render_record {
 }
 
 
 }
 
 
+sub _irspy_to_zeerex {
+    my ($this, $conn) = @_;
+    my $irspy_doc = $conn->record()->{zeerex}->ownerDocument;
+    my %params = ();
+    my $result = $this->{irspy_to_zeerex_style}->transform($irspy_doc, %params);
+
+    return $result->documentElement();
+}
+
+
 sub _rewrite_record {
     my $this = shift();
     my($conn) = @_;
 
     $conn->log("irspy", "rewriting XML record");
 sub _rewrite_record {
     my $this = shift();
     my($conn) = @_;
 
     $conn->log("irspy", "rewriting XML record");
-    my $rec = $conn->record();
+    my $rec = $this->_irspy_to_zeerex($conn);
     my $p = $this->{conn}->package();
     $p->option(action => "specialUpdate");
     my $p = $this->{conn}->package();
     $p->option(action => "specialUpdate");
-    my $xml = $rec->{zeerex}->toString();
+    my $xml = $rec->toString();
     $p->option(record => $xml);
     $p->send("update");
     $p->destroy();
     $p->option(record => $xml);
     $p->send("update");
     $p->destroy();
diff --git a/xsl/irspy2zeerex.xsl b/xsl/irspy2zeerex.xsl
new file mode 100644 (file)
index 0000000..f579a91
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<!-- $Id: irspy2zeerex.xsl,v 1.1 2006-10-26 13:39:13 sondberg Exp $ -->
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+    version="1.0">
+
+  <xsl:output indent="yes"
+      method="xml"
+      version="1.0"
+      encoding="UTF-8"/>
+
+  <!-- identity stylesheet -->
+  <xsl:template match="/">
+    <xsl:copy-of select="/"/>
+  </xsl:template>
+
+
+</xsl:stylesheet>