[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [Elist Home]
Subject: Publicid <-> URN conversion code in Perl
Here are two Perl programs to convert publicids to URNs and URNs to publicids. We should publish these on the Web page as reference code, once they have been checked. I have run all the examples in the I-D through them. -- There is / one art || John Cowan <jcowan@reutershealth.com> no more / no less || http://www.reutershealth.com to do / all things || http://www.ccil.org/~cowan with art- / lessness \\ -- Piet Hein
#!/usr/bin/perl -w
# Convert a "publicid" URN to an SGML/XML public identifier
# No copyright, no warranty, use as you will
# John Cowan asserts the moral right to be known as the author of this code
use strict;
while (<>) {
chomp;
# verify
unless (s/^urn:publicid://) {
warn "$_ is not a publicid URN\n";
next;
}
# remap
s/\+/ /g;
s/:/\/\//g;
s/;/::/g;
s/%(..)/sprintf("%c", hex($1))/eg;
print $_, "\n";
}
#!/usr/bin/perl -w
# Convert an SGML/XML public identifier to an URN
# No copyright, no warranty, use as you will
# John Cowan asserts the moral right to be known as the author of this code
use strict;
while (<>) {
# check validity
if (/[^ \r\na-zA-Z0-9'()+,.\/:=?;!*#\@\$_%-]/) {
warn "invalid public id: $_";
next;
}
# normalize
s/[\r\n ]+/ /g;
s/^ //;
s/ $//;
# remap
s/%/%25/g;
s/;/%3B/g;
s/::/;/g;
s/:/%3A/g;
s/\/\//:/g;
s/\//%2F/g;
s/\+/%2B/g;
s/ /+/g;
s/'/%27/g;
s/\?/%3F/g;
s/#/%23/g;
# output
print "urn:publicid:", $_, "\n";
}
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [Elist Home]
Powered by eList eXpress LLC