RDF-RDFa-Parser-1.097/0000755000076400007640000000000011764061702012301 5ustar taitaiRDF-RDFa-Parser-1.097/inc/0000755000076400007640000000000011764061700013050 5ustar taitaiRDF-RDFa-Parser-1.097/inc/YAML/0000755000076400007640000000000011764061700013612 5ustar taitaiRDF-RDFa-Parser-1.097/inc/YAML/Tiny.pm0000644000076400007640000003534411764060652015111 0ustar taitai#line 1 package YAML::Tiny; use strict; # UTF Support? sub HAVE_UTF8 () { $] >= 5.007003 } BEGIN { if ( HAVE_UTF8 ) { # The string eval helps hide this from Test::MinimumVersion eval "require utf8;"; die "Failed to load UTF-8 support" if $@; } # Class structure require 5.004; require Exporter; require Carp; $YAML::Tiny::VERSION = '1.51'; # $YAML::Tiny::VERSION = eval $YAML::Tiny::VERSION; @YAML::Tiny::ISA = qw{ Exporter }; @YAML::Tiny::EXPORT = qw{ Load Dump }; @YAML::Tiny::EXPORT_OK = qw{ LoadFile DumpFile freeze thaw }; # Error storage $YAML::Tiny::errstr = ''; } # The character class of all characters we need to escape # NOTE: Inlined, since it's only used once # my $RE_ESCAPE = '[\\x00-\\x08\\x0b-\\x0d\\x0e-\\x1f\"\n]'; # Printed form of the unprintable characters in the lowest range # of ASCII characters, listed by ASCII ordinal position. my @UNPRINTABLE = qw( z x01 x02 x03 x04 x05 x06 a x08 t n v f r x0e x0f x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x1a e x1c x1d x1e x1f ); # Printable characters for escapes my %UNESCAPES = ( z => "\x00", a => "\x07", t => "\x09", n => "\x0a", v => "\x0b", f => "\x0c", r => "\x0d", e => "\x1b", '\\' => '\\', ); # Special magic boolean words my %QUOTE = map { $_ => 1 } qw{ null Null NULL y Y yes Yes YES n N no No NO true True TRUE false False FALSE on On ON off Off OFF }; ##################################################################### # Implementation # Create an empty YAML::Tiny object sub new { my $class = shift; bless [ @_ ], $class; } # Create an object from a file sub read { my $class = ref $_[0] ? ref shift : shift; # Check the file my $file = shift or return $class->_error( 'You did not specify a file name' ); return $class->_error( "File '$file' does not exist" ) unless -e $file; return $class->_error( "'$file' is a directory, not a file" ) unless -f _; return $class->_error( "Insufficient permissions to read '$file'" ) unless -r _; # Slurp in the file local $/ = undef; local *CFG; unless ( open(CFG, $file) ) { return $class->_error("Failed to open file '$file': $!"); } my $contents = ; unless ( close(CFG) ) { return $class->_error("Failed to close file '$file': $!"); } $class->read_string( $contents ); } # Create an object from a string sub read_string { my $class = ref $_[0] ? ref shift : shift; my $self = bless [], $class; my $string = $_[0]; eval { unless ( defined $string ) { die \"Did not provide a string to load"; } # Byte order marks # NOTE: Keeping this here to educate maintainers # my %BOM = ( # "\357\273\277" => 'UTF-8', # "\376\377" => 'UTF-16BE', # "\377\376" => 'UTF-16LE', # "\377\376\0\0" => 'UTF-32LE' # "\0\0\376\377" => 'UTF-32BE', # ); if ( $string =~ /^(?:\376\377|\377\376|\377\376\0\0|\0\0\376\377)/ ) { die \"Stream has a non UTF-8 BOM"; } else { # Strip UTF-8 bom if found, we'll just ignore it $string =~ s/^\357\273\277//; } # Try to decode as utf8 utf8::decode($string) if HAVE_UTF8; # Check for some special cases return $self unless length $string; unless ( $string =~ /[\012\015]+\z/ ) { die \"Stream does not end with newline character"; } # Split the file into lines my @lines = grep { ! /^\s*(?:\#.*)?\z/ } split /(?:\015{1,2}\012|\015|\012)/, $string; # Strip the initial YAML header @lines and $lines[0] =~ /^\%YAML[: ][\d\.]+.*\z/ and shift @lines; # A nibbling parser while ( @lines ) { # Do we have a document header? if ( $lines[0] =~ /^---\s*(?:(.+)\s*)?\z/ ) { # Handle scalar documents shift @lines; if ( defined $1 and $1 !~ /^(?:\#.+|\%YAML[: ][\d\.]+)\z/ ) { push @$self, $self->_read_scalar( "$1", [ undef ], \@lines ); next; } } if ( ! @lines or $lines[0] =~ /^(?:---|\.\.\.)/ ) { # A naked document push @$self, undef; while ( @lines and $lines[0] !~ /^---/ ) { shift @lines; } } elsif ( $lines[0] =~ /^\s*\-/ ) { # An array at the root my $document = [ ]; push @$self, $document; $self->_read_array( $document, [ 0 ], \@lines ); } elsif ( $lines[0] =~ /^(\s*)\S/ ) { # A hash at the root my $document = { }; push @$self, $document; $self->_read_hash( $document, [ length($1) ], \@lines ); } else { die \"YAML::Tiny failed to classify the line '$lines[0]'"; } } }; if ( ref $@ eq 'SCALAR' ) { return $self->_error(${$@}); } elsif ( $@ ) { require Carp; Carp::croak($@); } return $self; } # Deparse a scalar string to the actual scalar sub _read_scalar { my ($self, $string, $indent, $lines) = @_; # Trim trailing whitespace $string =~ s/\s*\z//; # Explitic null/undef return undef if $string eq '~'; # Single quote if ( $string =~ /^\'(.*?)\'(?:\s+\#.*)?\z/ ) { return '' unless defined $1; $string = $1; $string =~ s/\'\'/\'/g; return $string; } # Double quote. # The commented out form is simpler, but overloaded the Perl regex # engine due to recursion and backtracking problems on strings # larger than 32,000ish characters. Keep it for reference purposes. # if ( $string =~ /^\"((?:\\.|[^\"])*)\"\z/ ) { if ( $string =~ /^\"([^\\"]*(?:\\.[^\\"]*)*)\"(?:\s+\#.*)?\z/ ) { # Reusing the variable is a little ugly, # but avoids a new variable and a string copy. $string = $1; $string =~ s/\\"/"/g; $string =~ s/\\([never\\fartz]|x([0-9a-fA-F]{2}))/(length($1)>1)?pack("H2",$2):$UNESCAPES{$1}/gex; return $string; } # Special cases if ( $string =~ /^[\'\"!&]/ ) { die \"YAML::Tiny does not support a feature in line '$string'"; } return {} if $string =~ /^{}(?:\s+\#.*)?\z/; return [] if $string =~ /^\[\](?:\s+\#.*)?\z/; # Regular unquoted string if ( $string !~ /^[>|]/ ) { if ( $string =~ /^(?:-(?:\s|$)|[\@\%\`])/ or $string =~ /:(?:\s|$)/ ) { die \"YAML::Tiny found illegal characters in plain scalar: '$string'"; } $string =~ s/\s+#.*\z//; return $string; } # Error die \"YAML::Tiny failed to find multi-line scalar content" unless @$lines; # Check the indent depth $lines->[0] =~ /^(\s*)/; $indent->[-1] = length("$1"); if ( defined $indent->[-2] and $indent->[-1] <= $indent->[-2] ) { die \"YAML::Tiny found bad indenting in line '$lines->[0]'"; } # Pull the lines my @multiline = (); while ( @$lines ) { $lines->[0] =~ /^(\s*)/; last unless length($1) >= $indent->[-1]; push @multiline, substr(shift(@$lines), length($1)); } my $j = (substr($string, 0, 1) eq '>') ? ' ' : "\n"; my $t = (substr($string, 1, 1) eq '-') ? '' : "\n"; return join( $j, @multiline ) . $t; } # Parse an array sub _read_array { my ($self, $array, $indent, $lines) = @_; while ( @$lines ) { # Check for a new document if ( $lines->[0] =~ /^(?:---|\.\.\.)/ ) { while ( @$lines and $lines->[0] !~ /^---/ ) { shift @$lines; } return 1; } # Check the indent level $lines->[0] =~ /^(\s*)/; if ( length($1) < $indent->[-1] ) { return 1; } elsif ( length($1) > $indent->[-1] ) { die \"YAML::Tiny found bad indenting in line '$lines->[0]'"; } if ( $lines->[0] =~ /^(\s*\-\s+)[^\'\"]\S*\s*:(?:\s+|$)/ ) { # Inline nested hash my $indent2 = length("$1"); $lines->[0] =~ s/-/ /; push @$array, { }; $self->_read_hash( $array->[-1], [ @$indent, $indent2 ], $lines ); } elsif ( $lines->[0] =~ /^\s*\-(\s*)(.+?)\s*\z/ ) { # Array entry with a value shift @$lines; push @$array, $self->_read_scalar( "$2", [ @$indent, undef ], $lines ); } elsif ( $lines->[0] =~ /^\s*\-\s*\z/ ) { shift @$lines; unless ( @$lines ) { push @$array, undef; return 1; } if ( $lines->[0] =~ /^(\s*)\-/ ) { my $indent2 = length("$1"); if ( $indent->[-1] == $indent2 ) { # Null array entry push @$array, undef; } else { # Naked indenter push @$array, [ ]; $self->_read_array( $array->[-1], [ @$indent, $indent2 ], $lines ); } } elsif ( $lines->[0] =~ /^(\s*)\S/ ) { push @$array, { }; $self->_read_hash( $array->[-1], [ @$indent, length("$1") ], $lines ); } else { die \"YAML::Tiny failed to classify line '$lines->[0]'"; } } elsif ( defined $indent->[-2] and $indent->[-1] == $indent->[-2] ) { # This is probably a structure like the following... # --- # foo: # - list # bar: value # # ... so lets return and let the hash parser handle it return 1; } else { die \"YAML::Tiny failed to classify line '$lines->[0]'"; } } return 1; } # Parse an array sub _read_hash { my ($self, $hash, $indent, $lines) = @_; while ( @$lines ) { # Check for a new document if ( $lines->[0] =~ /^(?:---|\.\.\.)/ ) { while ( @$lines and $lines->[0] !~ /^---/ ) { shift @$lines; } return 1; } # Check the indent level $lines->[0] =~ /^(\s*)/; if ( length($1) < $indent->[-1] ) { return 1; } elsif ( length($1) > $indent->[-1] ) { die \"YAML::Tiny found bad indenting in line '$lines->[0]'"; } # Get the key unless ( $lines->[0] =~ s/^\s*([^\'\" ][^\n]*?)\s*:(\s+(?:\#.*)?|$)// ) { if ( $lines->[0] =~ /^\s*[?\'\"]/ ) { die \"YAML::Tiny does not support a feature in line '$lines->[0]'"; } die \"YAML::Tiny failed to classify line '$lines->[0]'"; } my $key = $1; # Do we have a value? if ( length $lines->[0] ) { # Yes $hash->{$key} = $self->_read_scalar( shift(@$lines), [ @$indent, undef ], $lines ); } else { # An indent shift @$lines; unless ( @$lines ) { $hash->{$key} = undef; return 1; } if ( $lines->[0] =~ /^(\s*)-/ ) { $hash->{$key} = []; $self->_read_array( $hash->{$key}, [ @$indent, length($1) ], $lines ); } elsif ( $lines->[0] =~ /^(\s*)./ ) { my $indent2 = length("$1"); if ( $indent->[-1] >= $indent2 ) { # Null hash entry $hash->{$key} = undef; } else { $hash->{$key} = {}; $self->_read_hash( $hash->{$key}, [ @$indent, length($1) ], $lines ); } } } } return 1; } # Save an object to a file sub write { my $self = shift; my $file = shift or return $self->_error('No file name provided'); # Write it to the file open( CFG, '>' . $file ) or return $self->_error( "Failed to open file '$file' for writing: $!" ); print CFG $self->write_string; close CFG; return 1; } # Save an object to a string sub write_string { my $self = shift; return '' unless @$self; # Iterate over the documents my $indent = 0; my @lines = (); foreach my $cursor ( @$self ) { push @lines, '---'; # An empty document if ( ! defined $cursor ) { # Do nothing # A scalar document } elsif ( ! ref $cursor ) { $lines[-1] .= ' ' . $self->_write_scalar( $cursor, $indent ); # A list at the root } elsif ( ref $cursor eq 'ARRAY' ) { unless ( @$cursor ) { $lines[-1] .= ' []'; next; } push @lines, $self->_write_array( $cursor, $indent, {} ); # A hash at the root } elsif ( ref $cursor eq 'HASH' ) { unless ( %$cursor ) { $lines[-1] .= ' {}'; next; } push @lines, $self->_write_hash( $cursor, $indent, {} ); } else { Carp::croak("Cannot serialize " . ref($cursor)); } } join '', map { "$_\n" } @lines; } sub _write_scalar { my $string = $_[1]; return '~' unless defined $string; return "''" unless length $string; if ( $string =~ /[\x00-\x08\x0b-\x0d\x0e-\x1f\"\'\n]/ ) { $string =~ s/\\/\\\\/g; $string =~ s/"/\\"/g; $string =~ s/\n/\\n/g; $string =~ s/([\x00-\x1f])/\\$UNPRINTABLE[ord($1)]/g; return qq|"$string"|; } if ( $string =~ /(?:^\W|\s|:\z)/ or $QUOTE{$string} ) { return "'$string'"; } return $string; } sub _write_array { my ($self, $array, $indent, $seen) = @_; if ( $seen->{refaddr($array)}++ ) { die "YAML::Tiny does not support circular references"; } my @lines = (); foreach my $el ( @$array ) { my $line = (' ' x $indent) . '-'; my $type = ref $el; if ( ! $type ) { $line .= ' ' . $self->_write_scalar( $el, $indent + 1 ); push @lines, $line; } elsif ( $type eq 'ARRAY' ) { if ( @$el ) { push @lines, $line; push @lines, $self->_write_array( $el, $indent + 1, $seen ); } else { $line .= ' []'; push @lines, $line; } } elsif ( $type eq 'HASH' ) { if ( keys %$el ) { push @lines, $line; push @lines, $self->_write_hash( $el, $indent + 1, $seen ); } else { $line .= ' {}'; push @lines, $line; } } else { die "YAML::Tiny does not support $type references"; } } @lines; } sub _write_hash { my ($self, $hash, $indent, $seen) = @_; if ( $seen->{refaddr($hash)}++ ) { die "YAML::Tiny does not support circular references"; } my @lines = (); foreach my $name ( sort keys %$hash ) { my $el = $hash->{$name}; my $line = (' ' x $indent) . "$name:"; my $type = ref $el; if ( ! $type ) { $line .= ' ' . $self->_write_scalar( $el, $indent + 1 ); push @lines, $line; } elsif ( $type eq 'ARRAY' ) { if ( @$el ) { push @lines, $line; push @lines, $self->_write_array( $el, $indent + 1, $seen ); } else { $line .= ' []'; push @lines, $line; } } elsif ( $type eq 'HASH' ) { if ( keys %$el ) { push @lines, $line; push @lines, $self->_write_hash( $el, $indent + 1, $seen ); } else { $line .= ' {}'; push @lines, $line; } } else { die "YAML::Tiny does not support $type references"; } } @lines; } # Set error sub _error { $YAML::Tiny::errstr = $_[1]; undef; } # Retrieve error sub errstr { $YAML::Tiny::errstr; } ##################################################################### # YAML Compatibility sub Dump { YAML::Tiny->new(@_)->write_string; } sub Load { my $self = YAML::Tiny->read_string(@_); unless ( $self ) { Carp::croak("Failed to load YAML document from string"); } if ( wantarray ) { return @$self; } else { # To match YAML.pm, return the last document return $self->[-1]; } } BEGIN { *freeze = *Dump; *thaw = *Load; } sub DumpFile { my $file = shift; YAML::Tiny->new(@_)->write($file); } sub LoadFile { my $self = YAML::Tiny->read($_[0]); unless ( $self ) { Carp::croak("Failed to load YAML document from '" . ($_[0] || '') . "'"); } if ( wantarray ) { return @$self; } else { # Return only the last document to match YAML.pm, return $self->[-1]; } } ##################################################################### # Use Scalar::Util if possible, otherwise emulate it BEGIN { local $@; eval { require Scalar::Util; }; my $v = eval("$Scalar::Util::VERSION") || 0; if ( $@ or $v < 1.18 ) { eval <<'END_PERL'; # Scalar::Util failed to load or too old sub refaddr { my $pkg = ref($_[0]) or return undef; if ( !! UNIVERSAL::can($_[0], 'can') ) { bless $_[0], 'Scalar::Util::Fake'; } else { $pkg = undef; } "$_[0]" =~ /0x(\w+)/; my $i = do { local $^W; hex $1 }; bless $_[0], $pkg if defined $pkg; $i; } END_PERL } else { *refaddr = *Scalar::Util::refaddr; } } 1; __END__ #line 1175 RDF-RDFa-Parser-1.097/inc/Scalar/0000755000076400007640000000000011764061700014255 5ustar taitaiRDF-RDFa-Parser-1.097/inc/Scalar/Util.pm0000644000076400007640000000325111764060651015535 0ustar taitai#line 1 # Scalar::Util.pm # # Copyright (c) 1997-2007 Graham Barr . All rights reserved. # This program is free software; you can redistribute it and/or # modify it under the same terms as Perl itself. package Scalar::Util; use strict; use vars qw(@ISA @EXPORT_OK $VERSION @EXPORT_FAIL); require Exporter; require List::Util; # List::Util loads the XS @ISA = qw(Exporter); @EXPORT_OK = qw(blessed dualvar reftype weaken isweak tainted readonly openhandle refaddr isvstring looks_like_number set_prototype); $VERSION = "1.23"; $VERSION = eval $VERSION; unless (defined &dualvar) { # Load Pure Perl version if XS not loaded require Scalar::Util::PP; Scalar::Util::PP->import; push @EXPORT_FAIL, qw(weaken isweak dualvar isvstring set_prototype); } sub export_fail { if (grep { /dualvar/ } @EXPORT_FAIL) { # no XS loaded my $pat = join("|", @EXPORT_FAIL); if (my ($err) = grep { /^($pat)$/ } @_ ) { require Carp; Carp::croak("$err is only available with the XS version of Scalar::Util"); } } if (grep { /^(weaken|isweak)$/ } @_ ) { require Carp; Carp::croak("Weak references are not implemented in the version of perl"); } if (grep { /^(isvstring)$/ } @_ ) { require Carp; Carp::croak("Vstrings are not implemented in the version of perl"); } @_; } sub openhandle ($) { my $fh = shift; my $rt = reftype($fh) || ''; return defined(fileno($fh)) ? $fh : undef if $rt eq 'IO'; if (reftype(\$fh) eq 'GLOB') { # handle openhandle(*DATA) $fh = \(my $tmp=$fh); } elsif ($rt ne 'GLOB') { return undef; } (tied(*$fh) or defined(fileno($fh))) ? $fh : undef; } 1; __END__ #line 283 RDF-RDFa-Parser-1.097/inc/Scalar/Util/0000755000076400007640000000000011764061700015172 5ustar taitaiRDF-RDFa-Parser-1.097/inc/Scalar/Util/PP.pm0000644000076400007640000000431711764060651016060 0ustar taitai#line 1 # Scalar::Util::PP.pm # # Copyright (c) 1997-2009 Graham Barr . All rights reserved. # This program is free software; you can redistribute it and/or # modify it under the same terms as Perl itself. # # This module is normally only loaded if the XS module is not available package Scalar::Util::PP; use strict; use warnings; use vars qw(@ISA @EXPORT $VERSION $recurse); require Exporter; use B qw(svref_2object); @ISA = qw(Exporter); @EXPORT = qw(blessed reftype tainted readonly refaddr looks_like_number); $VERSION = "1.23"; $VERSION = eval $VERSION; sub blessed ($) { return undef unless length(ref($_[0])); my $b = svref_2object($_[0]); return undef unless $b->isa('B::PVMG'); my $s = $b->SvSTASH; return $s->isa('B::HV') ? $s->NAME : undef; } sub refaddr($) { return undef unless length(ref($_[0])); my $addr; if(defined(my $pkg = blessed($_[0]))) { $addr .= bless $_[0], 'Scalar::Util::Fake'; bless $_[0], $pkg; } else { $addr .= $_[0] } $addr =~ /0x(\w+)/; local $^W; no warnings 'portable'; hex($1); } { my %tmap = qw( B::NULL SCALAR B::HV HASH B::AV ARRAY B::CV CODE B::IO IO B::GV GLOB B::REGEXP REGEXP ); sub reftype ($) { my $r = shift; return undef unless length(ref($r)); my $t = ref(svref_2object($r)); return exists $tmap{$t} ? $tmap{$t} : length(ref($$r)) ? 'REF' : 'SCALAR'; } } sub tainted { local($@, $SIG{__DIE__}, $SIG{__WARN__}); local $^W = 0; no warnings; eval { kill 0 * $_[0] }; $@ =~ /^Insecure/; } sub readonly { return 0 if tied($_[0]) || (ref(\($_[0])) ne "SCALAR"); local($@, $SIG{__DIE__}, $SIG{__WARN__}); my $tmp = $_[0]; !eval { $_[0] = $tmp; 1 }; } sub looks_like_number { local $_ = shift; # checks from perlfaq4 return 0 if !defined($_); if (ref($_)) { require overload; return overload::Overloaded($_) ? defined(0 + $_) : 0; } return 1 if (/^[+-]?[0-9]+$/); # is a +/- integer return 1 if (/^([+-]?)(?=[0-9]|\.[0-9])[0-9]*(\.[0-9]*)?([Ee]([+-]?[0-9]+))?$/); # a C float return 1 if ($] >= 5.008 and /^(Inf(inity)?|NaN)$/i) or ($] >= 5.006001 and /^Inf$/i); 0; } 1; RDF-RDFa-Parser-1.097/inc/unicore/0000755000076400007640000000000011764061700014514 5ustar taitaiRDF-RDFa-Parser-1.097/inc/unicore/Name.pm0000644000076400007640000002127311764060652015744 0ustar taitai#line 1 # !!!!!!! DO NOT EDIT THIS FILE !!!!!!! # This file is machine-generated by lib/unicore/mktables from the Unicode # database, Version 6.1.0. Any changes made here will be lost! # !!!!!!! INTERNAL PERL USE ONLY !!!!!!! # This file is for internal use by core Perl only. The format and even the # name or existence of this file are subject to change without notice. Don't # use it directly. package charnames; # This module contains machine-generated tables and code for the # algorithmically-determinable Unicode character names. The following # routines can be used to translate between name and code point and vice versa { # Closure # Matches legal code point. 4-6 hex numbers, If there are 6, the first # two must be 10; if there are 5, the first must not be a 0. Written this # way to decrease backtracking. The first regex allows the code point to # be at the end of a word, but to work properly, the word shouldn't end # with a valid hex character. The second one won't match a code point at # the end of a word, and doesn't have the run-on issue my $run_on_code_point_re = qr/(?^aax: (?: 10[0-9A-F]{4} | [1-9A-F][0-9A-F]{4} | [0-9A-F]{4} ) \b)/; my $code_point_re = qr/(?^aa:\b(?^aax: (?: 10[0-9A-F]{4} | [1-9A-F][0-9A-F]{4} | [0-9A-F]{4} ) \b))/; # In the following hash, the keys are the bases of names which includes # the code point in the name, like CJK UNIFIED IDEOGRAPH-4E01. The values # of each key is another hash which is used to get the low and high ends # for each range of code points that apply to the name. my %names_ending_in_code_point = ( 'CJK COMPATIBILITY IDEOGRAPH' => { 'high' => [ 64109, 64217, 195101, ], 'low' => [ 63744, 64112, 194560, ], }, 'CJK UNIFIED IDEOGRAPH' => { 'high' => [ 19893, 40908, 173782, 177972, 178205, ], 'low' => [ 13312, 19968, 131072, 173824, 177984, ], }, ); # The following hash is a copy of the previous one, except is for loose # matching, so each name has blanks and dashes squeezed out my %loose_names_ending_in_code_point = ( 'CJKCOMPATIBILITYIDEOGRAPH' => { 'high' => [ 64109, 64217, 195101, ], 'low' => [ 63744, 64112, 194560, ], }, 'CJKUNIFIEDIDEOGRAPH' => { 'high' => [ 19893, 40908, 173782, 177972, 178205, ], 'low' => [ 13312, 19968, 131072, 173824, 177984, ], }, ); # And the following array gives the inverse mapping from code points to # names. Lowest code points are first my @code_points_ending_in_code_point = ( { 'high' => 19893, 'low' => 13312, 'name' => 'CJK UNIFIED IDEOGRAPH', }, { 'high' => 40908, 'low' => 19968, 'name' => 'CJK UNIFIED IDEOGRAPH', }, { 'high' => 64109, 'low' => 63744, 'name' => 'CJK COMPATIBILITY IDEOGRAPH', }, { 'high' => 64217, 'low' => 64112, 'name' => 'CJK COMPATIBILITY IDEOGRAPH', }, { 'high' => 173782, 'low' => 131072, 'name' => 'CJK UNIFIED IDEOGRAPH', }, { 'high' => 177972, 'low' => 173824, 'name' => 'CJK UNIFIED IDEOGRAPH', }, { 'high' => 178205, 'low' => 177984, 'name' => 'CJK UNIFIED IDEOGRAPH', }, { 'high' => 195101, 'low' => 194560, 'name' => 'CJK COMPATIBILITY IDEOGRAPH', }, , ); # Convert from code point to Jamo short name for use in composing Hangul # syllable names my %Jamo = ( 4352 => 'G', 4353 => 'GG', 4354 => 'N', 4355 => 'D', 4356 => 'DD', 4357 => 'R', 4358 => 'M', 4359 => 'B', 4360 => 'BB', 4361 => 'S', 4362 => 'SS', 4363 => '', 4364 => 'J', 4365 => 'JJ', 4366 => 'C', 4367 => 'K', 4368 => 'T', 4369 => 'P', 4370 => 'H', 4449 => 'A', 4450 => 'AE', 4451 => 'YA', 4452 => 'YAE', 4453 => 'EO', 4454 => 'E', 4455 => 'YEO', 4456 => 'YE', 4457 => 'O', 4458 => 'WA', 4459 => 'WAE', 4460 => 'OE', 4461 => 'YO', 4462 => 'U', 4463 => 'WEO', 4464 => 'WE', 4465 => 'WI', 4466 => 'YU', 4467 => 'EU', 4468 => 'YI', 4469 => 'I', 4520 => 'G', 4521 => 'GG', 4522 => 'GS', 4523 => 'N', 4524 => 'NJ', 4525 => 'NH', 4526 => 'D', 4527 => 'L', 4528 => 'LG', 4529 => 'LM', 4530 => 'LB', 4531 => 'LS', 4532 => 'LT', 4533 => 'LP', 4534 => 'LH', 4535 => 'M', 4536 => 'B', 4537 => 'BS', 4538 => 'S', 4539 => 'SS', 4540 => 'NG', 4541 => 'J', 4542 => 'C', 4543 => 'K', 4544 => 'T', 4545 => 'P', 4546 => 'H', ); # Leading consonant (can be null) my %Jamo_L = ( '' => 11, 'B' => 7, 'BB' => 8, 'C' => 14, 'D' => 3, 'DD' => 4, 'G' => 0, 'GG' => 1, 'H' => 18, 'J' => 12, 'JJ' => 13, 'K' => 15, 'M' => 6, 'N' => 2, 'P' => 17, 'R' => 5, 'S' => 9, 'SS' => 10, 'T' => 16, ); # Vowel my %Jamo_V = ( 'A' => 0, 'AE' => 1, 'E' => 5, 'EO' => 4, 'EU' => 18, 'I' => 20, 'O' => 8, 'OE' => 11, 'U' => 13, 'WA' => 9, 'WAE' => 10, 'WE' => 15, 'WEO' => 14, 'WI' => 16, 'YA' => 2, 'YAE' => 3, 'YE' => 7, 'YEO' => 6, 'YI' => 19, 'YO' => 12, 'YU' => 17, ); # Optional trailing consonant my %Jamo_T = ( 'B' => 17, 'BS' => 18, 'C' => 23, 'D' => 7, 'G' => 1, 'GG' => 2, 'GS' => 3, 'H' => 27, 'J' => 22, 'K' => 24, 'L' => 8, 'LB' => 11, 'LG' => 9, 'LH' => 15, 'LM' => 10, 'LP' => 14, 'LS' => 12, 'LT' => 13, 'M' => 16, 'N' => 4, 'NG' => 21, 'NH' => 6, 'NJ' => 5, 'P' => 26, 'S' => 19, 'SS' => 20, 'T' => 25, ); # Computed re that splits up a Hangul name into LVT or LV syllables my $syllable_re = qr/(|B|BB|C|D|DD|G|GG|H|J|JJ|K|M|N|P|R|S|SS|T)(A|AE|E|EO|EU|I|O|OE|U|WA|WAE|WE|WEO|WI|YA|YAE|YE|YEO|YI|YO|YU)(B|BS|C|D|G|GG|GS|H|J|K|L|LB|LG|LH|LM|LP|LS|LT|M|N|NG|NH|NJ|P|S|SS|T)?/; my $HANGUL_SYLLABLE = "HANGUL SYLLABLE "; my $loose_HANGUL_SYLLABLE = "HANGULSYLLABLE"; # These constants names and values were taken from the Unicode standard, # version 5.1, section 3.12. They are used in conjunction with Hangul # syllables my $SBase = 0xAC00; my $LBase = 0x1100; my $VBase = 0x1161; my $TBase = 0x11A7; my $SCount = 11172; my $LCount = 19; my $VCount = 21; my $TCount = 28; my $NCount = $VCount * $TCount; sub name_to_code_point_special { my ($name, $loose) = @_; # Returns undef if not one of the specially handled names; otherwise # returns the code point equivalent to the input name # $loose is non-zero if to use loose matching, 'name' in that case # must be input as upper case with all blanks and dashes squeezed out. if ((! $loose && $name =~ s/$HANGUL_SYLLABLE//) || ($loose && $name =~ s/$loose_HANGUL_SYLLABLE//)) { return if $name !~ qr/^$syllable_re$/; my $L = $Jamo_L{$1}; my $V = $Jamo_V{$2}; my $T = (defined $3) ? $Jamo_T{$3} : 0; return ($L * $VCount + $V) * $TCount + $T + $SBase; } # Name must end in 'code_point' for this to handle. return if (($loose && $name !~ /^ (.*?) ($run_on_code_point_re) $/x) || (! $loose && $name !~ /^ (.*) ($code_point_re) $/x)); my $base = $1; my $code_point = CORE::hex $2; my $names_ref; if ($loose) { $names_ref = \%loose_names_ending_in_code_point; } else { return if $base !~ s/-$//; $names_ref = \%names_ending_in_code_point; } # Name must be one of the ones which has the code point in it. return if ! $names_ref->{$base}; # Look through the list of ranges that apply to this name to see if # the code point is in one of them. for (my $i = 0; $i < scalar @{$names_ref->{$base}{'low'}}; $i++) { return if $names_ref->{$base}{'low'}->[$i] > $code_point; next if $names_ref->{$base}{'high'}->[$i] < $code_point; # Here, the code point is in the range. return $code_point; } # Here, looked like the name had a code point number in it, but # did not match one of the valid ones. return; } sub code_point_to_name_special { my $code_point = shift; # Returns the name of a code point if algorithmically determinable; # undef if not # If in the Hangul range, calculate the name based on Unicode's # algorithm if ($code_point >= $SBase && $code_point <= $SBase + $SCount -1) { use integer; my $SIndex = $code_point - $SBase; my $L = $LBase + $SIndex / $NCount; my $V = $VBase + ($SIndex % $NCount) / $TCount; my $T = $TBase + $SIndex % $TCount; $name = "$HANGUL_SYLLABLE$Jamo{$L}$Jamo{$V}"; $name .= $Jamo{$T} if $T != $TBase; return $name; } # Look through list of these code points for one in range. foreach my $hash (@code_points_ending_in_code_point) { return if $code_point < $hash->{'low'}; if ($code_point <= $hash->{'high'}) { return sprintf("%s-%04X", $hash->{'name'}, $code_point); } } return; # None found } } # End closure 1; RDF-RDFa-Parser-1.097/inc/Module/0000755000076400007640000000000011764061700014275 5ustar taitaiRDF-RDFa-Parser-1.097/inc/Module/AutoInstall.pm0000644000076400007640000006216211764060675017113 0ustar taitai#line 1 package Module::AutoInstall; use strict; use Cwd (); use File::Spec (); use ExtUtils::MakeMaker (); use vars qw{$VERSION}; BEGIN { $VERSION = '1.06'; } # special map on pre-defined feature sets my %FeatureMap = ( '' => 'Core Features', # XXX: deprecated '-core' => 'Core Features', ); # various lexical flags my ( @Missing, @Existing, %DisabledTests, $UnderCPAN, $InstallDepsTarget, $HasCPANPLUS ); my ( $Config, $CheckOnly, $SkipInstall, $AcceptDefault, $TestOnly, $AllDeps, $UpgradeDeps ); my ( $PostambleActions, $PostambleActionsNoTest, $PostambleActionsUpgradeDeps, $PostambleActionsUpgradeDepsNoTest, $PostambleActionsListDeps, $PostambleActionsListAllDeps, $PostambleUsed, $NoTest); # See if it's a testing or non-interactive session _accept_default( $ENV{AUTOMATED_TESTING} or ! -t STDIN ); _init(); sub _accept_default { $AcceptDefault = shift; } sub _installdeps_target { $InstallDepsTarget = shift; } sub missing_modules { return @Missing; } sub do_install { __PACKAGE__->install( [ $Config ? ( UNIVERSAL::isa( $Config, 'HASH' ) ? %{$Config} : @{$Config} ) : () ], @Missing, ); } # initialize various flags, and/or perform install sub _init { foreach my $arg ( @ARGV, split( /[\s\t]+/, $ENV{PERL_AUTOINSTALL} || $ENV{PERL_EXTUTILS_AUTOINSTALL} || '' ) ) { if ( $arg =~ /^--config=(.*)$/ ) { $Config = [ split( ',', $1 ) ]; } elsif ( $arg =~ /^--installdeps=(.*)$/ ) { __PACKAGE__->install( $Config, @Missing = split( /,/, $1 ) ); exit 0; } elsif ( $arg =~ /^--upgradedeps=(.*)$/ ) { $UpgradeDeps = 1; __PACKAGE__->install( $Config, @Missing = split( /,/, $1 ) ); exit 0; } elsif ( $arg =~ /^--default(?:deps)?$/ ) { $AcceptDefault = 1; } elsif ( $arg =~ /^--check(?:deps)?$/ ) { $CheckOnly = 1; } elsif ( $arg =~ /^--skip(?:deps)?$/ ) { $SkipInstall = 1; } elsif ( $arg =~ /^--test(?:only)?$/ ) { $TestOnly = 1; } elsif ( $arg =~ /^--all(?:deps)?$/ ) { $AllDeps = 1; } } } # overrides MakeMaker's prompt() to automatically accept the default choice sub _prompt { goto &ExtUtils::MakeMaker::prompt unless $AcceptDefault; my ( $prompt, $default ) = @_; my $y = ( $default =~ /^[Yy]/ ); print $prompt, ' [', ( $y ? 'Y' : 'y' ), '/', ( $y ? 'n' : 'N' ), '] '; print "$default\n"; return $default; } # the workhorse sub import { my $class = shift; my @args = @_ or return; my $core_all; print "*** $class version " . $class->VERSION . "\n"; print "*** Checking for Perl dependencies...\n"; my $cwd = Cwd::cwd(); $Config = []; my $maxlen = length( ( sort { length($b) <=> length($a) } grep { /^[^\-]/ } map { ref($_) ? ( ( ref($_) eq 'HASH' ) ? keys(%$_) : @{$_} ) : '' } map { +{@args}->{$_} } grep { /^[^\-]/ or /^-core$/i } keys %{ +{@args} } )[0] ); # We want to know if we're under CPAN early to avoid prompting, but # if we aren't going to try and install anything anyway then skip the # check entirely since we don't want to have to load (and configure) # an old CPAN just for a cosmetic message $UnderCPAN = _check_lock(1) unless $SkipInstall || $InstallDepsTarget; while ( my ( $feature, $modules ) = splice( @args, 0, 2 ) ) { my ( @required, @tests, @skiptests ); my $default = 1; my $conflict = 0; if ( $feature =~ m/^-(\w+)$/ ) { my $option = lc($1); # check for a newer version of myself _update_to( $modules, @_ ) and return if $option eq 'version'; # sets CPAN configuration options $Config = $modules if $option eq 'config'; # promote every features to core status $core_all = ( $modules =~ /^all$/i ) and next if $option eq 'core'; next unless $option eq 'core'; } print "[" . ( $FeatureMap{ lc($feature) } || $feature ) . "]\n"; $modules = [ %{$modules} ] if UNIVERSAL::isa( $modules, 'HASH' ); unshift @$modules, -default => &{ shift(@$modules) } if ( ref( $modules->[0] ) eq 'CODE' ); # XXX: bugward combatability while ( my ( $mod, $arg ) = splice( @$modules, 0, 2 ) ) { if ( $mod =~ m/^-(\w+)$/ ) { my $option = lc($1); $default = $arg if ( $option eq 'default' ); $conflict = $arg if ( $option eq 'conflict' ); @tests = @{$arg} if ( $option eq 'tests' ); @skiptests = @{$arg} if ( $option eq 'skiptests' ); next; } printf( "- %-${maxlen}s ...", $mod ); if ( $arg and $arg =~ /^\D/ ) { unshift @$modules, $arg; $arg = 0; } # XXX: check for conflicts and uninstalls(!) them. my $cur = _version_of($mod); if (_version_cmp ($cur, $arg) >= 0) { print "loaded. ($cur" . ( $arg ? " >= $arg" : '' ) . ")\n"; push @Existing, $mod => $arg; $DisabledTests{$_} = 1 for map { glob($_) } @skiptests; } else { if (not defined $cur) # indeed missing { print "missing." . ( $arg ? " (would need $arg)" : '' ) . "\n"; } else { # no need to check $arg as _version_cmp ($cur, undef) would satisfy >= above print "too old. ($cur < $arg)\n"; } push @required, $mod => $arg; } } next unless @required; my $mandatory = ( $feature eq '-core' or $core_all ); if ( !$SkipInstall and ( $CheckOnly or ($mandatory and $UnderCPAN) or $AllDeps or $InstallDepsTarget or _prompt( qq{==> Auto-install the } . ( @required / 2 ) . ( $mandatory ? ' mandatory' : ' optional' ) . qq{ module(s) from CPAN?}, $default ? 'y' : 'n', ) =~ /^[Yy]/ ) ) { push( @Missing, @required ); $DisabledTests{$_} = 1 for map { glob($_) } @skiptests; } elsif ( !$SkipInstall and $default and $mandatory and _prompt( qq{==> The module(s) are mandatory! Really skip?}, 'n', ) =~ /^[Nn]/ ) { push( @Missing, @required ); $DisabledTests{$_} = 1 for map { glob($_) } @skiptests; } else { $DisabledTests{$_} = 1 for map { glob($_) } @tests; } } if ( @Missing and not( $CheckOnly or $UnderCPAN) ) { require Config; my $make = $Config::Config{make}; if ($InstallDepsTarget) { print "*** To install dependencies type '$make installdeps' or '$make installdeps_notest'.\n"; } else { print "*** Dependencies will be installed the next time you type '$make'.\n"; } # make an educated guess of whether we'll need root permission. print " (You may need to do that as the 'root' user.)\n" if eval '$>'; } print "*** $class configuration finished.\n"; chdir $cwd; # import to main:: no strict 'refs'; *{'main::WriteMakefile'} = \&Write if caller(0) eq 'main'; return (@Existing, @Missing); } sub _running_under { my $thing = shift; print <<"END_MESSAGE"; *** Since we're running under ${thing}, I'll just let it take care of the dependency's installation later. END_MESSAGE return 1; } # Check to see if we are currently running under CPAN.pm and/or CPANPLUS; # if we are, then we simply let it taking care of our dependencies sub _check_lock { return unless @Missing or @_; if ($ENV{PERL5_CPANM_IS_RUNNING}) { return _running_under('cpanminus'); } my $cpan_env = $ENV{PERL5_CPAN_IS_RUNNING}; if ($ENV{PERL5_CPANPLUS_IS_RUNNING}) { return _running_under($cpan_env ? 'CPAN' : 'CPANPLUS'); } require CPAN; if ($CPAN::VERSION > '1.89') { if ($cpan_env) { return _running_under('CPAN'); } return; # CPAN.pm new enough, don't need to check further } # last ditch attempt, this -will- configure CPAN, very sorry _load_cpan(1); # force initialize even though it's already loaded # Find the CPAN lock-file my $lock = MM->catfile( $CPAN::Config->{cpan_home}, ".lock" ); return unless -f $lock; # Check the lock local *LOCK; return unless open(LOCK, $lock); if ( ( $^O eq 'MSWin32' ? _under_cpan() : == getppid() ) and ( $CPAN::Config->{prerequisites_policy} || '' ) ne 'ignore' ) { print <<'END_MESSAGE'; *** Since we're running under CPAN, I'll just let it take care of the dependency's installation later. END_MESSAGE return 1; } close LOCK; return; } sub install { my $class = shift; my $i; # used below to strip leading '-' from config keys my @config = ( map { s/^-// if ++$i; $_ } @{ +shift } ); my ( @modules, @installed ); while ( my ( $pkg, $ver ) = splice( @_, 0, 2 ) ) { # grep out those already installed if ( _version_cmp( _version_of($pkg), $ver ) >= 0 ) { push @installed, $pkg; } else { push @modules, $pkg, $ver; } } if ($UpgradeDeps) { push @modules, @installed; @installed = (); } return @installed unless @modules; # nothing to do return @installed if _check_lock(); # defer to the CPAN shell print "*** Installing dependencies...\n"; return unless _connected_to('cpan.org'); my %args = @config; my %failed; local *FAILED; if ( $args{do_once} and open( FAILED, '.#autoinstall.failed' ) ) { while () { chomp; $failed{$_}++ } close FAILED; my @newmod; while ( my ( $k, $v ) = splice( @modules, 0, 2 ) ) { push @newmod, ( $k => $v ) unless $failed{$k}; } @modules = @newmod; } if ( _has_cpanplus() and not $ENV{PERL_AUTOINSTALL_PREFER_CPAN} ) { _install_cpanplus( \@modules, \@config ); } else { _install_cpan( \@modules, \@config ); } print "*** $class installation finished.\n"; # see if we have successfully installed them while ( my ( $pkg, $ver ) = splice( @modules, 0, 2 ) ) { if ( _version_cmp( _version_of($pkg), $ver ) >= 0 ) { push @installed, $pkg; } elsif ( $args{do_once} and open( FAILED, '>> .#autoinstall.failed' ) ) { print FAILED "$pkg\n"; } } close FAILED if $args{do_once}; return @installed; } sub _install_cpanplus { my @modules = @{ +shift }; my @config = _cpanplus_config( @{ +shift } ); my $installed = 0; require CPANPLUS::Backend; my $cp = CPANPLUS::Backend->new; my $conf = $cp->configure_object; return unless $conf->can('conf') # 0.05x+ with "sudo" support or _can_write($conf->_get_build('base')); # 0.04x # if we're root, set UNINST=1 to avoid trouble unless user asked for it. my $makeflags = $conf->get_conf('makeflags') || ''; if ( UNIVERSAL::isa( $makeflags, 'HASH' ) ) { # 0.03+ uses a hashref here $makeflags->{UNINST} = 1 unless exists $makeflags->{UNINST}; } else { # 0.02 and below uses a scalar $makeflags = join( ' ', split( ' ', $makeflags ), 'UNINST=1' ) if ( $makeflags !~ /\bUNINST\b/ and eval qq{ $> eq '0' } ); } $conf->set_conf( makeflags => $makeflags ); $conf->set_conf( prereqs => 1 ); while ( my ( $key, $val ) = splice( @config, 0, 2 ) ) { $conf->set_conf( $key, $val ); } my $modtree = $cp->module_tree; while ( my ( $pkg, $ver ) = splice( @modules, 0, 2 ) ) { print "*** Installing $pkg...\n"; MY::preinstall( $pkg, $ver ) or next if defined &MY::preinstall; my $success; my $obj = $modtree->{$pkg}; if ( $obj and _version_cmp( $obj->{version}, $ver ) >= 0 ) { my $pathname = $pkg; $pathname =~ s/::/\\W/; foreach my $inc ( grep { m/$pathname.pm/i } keys(%INC) ) { delete $INC{$inc}; } my $rv = $cp->install( modules => [ $obj->{module} ] ); if ( $rv and ( $rv->{ $obj->{module} } or $rv->{ok} ) ) { print "*** $pkg successfully installed.\n"; $success = 1; } else { print "*** $pkg installation cancelled.\n"; $success = 0; } $installed += $success; } else { print << "."; *** Could not find a version $ver or above for $pkg; skipping. . } MY::postinstall( $pkg, $ver, $success ) if defined &MY::postinstall; } return $installed; } sub _cpanplus_config { my @config = (); while ( @_ ) { my ($key, $value) = (shift(), shift()); if ( $key eq 'prerequisites_policy' ) { if ( $value eq 'follow' ) { $value = CPANPLUS::Internals::Constants::PREREQ_INSTALL(); } elsif ( $value eq 'ask' ) { $value = CPANPLUS::Internals::Constants::PREREQ_ASK(); } elsif ( $value eq 'ignore' ) { $value = CPANPLUS::Internals::Constants::PREREQ_IGNORE(); } else { die "*** Cannot convert option $key = '$value' to CPANPLUS version.\n"; } push @config, 'prereqs', $value; } elsif ( $key eq 'force' ) { push @config, $key, $value; } elsif ( $key eq 'notest' ) { push @config, 'skiptest', $value; } else { die "*** Cannot convert option $key to CPANPLUS version.\n"; } } return @config; } sub _install_cpan { my @modules = @{ +shift }; my @config = @{ +shift }; my $installed = 0; my %args; _load_cpan(); require Config; if (CPAN->VERSION < 1.80) { # no "sudo" support, probe for writableness return unless _can_write( MM->catfile( $CPAN::Config->{cpan_home}, 'sources' ) ) and _can_write( $Config::Config{sitelib} ); } # if we're root, set UNINST=1 to avoid trouble unless user asked for it. my $makeflags = $CPAN::Config->{make_install_arg} || ''; $CPAN::Config->{make_install_arg} = join( ' ', split( ' ', $makeflags ), 'UNINST=1' ) if ( $makeflags !~ /\bUNINST\b/ and eval qq{ $> eq '0' } ); # don't show start-up info $CPAN::Config->{inhibit_startup_message} = 1; # set additional options while ( my ( $opt, $arg ) = splice( @config, 0, 2 ) ) { ( $args{$opt} = $arg, next ) if $opt =~ /^(?:force|notest)$/; # pseudo-option $CPAN::Config->{$opt} = $arg; } if ($args{notest} && (not CPAN::Shell->can('notest'))) { die "Your version of CPAN is too old to support the 'notest' pragma"; } local $CPAN::Config->{prerequisites_policy} = 'follow'; while ( my ( $pkg, $ver ) = splice( @modules, 0, 2 ) ) { MY::preinstall( $pkg, $ver ) or next if defined &MY::preinstall; print "*** Installing $pkg...\n"; my $obj = CPAN::Shell->expand( Module => $pkg ); my $success = 0; if ( $obj and _version_cmp( $obj->cpan_version, $ver ) >= 0 ) { my $pathname = $pkg; $pathname =~ s/::/\\W/; foreach my $inc ( grep { m/$pathname.pm/i } keys(%INC) ) { delete $INC{$inc}; } my $rv = do { if ($args{force}) { CPAN::Shell->force( install => $pkg ) } elsif ($args{notest}) { CPAN::Shell->notest( install => $pkg ) } else { CPAN::Shell->install($pkg) } }; $rv ||= eval { $CPAN::META->instance( 'CPAN::Distribution', $obj->cpan_file, ) ->{install} if $CPAN::META; }; if ( $rv eq 'YES' ) { print "*** $pkg successfully installed.\n"; $success = 1; } else { print "*** $pkg installation failed.\n"; $success = 0; } $installed += $success; } else { print << "."; *** Could not find a version $ver or above for $pkg; skipping. . } MY::postinstall( $pkg, $ver, $success ) if defined &MY::postinstall; } return $installed; } sub _has_cpanplus { return ( $HasCPANPLUS = ( $INC{'CPANPLUS/Config.pm'} or _load('CPANPLUS::Shell::Default') ) ); } # make guesses on whether we're under the CPAN installation directory sub _under_cpan { require Cwd; require File::Spec; my $cwd = File::Spec->canonpath( Cwd::cwd() ); my $cpan = File::Spec->canonpath( $CPAN::Config->{cpan_home} ); return ( index( $cwd, $cpan ) > -1 ); } sub _update_to { my $class = __PACKAGE__; my $ver = shift; return if _version_cmp( _version_of($class), $ver ) >= 0; # no need to upgrade if ( _prompt( "==> A newer version of $class ($ver) is required. Install?", 'y' ) =~ /^[Nn]/ ) { die "*** Please install $class $ver manually.\n"; } print << "."; *** Trying to fetch it from CPAN... . # install ourselves _load($class) and return $class->import(@_) if $class->install( [], $class, $ver ); print << '.'; exit 1; *** Cannot bootstrap myself. :-( Installation terminated. . } # check if we're connected to some host, using inet_aton sub _connected_to { my $site = shift; return ( ( _load('Socket') and Socket::inet_aton($site) ) or _prompt( qq( *** Your host cannot resolve the domain name '$site', which probably means the Internet connections are unavailable. ==> Should we try to install the required module(s) anyway?), 'n' ) =~ /^[Yy]/ ); } # check if a directory is writable; may create it on demand sub _can_write { my $path = shift; mkdir( $path, 0755 ) unless -e $path; return 1 if -w $path; print << "."; *** You are not allowed to write to the directory '$path'; the installation may fail due to insufficient permissions. . if ( eval '$>' and lc(`sudo -V`) =~ /version/ and _prompt( qq( ==> Should we try to re-execute the autoinstall process with 'sudo'?), ((-t STDIN) ? 'y' : 'n') ) =~ /^[Yy]/ ) { # try to bootstrap ourselves from sudo print << "."; *** Trying to re-execute the autoinstall process with 'sudo'... . my $missing = join( ',', @Missing ); my $config = join( ',', UNIVERSAL::isa( $Config, 'HASH' ) ? %{$Config} : @{$Config} ) if $Config; return unless system( 'sudo', $^X, $0, "--config=$config", "--installdeps=$missing" ); print << "."; *** The 'sudo' command exited with error! Resuming... . } return _prompt( qq( ==> Should we try to install the required module(s) anyway?), 'n' ) =~ /^[Yy]/; } # load a module and return the version it reports sub _load { my $mod = pop; # method/function doesn't matter my $file = $mod; $file =~ s|::|/|g; $file .= '.pm'; local $@; return eval { require $file; $mod->VERSION } || ( $@ ? undef: 0 ); } # report version without loading a module sub _version_of { my $mod = pop; # method/function doesn't matter my $file = $mod; $file =~ s|::|/|g; $file .= '.pm'; foreach my $dir ( @INC ) { next if ref $dir; my $path = File::Spec->catfile($dir, $file); next unless -e $path; require ExtUtils::MM_Unix; return ExtUtils::MM_Unix->parse_version($path); } return undef; } # Load CPAN.pm and it's configuration sub _load_cpan { return if $CPAN::VERSION and $CPAN::Config and not @_; require CPAN; # CPAN-1.82+ adds CPAN::Config::AUTOLOAD to redirect to # CPAN::HandleConfig->load. CPAN reports that the redirection # is deprecated in a warning printed at the user. # CPAN-1.81 expects CPAN::HandleConfig->load, does not have # $CPAN::HandleConfig::VERSION but cannot handle # CPAN::Config->load # Which "versions expect CPAN::Config->load? if ( $CPAN::HandleConfig::VERSION || CPAN::HandleConfig->can('load') ) { # Newer versions of CPAN have a HandleConfig module CPAN::HandleConfig->load; } else { # Older versions had the load method in Config directly CPAN::Config->load; } } # compare two versions, either use Sort::Versions or plain comparison # return values same as <=> sub _version_cmp { my ( $cur, $min ) = @_; return -1 unless defined $cur; # if 0 keep comparing return 1 unless $min; $cur =~ s/\s+$//; # check for version numbers that are not in decimal format if ( ref($cur) or ref($min) or $cur =~ /v|\..*\./ or $min =~ /v|\..*\./ ) { if ( ( $version::VERSION or defined( _load('version') )) and version->can('new') ) { # use version.pm if it is installed. return version->new($cur) <=> version->new($min); } elsif ( $Sort::Versions::VERSION or defined( _load('Sort::Versions') ) ) { # use Sort::Versions as the sorting algorithm for a.b.c versions return Sort::Versions::versioncmp( $cur, $min ); } warn "Cannot reliably compare non-decimal formatted versions.\n" . "Please install version.pm or Sort::Versions.\n"; } # plain comparison local $^W = 0; # shuts off 'not numeric' bugs return $cur <=> $min; } # nothing; this usage is deprecated. sub main::PREREQ_PM { return {}; } sub _make_args { my %args = @_; $args{PREREQ_PM} = { %{ $args{PREREQ_PM} || {} }, @Existing, @Missing } if $UnderCPAN or $TestOnly; if ( $args{EXE_FILES} and -e 'MANIFEST' ) { require ExtUtils::Manifest; my $manifest = ExtUtils::Manifest::maniread('MANIFEST'); $args{EXE_FILES} = [ grep { exists $manifest->{$_} } @{ $args{EXE_FILES} } ]; } $args{test}{TESTS} ||= 't/*.t'; $args{test}{TESTS} = join( ' ', grep { !exists( $DisabledTests{$_} ) } map { glob($_) } split( /\s+/, $args{test}{TESTS} ) ); my $missing = join( ',', @Missing ); my $config = join( ',', UNIVERSAL::isa( $Config, 'HASH' ) ? %{$Config} : @{$Config} ) if $Config; $PostambleActions = ( ($missing and not $UnderCPAN) ? "\$(PERL) $0 --config=$config --installdeps=$missing" : "\$(NOECHO) \$(NOOP)" ); my $deps_list = join( ',', @Missing, @Existing ); $PostambleActionsUpgradeDeps = "\$(PERL) $0 --config=$config --upgradedeps=$deps_list"; my $config_notest = join( ',', (UNIVERSAL::isa( $Config, 'HASH' ) ? %{$Config} : @{$Config}), 'notest', 1 ) if $Config; $PostambleActionsNoTest = ( ($missing and not $UnderCPAN) ? "\$(PERL) $0 --config=$config_notest --installdeps=$missing" : "\$(NOECHO) \$(NOOP)" ); $PostambleActionsUpgradeDepsNoTest = "\$(PERL) $0 --config=$config_notest --upgradedeps=$deps_list"; $PostambleActionsListDeps = '@$(PERL) -le "print for @ARGV" ' . join(' ', map $Missing[$_], grep $_ % 2 == 0, 0..$#Missing); my @all = (@Missing, @Existing); $PostambleActionsListAllDeps = '@$(PERL) -le "print for @ARGV" ' . join(' ', map $all[$_], grep $_ % 2 == 0, 0..$#all); return %args; } # a wrapper to ExtUtils::MakeMaker::WriteMakefile sub Write { require Carp; Carp::croak "WriteMakefile: Need even number of args" if @_ % 2; if ($CheckOnly) { print << "."; *** Makefile not written in check-only mode. . return; } my %args = _make_args(@_); no strict 'refs'; $PostambleUsed = 0; local *MY::postamble = \&postamble unless defined &MY::postamble; ExtUtils::MakeMaker::WriteMakefile(%args); print << "." unless $PostambleUsed; *** WARNING: Makefile written with customized MY::postamble() without including contents from Module::AutoInstall::postamble() -- auto installation features disabled. Please contact the author. . return 1; } sub postamble { $PostambleUsed = 1; my $fragment; $fragment .= <<"AUTO_INSTALL" if !$InstallDepsTarget; config :: installdeps \t\$(NOECHO) \$(NOOP) AUTO_INSTALL $fragment .= <<"END_MAKE"; checkdeps :: \t\$(PERL) $0 --checkdeps installdeps :: \t$PostambleActions installdeps_notest :: \t$PostambleActionsNoTest upgradedeps :: \t$PostambleActionsUpgradeDeps upgradedeps_notest :: \t$PostambleActionsUpgradeDepsNoTest listdeps :: \t$PostambleActionsListDeps listalldeps :: \t$PostambleActionsListAllDeps END_MAKE return $fragment; } 1; __END__ #line 1193 RDF-RDFa-Parser-1.097/inc/Module/Package.pm0000644000076400007640000000311411764060700016164 0ustar taitai#line 1 ## # name: Module::Package # abstract: Postmodern Perl Module Packaging # author: Ingy döt Net # license: perl # copyright: 2011 # see: # - Module::Package::Plugin # - Module::Install::Package # - Module::Package::Tutorial package Module::Package; use 5.005; use strict; BEGIN { $Module::Package::VERSION = '0.30'; $inc::Module::Package::VERSION ||= $Module::Package::VERSION; @inc::Module::Package::ISA = __PACKAGE__; } sub import { my $class = shift; $INC{'inc/Module/Install.pm'} = __FILE__; unshift @INC, 'inc' unless $INC[0] eq 'inc'; eval "use Module::Install 1.01 (); 1" or $class->error($@); package main; Module::Install->import(); eval { module_package_internals_version_check($Module::Package::VERSION); module_package_internals_init(@_); }; if ($@) { $Module::Package::ERROR = $@; die $@; } } # XXX Remove this when things are stable. sub error { my ($class, $error) = @_; if (-e 'inc' and not -e 'inc/.author') { require Data::Dumper; $Data::Dumper::Sortkeys = 1; my $dump1 = Data::Dumper::Dumper(\%INC); my $dump2 = Data::Dumper::Dumper(\@INC); die <<"..."; This should not have happened. Hopefully this dump will explain the problem: inc::Module::Package: $inc::Module::Package::VERSION Module::Package: $Module::Package::VERSION inc::Module::Install: $inc::Module::Install::VERSION Module::Install: $Module::Install::VERSION Error: $error %INC: $dump1 \@INC: $dump2 ... } else { die $error; } } 1; RDF-RDFa-Parser-1.097/inc/Module/Install/0000755000076400007640000000000011764061700015703 5ustar taitaiRDF-RDFa-Parser-1.097/inc/Module/Install/Fetch.pm0000644000076400007640000000462711764060677017317 0ustar taitai#line 1 package Module::Install::Fetch; use strict; use Module::Install::Base (); use vars qw{$VERSION @ISA $ISCORE}; BEGIN { $VERSION = '1.06'; @ISA = 'Module::Install::Base'; $ISCORE = 1; } sub get_file { my ($self, %args) = @_; my ($scheme, $host, $path, $file) = $args{url} =~ m|^(\w+)://([^/]+)(.+)/(.+)| or return; if ( $scheme eq 'http' and ! eval { require LWP::Simple; 1 } ) { $args{url} = $args{ftp_url} or (warn("LWP support unavailable!\n"), return); ($scheme, $host, $path, $file) = $args{url} =~ m|^(\w+)://([^/]+)(.+)/(.+)| or return; } $|++; print "Fetching '$file' from $host... "; unless (eval { require Socket; Socket::inet_aton($host) }) { warn "'$host' resolve failed!\n"; return; } return unless $scheme eq 'ftp' or $scheme eq 'http'; require Cwd; my $dir = Cwd::getcwd(); chdir $args{local_dir} or return if exists $args{local_dir}; if (eval { require LWP::Simple; 1 }) { LWP::Simple::mirror($args{url}, $file); } elsif (eval { require Net::FTP; 1 }) { eval { # use Net::FTP to get past firewall my $ftp = Net::FTP->new($host, Passive => 1, Timeout => 600); $ftp->login("anonymous", 'anonymous@example.com'); $ftp->cwd($path); $ftp->binary; $ftp->get($file) or (warn("$!\n"), return); $ftp->quit; } } elsif (my $ftp = $self->can_run('ftp')) { eval { # no Net::FTP, fallback to ftp.exe require FileHandle; my $fh = FileHandle->new; local $SIG{CHLD} = 'IGNORE'; unless ($fh->open("|$ftp -n")) { warn "Couldn't open ftp: $!\n"; chdir $dir; return; } my @dialog = split(/\n/, <<"END_FTP"); open $host user anonymous anonymous\@example.com cd $path binary get $file $file quit END_FTP foreach (@dialog) { $fh->print("$_\n") } $fh->close; } } else { warn "No working 'ftp' program available!\n"; chdir $dir; return; } unless (-f $file) { warn "Fetching failed: $@\n"; chdir $dir; return; } return if exists $args{size} and -s $file != $args{size}; system($args{run}) if exists $args{run}; unlink($file) if $args{remove}; print(((!exists $args{check_for} or -e $args{check_for}) ? "done!" : "failed! ($!)"), "\n"); chdir $dir; return !$?; } 1; RDF-RDFa-Parser-1.097/inc/Module/Install/AutoInstall.pm0000644000076400007640000000416211764060675020515 0ustar taitai#line 1 package Module::Install::AutoInstall; use strict; use Module::Install::Base (); use vars qw{$VERSION @ISA $ISCORE}; BEGIN { $VERSION = '1.06'; @ISA = 'Module::Install::Base'; $ISCORE = 1; } sub AutoInstall { $_[0] } sub run { my $self = shift; $self->auto_install_now(@_); } sub write { my $self = shift; $self->auto_install(@_); } sub auto_install { my $self = shift; return if $self->{done}++; # Flatten array of arrays into a single array my @core = map @$_, map @$_, grep ref, $self->build_requires, $self->requires; my @config = @_; # We'll need Module::AutoInstall $self->include('Module::AutoInstall'); require Module::AutoInstall; my @features_require = Module::AutoInstall->import( (@config ? (-config => \@config) : ()), (@core ? (-core => \@core) : ()), $self->features, ); my %seen; my @requires = map @$_, map @$_, grep ref, $self->requires; while (my ($mod, $ver) = splice(@requires, 0, 2)) { $seen{$mod}{$ver}++; } my @build_requires = map @$_, map @$_, grep ref, $self->build_requires; while (my ($mod, $ver) = splice(@build_requires, 0, 2)) { $seen{$mod}{$ver}++; } my @configure_requires = map @$_, map @$_, grep ref, $self->configure_requires; while (my ($mod, $ver) = splice(@configure_requires, 0, 2)) { $seen{$mod}{$ver}++; } my @deduped; while (my ($mod, $ver) = splice(@features_require, 0, 2)) { push @deduped, $mod => $ver unless $seen{$mod}{$ver}++; } $self->requires(@deduped); $self->makemaker_args( Module::AutoInstall::_make_args() ); my $class = ref($self); $self->postamble( "# --- $class section:\n" . Module::AutoInstall::postamble() ); } sub installdeps_target { my ($self, @args) = @_; $self->include('Module::AutoInstall'); require Module::AutoInstall; Module::AutoInstall::_installdeps_target(1); $self->auto_install(@args); } sub auto_install_now { my $self = shift; $self->auto_install(@_); Module::AutoInstall::do_install(); } 1; RDF-RDFa-Parser-1.097/inc/Module/Install/Package.pm0000644000076400007640000002340511764060650017603 0ustar taitai#line 1 ## # name: Module::Install::Package # abstract: Module::Install support for Module::Package # author: Ingy döt Net # license: perl # copyright: 2011 # see: # - Module::Package # This module contains the Module::Package logic that must be available to # both the Author and the End User. Author-only logic goes in a # Module::Package::Plugin subclass. package Module::Install::Package; use strict; use Module::Install::Base; use vars qw'@ISA $VERSION'; @ISA = 'Module::Install::Base'; $VERSION = '0.30'; #-----------------------------------------------------------------------------# # XXX BOOTBUGHACK # This is here to try to get us out of Module-Package-0.11 cpantesters hell... # Remove this when the situation has blown over. sub pkg { *inc::Module::Package::VERSION = sub { $VERSION }; my $self = shift; $self->module_package_internals_init($@); } #-----------------------------------------------------------------------------# # We allow the author to specify key/value options after the plugin. These # options need to be available both at author time and install time. #-----------------------------------------------------------------------------# # OO accessor for command line options: sub package_options { @_>1?($_[0]->{package_options}=$_[1]):$_[0]->{package_options}} my $default_options = { deps_list => 1, install_bin => 1, install_share => 1, manifest_skip => 1, requires_from => 1, }; #-----------------------------------------------------------------------------# # Module::Install plugin directives. Use long, ugly names to not pollute the # Module::Install plugin namespace. These are only intended to be called from # Module::Package. #-----------------------------------------------------------------------------# # Module::Package starts off life as a normal call to this Module::Install # plugin directive: my $module_install_plugin; my $module_package_plugin; my $module_package_dist_plugin; # XXX ARGVHACK This @argv thing is a temporary fix for an ugly bug somewhere in the # Wikitext module usage. my @argv; sub module_package_internals_init { my $self = $module_install_plugin = shift; my ($plugin_spec, %options) = @_; $self->package_options({%$default_options, %options}); if ($module_install_plugin->is_admin) { $module_package_plugin = $self->_load_plugin($plugin_spec); $module_package_plugin->mi($module_install_plugin); $module_package_plugin->version_check($VERSION); } else { $module_package_dist_plugin = $self->_load_dist_plugin($plugin_spec); $module_package_dist_plugin->mi($module_install_plugin) if ref $module_package_dist_plugin; } # NOTE - This is the point in time where the body of Makefile.PL runs... return; sub INIT { return unless $module_install_plugin; return if $Module::Package::ERROR; eval { if ($module_install_plugin->is_admin) { $module_package_plugin->initial(); $module_package_plugin->main(); } else { $module_install_plugin->_initial(); $module_package_dist_plugin->_initial() if ref $module_package_dist_plugin; $module_install_plugin->_main(); $module_package_dist_plugin->_main() if ref $module_package_dist_plugin; } }; if ($@) { $Module::Package::ERROR = $@; die $@; } @argv = @ARGV; # XXX ARGVHACK } # If this Module::Install plugin was used (by Module::Package) then wrap # up any loose ends. This will get called after Makefile.PL has completed. sub END { @ARGV = @argv; # XXX ARGVHACK return unless $module_install_plugin; return if $Module::Package::ERROR; $module_package_plugin ? do { $module_package_plugin->final; $module_package_plugin->replicate_module_package; } : do { $module_install_plugin->_final; $module_package_dist_plugin->_final() if ref $module_package_dist_plugin; } } } # Module::Package, Module::Install::Package and Module::Package::Plugin # must all have the same version. Seems wise. sub module_package_internals_version_check { my ($self, $version) = @_; return if $version < 0.1800001; # XXX BOOTBUGHACK!! die <<"..." unless $version == $VERSION; Error! Something has gone awry: Module::Package version=$version is using Module::Install::Package version=$VERSION If you are the author of this module, try upgrading Module::Package. Otherwise, please notify the author of this error. ... } # Find and load the author side plugin: sub _load_plugin { my ($self, $spec, $namespace) = @_; $spec ||= ''; $namespace ||= 'Module::Package'; my $version = ''; $Module::Package::plugin_version = 0; if ($spec =~ s/\s+(\S+)\s*//) { $version = $1; $Module::Package::plugin_version = $version; } my ($module, $plugin) = not($spec) ? ('Plugin', "Plugin::basic") : ($spec =~ /^\w(\w|::)*$/) ? ($spec, $spec) : ($spec =~ /^:(\w+)$/) ? ('Plugin', "Plugin::$1") : ($spec =~ /^(\S*\w):(\w+)$/) ? ($1, "$1::$2") : die "$spec is invalid"; $module = "${namespace}::${module}"; $plugin = "${namespace}::${plugin}"; eval "use $module $version (); 1" or die $@; return $plugin->new(); } # Find and load the user side plugin: sub _load_dist_plugin { my ($self, $spec, $namespace) = @_; $spec ||= ''; $namespace ||= 'Module::Package::Dist'; my $r = eval { $self->_load_plugin($spec, $namespace); }; return $r if ref $r; return; } #-----------------------------------------------------------------------------# # These are the user side analogs to the author side plugin API calls. # Prefix with '_' to not pollute Module::Install plugin space. #-----------------------------------------------------------------------------# sub _initial { my ($self) = @_; } sub _main { my ($self) = @_; } # NOTE These must match Module::Package::Plugin::final. sub _final { my ($self) = @_; $self->_all_from; $self->_requires_from; $self->_install_bin; $self->_install_share; $self->_WriteAll; } #-----------------------------------------------------------------------------# # This section is where all the useful code bits go. These bits are needed by # both Author and User side runs. #-----------------------------------------------------------------------------# my $all_from = 0; sub _all_from { my $self = shift; return if $all_from++; return if $self->name; my $file = shift || "$main::PM" or die "all_from has no file"; $self->all_from($file); } my $requires_from = 0; sub _requires_from { my $self = shift; return if $requires_from++; return unless $self->package_options->{requires_from}; my $file = shift || "$main::PM" or die "requires_from has no file"; $self->requires_from($main::PM) } my $install_bin = 0; sub _install_bin { my $self = shift; return if $install_bin++; return unless $self->package_options->{install_bin}; return unless -d 'bin'; my @bin; File::Find::find(sub { return unless -f $_; push @bin, $File::Find::name; }, 'bin'); $self->install_script($_) for @bin; } my $install_share = 0; sub _install_share { my $self = shift; return if $install_share++; return unless $self->package_options->{install_share}; return unless -d 'share'; $self->install_share; } my $WriteAll = 0; sub _WriteAll { my $self = shift; return if $WriteAll++; $self->WriteAll(@_); } # Base package for Module::Package plugin distributed components. package Module::Package::Dist; sub new { my ($class, %args) = @_; bless \%args, $class; } sub mi { @_ > 1 ? ($_[0]->{mi}=$_[1]) : $_[0]->{mi}; } sub _initial { my ($self) = @_; } sub _main { my ($self) = @_; } sub _final { my ($self) = @_; } 1; #-----------------------------------------------------------------------------# # Take a guess at the primary .pm and .pod files for 'all_from', and friends. # Put them in global magical vars in the main:: namespace. #-----------------------------------------------------------------------------# package Module::Package::PM; use overload '""' => sub { $_[0]->guess_pm unless @{$_[0]}; return $_[0]->[0]; }; sub set { $_[0]->[0] = $_[1] } sub guess_pm { my $pm = ''; my $self = shift; if (-e 'META.yml') { open META, 'META.yml' or die "Can't open 'META.yml' for input:\n$!"; my $meta = do { local $/; }; close META; $meta =~ /^module_name: (\S+)$/m or die "Can't get module_name from META.yml"; $pm = $1; $pm =~ s!::!/!g; $pm = "lib/$pm.pm"; } else { require File::Find; my @array = (); File::Find::find(sub { return unless /\.pm$/; my $name = $File::Find::name; my $num = ($name =~ s!/+!/!g); my $ary = $array[$num] ||= []; push @$ary, $name; }, 'lib'); shift @array while @array and not defined $array[0]; die "Can't guess main module" unless @array; (($pm) = sort @{$array[0]}) or die "Can't guess main module"; } my $pmc = $pm . 'c'; $pm = $pmc if -e $pmc; $self->set($pm); } $main::PM = bless [$main::PM ? ($main::PM) : ()], __PACKAGE__; package Module::Package::POD; use overload '""' => sub { return $_[0]->[0] if @{$_[0]}; (my $pod = "$main::PM") =~ s/\.pm/.pod/ or die "Module::Package's \$main::PM value should end in '.pm'"; return -e $pod ? $pod : ''; }; sub set { $_[0][0] = $_[1] } $main::POD = bless [$main::POD ? ($main::POD) : ()], __PACKAGE__; 1; RDF-RDFa-Parser-1.097/inc/Module/Install/Win32.pm0000644000076400007640000000340311764060677017157 0ustar taitai#line 1 package Module::Install::Win32; use strict; use Module::Install::Base (); use vars qw{$VERSION @ISA $ISCORE}; BEGIN { $VERSION = '1.06'; @ISA = 'Module::Install::Base'; $ISCORE = 1; } # determine if the user needs nmake, and download it if needed sub check_nmake { my $self = shift; $self->load('can_run'); $self->load('get_file'); require Config; return unless ( $^O eq 'MSWin32' and $Config::Config{make} and $Config::Config{make} =~ /^nmake\b/i and ! $self->can_run('nmake') ); print "The required 'nmake' executable not found, fetching it...\n"; require File::Basename; my $rv = $self->get_file( url => 'http://download.microsoft.com/download/vc15/Patch/1.52/W95/EN-US/Nmake15.exe', ftp_url => 'ftp://ftp.microsoft.com/Softlib/MSLFILES/Nmake15.exe', local_dir => File::Basename::dirname($^X), size => 51928, run => 'Nmake15.exe /o > nul', check_for => 'Nmake.exe', remove => 1, ); die <<'END_MESSAGE' unless $rv; ------------------------------------------------------------------------------- Since you are using Microsoft Windows, you will need the 'nmake' utility before installation. It's available at: http://download.microsoft.com/download/vc15/Patch/1.52/W95/EN-US/Nmake15.exe or ftp://ftp.microsoft.com/Softlib/MSLFILES/Nmake15.exe Please download the file manually, save it to a directory in %PATH% (e.g. C:\WINDOWS\COMMAND\), then launch the MS-DOS command line shell, "cd" to that directory, and run "Nmake15.exe" from there; that will create the 'nmake.exe' file needed by this module. You may then resume the installation process described in README. ------------------------------------------------------------------------------- END_MESSAGE } 1; RDF-RDFa-Parser-1.097/inc/Module/Install/Makefile.pm0000644000076400007640000002743711764060662020001 0ustar taitai#line 1 package Module::Install::Makefile; use strict 'vars'; use ExtUtils::MakeMaker (); use Module::Install::Base (); use Fcntl qw/:flock :seek/; use vars qw{$VERSION @ISA $ISCORE}; BEGIN { $VERSION = '1.06'; @ISA = 'Module::Install::Base'; $ISCORE = 1; } sub Makefile { $_[0] } my %seen = (); sub prompt { shift; # Infinite loop protection my @c = caller(); if ( ++$seen{"$c[1]|$c[2]|$_[0]"} > 3 ) { die "Caught an potential prompt infinite loop ($c[1]|$c[2]|$_[0])"; } # In automated testing or non-interactive session, always use defaults if ( ($ENV{AUTOMATED_TESTING} or -! -t STDIN) and ! $ENV{PERL_MM_USE_DEFAULT} ) { local $ENV{PERL_MM_USE_DEFAULT} = 1; goto &ExtUtils::MakeMaker::prompt; } else { goto &ExtUtils::MakeMaker::prompt; } } # Store a cleaned up version of the MakeMaker version, # since we need to behave differently in a variety of # ways based on the MM version. my $makemaker = eval $ExtUtils::MakeMaker::VERSION; # If we are passed a param, do a "newer than" comparison. # Otherwise, just return the MakeMaker version. sub makemaker { ( @_ < 2 or $makemaker >= eval($_[1]) ) ? $makemaker : 0 } # Ripped from ExtUtils::MakeMaker 6.56, and slightly modified # as we only need to know here whether the attribute is an array # or a hash or something else (which may or may not be appendable). my %makemaker_argtype = ( C => 'ARRAY', CONFIG => 'ARRAY', # CONFIGURE => 'CODE', # ignore DIR => 'ARRAY', DL_FUNCS => 'HASH', DL_VARS => 'ARRAY', EXCLUDE_EXT => 'ARRAY', EXE_FILES => 'ARRAY', FUNCLIST => 'ARRAY', H => 'ARRAY', IMPORTS => 'HASH', INCLUDE_EXT => 'ARRAY', LIBS => 'ARRAY', # ignore '' MAN1PODS => 'HASH', MAN3PODS => 'HASH', META_ADD => 'HASH', META_MERGE => 'HASH', PL_FILES => 'HASH', PM => 'HASH', PMLIBDIRS => 'ARRAY', PMLIBPARENTDIRS => 'ARRAY', PREREQ_PM => 'HASH', CONFIGURE_REQUIRES => 'HASH', SKIP => 'ARRAY', TYPEMAPS => 'ARRAY', XS => 'HASH', # VERSION => ['version',''], # ignore # _KEEP_AFTER_FLUSH => '', clean => 'HASH', depend => 'HASH', dist => 'HASH', dynamic_lib=> 'HASH', linkext => 'HASH', macro => 'HASH', postamble => 'HASH', realclean => 'HASH', test => 'HASH', tool_autosplit => 'HASH', # special cases where you can use makemaker_append CCFLAGS => 'APPENDABLE', DEFINE => 'APPENDABLE', INC => 'APPENDABLE', LDDLFLAGS => 'APPENDABLE', LDFROM => 'APPENDABLE', ); sub makemaker_args { my ($self, %new_args) = @_; my $args = ( $self->{makemaker_args} ||= {} ); foreach my $key (keys %new_args) { if ($makemaker_argtype{$key}) { if ($makemaker_argtype{$key} eq 'ARRAY') { $args->{$key} = [] unless defined $args->{$key}; unless (ref $args->{$key} eq 'ARRAY') { $args->{$key} = [$args->{$key}] } push @{$args->{$key}}, ref $new_args{$key} eq 'ARRAY' ? @{$new_args{$key}} : $new_args{$key}; } elsif ($makemaker_argtype{$key} eq 'HASH') { $args->{$key} = {} unless defined $args->{$key}; foreach my $skey (keys %{ $new_args{$key} }) { $args->{$key}{$skey} = $new_args{$key}{$skey}; } } elsif ($makemaker_argtype{$key} eq 'APPENDABLE') { $self->makemaker_append($key => $new_args{$key}); } } else { if (defined $args->{$key}) { warn qq{MakeMaker attribute "$key" is overriden; use "makemaker_append" to append values\n}; } $args->{$key} = $new_args{$key}; } } return $args; } # For mm args that take multiple space-seperated args, # append an argument to the current list. sub makemaker_append { my $self = shift; my $name = shift; my $args = $self->makemaker_args; $args->{$name} = defined $args->{$name} ? join( ' ', $args->{$name}, @_ ) : join( ' ', @_ ); } sub build_subdirs { my $self = shift; my $subdirs = $self->makemaker_args->{DIR} ||= []; for my $subdir (@_) { push @$subdirs, $subdir; } } sub clean_files { my $self = shift; my $clean = $self->makemaker_args->{clean} ||= {}; %$clean = ( %$clean, FILES => join ' ', grep { length $_ } ($clean->{FILES} || (), @_), ); } sub realclean_files { my $self = shift; my $realclean = $self->makemaker_args->{realclean} ||= {}; %$realclean = ( %$realclean, FILES => join ' ', grep { length $_ } ($realclean->{FILES} || (), @_), ); } sub libs { my $self = shift; my $libs = ref $_[0] ? shift : [ shift ]; $self->makemaker_args( LIBS => $libs ); } sub inc { my $self = shift; $self->makemaker_args( INC => shift ); } sub _wanted_t { } sub tests_recursive { my $self = shift; my $dir = shift || 't'; unless ( -d $dir ) { die "tests_recursive dir '$dir' does not exist"; } my %tests = map { $_ => 1 } split / /, ($self->tests || ''); require File::Find; File::Find::find( sub { /\.t$/ and -f $_ and $tests{"$File::Find::dir/*.t"} = 1 }, $dir ); $self->tests( join ' ', sort keys %tests ); } sub write { my $self = shift; die "&Makefile->write() takes no arguments\n" if @_; # Check the current Perl version my $perl_version = $self->perl_version; if ( $perl_version ) { eval "use $perl_version; 1" or die "ERROR: perl: Version $] is installed, " . "but we need version >= $perl_version"; } # Make sure we have a new enough MakeMaker require ExtUtils::MakeMaker; if ( $perl_version and $self->_cmp($perl_version, '5.006') >= 0 ) { # This previous attempted to inherit the version of # ExtUtils::MakeMaker in use by the module author, but this # was found to be untenable as some authors build releases # using future dev versions of EU:MM that nobody else has. # Instead, #toolchain suggests we use 6.59 which is the most # stable version on CPAN at time of writing and is, to quote # ribasushi, "not terminally fucked, > and tested enough". # TODO: We will now need to maintain this over time to push # the version up as new versions are released. $self->build_requires( 'ExtUtils::MakeMaker' => 6.59 ); $self->configure_requires( 'ExtUtils::MakeMaker' => 6.59 ); } else { # Allow legacy-compatibility with 5.005 by depending on the # most recent EU:MM that supported 5.005. $self->build_requires( 'ExtUtils::MakeMaker' => 6.36 ); $self->configure_requires( 'ExtUtils::MakeMaker' => 6.36 ); } # Generate the MakeMaker params my $args = $self->makemaker_args; $args->{DISTNAME} = $self->name; $args->{NAME} = $self->module_name || $self->name; $args->{NAME} =~ s/-/::/g; $args->{VERSION} = $self->version or die <<'EOT'; ERROR: Can't determine distribution version. Please specify it explicitly via 'version' in Makefile.PL, or set a valid $VERSION in a module, and provide its file path via 'version_from' (or 'all_from' if you prefer) in Makefile.PL. EOT if ( $self->tests ) { my @tests = split ' ', $self->tests; my %seen; $args->{test} = { TESTS => (join ' ', grep {!$seen{$_}++} @tests), }; } elsif ( $Module::Install::ExtraTests::use_extratests ) { # Module::Install::ExtraTests doesn't set $self->tests and does its own tests via harness. # So, just ignore our xt tests here. } elsif ( -d 'xt' and ($Module::Install::AUTHOR or $ENV{RELEASE_TESTING}) ) { $args->{test} = { TESTS => join( ' ', map { "$_/*.t" } grep { -d $_ } qw{ t xt } ), }; } if ( $] >= 5.005 ) { $args->{ABSTRACT} = $self->abstract; $args->{AUTHOR} = join ', ', @{$self->author || []}; } if ( $self->makemaker(6.10) ) { $args->{NO_META} = 1; #$args->{NO_MYMETA} = 1; } if ( $self->makemaker(6.17) and $self->sign ) { $args->{SIGN} = 1; } unless ( $self->is_admin ) { delete $args->{SIGN}; } if ( $self->makemaker(6.31) and $self->license ) { $args->{LICENSE} = $self->license; } my $prereq = ($args->{PREREQ_PM} ||= {}); %$prereq = ( %$prereq, map { @$_ } # flatten [module => version] map { @$_ } grep $_, ($self->requires) ); # Remove any reference to perl, PREREQ_PM doesn't support it delete $args->{PREREQ_PM}->{perl}; # Merge both kinds of requires into BUILD_REQUIRES my $build_prereq = ($args->{BUILD_REQUIRES} ||= {}); %$build_prereq = ( %$build_prereq, map { @$_ } # flatten [module => version] map { @$_ } grep $_, ($self->configure_requires, $self->build_requires) ); # Remove any reference to perl, BUILD_REQUIRES doesn't support it delete $args->{BUILD_REQUIRES}->{perl}; # Delete bundled dists from prereq_pm, add it to Makefile DIR my $subdirs = ($args->{DIR} || []); if ($self->bundles) { my %processed; foreach my $bundle (@{ $self->bundles }) { my ($mod_name, $dist_dir) = @$bundle; delete $prereq->{$mod_name}; $dist_dir = File::Basename::basename($dist_dir); # dir for building this module if (not exists $processed{$dist_dir}) { if (-d $dist_dir) { # List as sub-directory to be processed by make push @$subdirs, $dist_dir; } # Else do nothing: the module is already present on the system $processed{$dist_dir} = undef; } } } unless ( $self->makemaker('6.55_03') ) { %$prereq = (%$prereq,%$build_prereq); delete $args->{BUILD_REQUIRES}; } if ( my $perl_version = $self->perl_version ) { eval "use $perl_version; 1" or die "ERROR: perl: Version $] is installed, " . "but we need version >= $perl_version"; if ( $self->makemaker(6.48) ) { $args->{MIN_PERL_VERSION} = $perl_version; } } if ($self->installdirs) { warn qq{old INSTALLDIRS (probably set by makemaker_args) is overriden by installdirs\n} if $args->{INSTALLDIRS}; $args->{INSTALLDIRS} = $self->installdirs; } my %args = map { ( $_ => $args->{$_} ) } grep {defined($args->{$_} ) } keys %$args; my $user_preop = delete $args{dist}->{PREOP}; if ( my $preop = $self->admin->preop($user_preop) ) { foreach my $key ( keys %$preop ) { $args{dist}->{$key} = $preop->{$key}; } } my $mm = ExtUtils::MakeMaker::WriteMakefile(%args); $self->fix_up_makefile($mm->{FIRST_MAKEFILE} || 'Makefile'); } sub fix_up_makefile { my $self = shift; my $makefile_name = shift; my $top_class = ref($self->_top) || ''; my $top_version = $self->_top->VERSION || ''; my $preamble = $self->preamble ? "# Preamble by $top_class $top_version\n" . $self->preamble : ''; my $postamble = "# Postamble by $top_class $top_version\n" . ($self->postamble || ''); local *MAKEFILE; open MAKEFILE, "+< $makefile_name" or die "fix_up_makefile: Couldn't open $makefile_name: $!"; eval { flock MAKEFILE, LOCK_EX }; my $makefile = do { local $/; }; $makefile =~ s/\b(test_harness\(\$\(TEST_VERBOSE\), )/$1'inc', /; $makefile =~ s/( -I\$\(INST_ARCHLIB\))/ -Iinc$1/g; $makefile =~ s/( "-I\$\(INST_LIB\)")/ "-Iinc"$1/g; $makefile =~ s/^(FULLPERL = .*)/$1 "-Iinc"/m; $makefile =~ s/^(PERL = .*)/$1 "-Iinc"/m; # Module::Install will never be used to build the Core Perl # Sometimes PERL_LIB and PERL_ARCHLIB get written anyway, which breaks # PREFIX/PERL5LIB, and thus, install_share. Blank them if they exist $makefile =~ s/^PERL_LIB = .+/PERL_LIB =/m; #$makefile =~ s/^PERL_ARCHLIB = .+/PERL_ARCHLIB =/m; # Perl 5.005 mentions PERL_LIB explicitly, so we have to remove that as well. $makefile =~ s/(\"?)-I\$\(PERL_LIB\)\1//g; # XXX - This is currently unused; not sure if it breaks other MM-users # $makefile =~ s/^pm_to_blib\s+:\s+/pm_to_blib :: /mg; seek MAKEFILE, 0, SEEK_SET; truncate MAKEFILE, 0; print MAKEFILE "$preamble$makefile$postamble" or die $!; close MAKEFILE or die $!; 1; } sub preamble { my ($self, $text) = @_; $self->{preamble} = $text . $self->{preamble} if defined $text; $self->{preamble}; } sub postamble { my ($self, $text) = @_; $self->{postamble} ||= $self->admin->postamble; $self->{postamble} .= $text if defined $text; $self->{postamble} } 1; __END__ #line 544 RDF-RDFa-Parser-1.097/inc/Module/Install/Can.pm0000644000076400007640000000615711764060677016767 0ustar taitai#line 1 package Module::Install::Can; use strict; use Config (); use ExtUtils::MakeMaker (); use Module::Install::Base (); use vars qw{$VERSION @ISA $ISCORE}; BEGIN { $VERSION = '1.06'; @ISA = 'Module::Install::Base'; $ISCORE = 1; } # check if we can load some module ### Upgrade this to not have to load the module if possible sub can_use { my ($self, $mod, $ver) = @_; $mod =~ s{::|\\}{/}g; $mod .= '.pm' unless $mod =~ /\.pm$/i; my $pkg = $mod; $pkg =~ s{/}{::}g; $pkg =~ s{\.pm$}{}i; local $@; eval { require $mod; $pkg->VERSION($ver || 0); 1 }; } # Check if we can run some command sub can_run { my ($self, $cmd) = @_; my $_cmd = $cmd; return $_cmd if (-x $_cmd or $_cmd = MM->maybe_command($_cmd)); for my $dir ((split /$Config::Config{path_sep}/, $ENV{PATH}), '.') { next if $dir eq ''; require File::Spec; my $abs = File::Spec->catfile($dir, $cmd); return $abs if (-x $abs or $abs = MM->maybe_command($abs)); } return; } # Can our C compiler environment build XS files sub can_xs { my $self = shift; # Ensure we have the CBuilder module $self->configure_requires( 'ExtUtils::CBuilder' => 0.27 ); # Do we have the configure_requires checker? local $@; eval "require ExtUtils::CBuilder;"; if ( $@ ) { # They don't obey configure_requires, so it is # someone old and delicate. Try to avoid hurting # them by falling back to an older simpler test. return $self->can_cc(); } # Do we have a working C compiler my $builder = ExtUtils::CBuilder->new( quiet => 1, ); unless ( $builder->have_compiler ) { # No working C compiler return 0; } # Write a C file representative of what XS becomes require File::Temp; my ( $FH, $tmpfile ) = File::Temp::tempfile( "compilexs-XXXXX", SUFFIX => '.c', ); binmode $FH; print $FH <<'END_C'; #include "EXTERN.h" #include "perl.h" #include "XSUB.h" int main(int argc, char **argv) { return 0; } int boot_sanexs() { return 1; } END_C close $FH; # Can the C compiler access the same headers XS does my @libs = (); my $object = undef; eval { local $^W = 0; $object = $builder->compile( source => $tmpfile, ); @libs = $builder->link( objects => $object, module_name => 'sanexs', ); }; my $result = $@ ? 0 : 1; # Clean up all the build files foreach ( $tmpfile, $object, @libs ) { next unless defined $_; 1 while unlink; } return $result; } # Can we locate a (the) C compiler sub can_cc { my $self = shift; my @chunks = split(/ /, $Config::Config{cc}) or return; # $Config{cc} may contain args; try to find out the program part while (@chunks) { return $self->can_run("@chunks") || (pop(@chunks), next); } return; } # Fix Cygwin bug on maybe_command(); if ( $^O eq 'cygwin' ) { require ExtUtils::MM_Cygwin; require ExtUtils::MM_Win32; if ( ! defined(&ExtUtils::MM_Cygwin::maybe_command) ) { *ExtUtils::MM_Cygwin::maybe_command = sub { my ($self, $file) = @_; if ($file =~ m{^/cygdrive/}i and ExtUtils::MM_Win32->can('maybe_command')) { ExtUtils::MM_Win32->maybe_command($file); } else { ExtUtils::MM_Unix->maybe_command($file); } } } } 1; __END__ #line 236 RDF-RDFa-Parser-1.097/inc/Module/Install/Base.pm0000644000076400007640000000214711764060650017122 0ustar taitai#line 1 package Module::Install::Base; use strict 'vars'; use vars qw{$VERSION}; BEGIN { $VERSION = '1.06'; } # Suspend handler for "redefined" warnings BEGIN { my $w = $SIG{__WARN__}; $SIG{__WARN__} = sub { $w }; } #line 42 sub new { my $class = shift; unless ( defined &{"${class}::call"} ) { *{"${class}::call"} = sub { shift->_top->call(@_) }; } unless ( defined &{"${class}::load"} ) { *{"${class}::load"} = sub { shift->_top->load(@_) }; } bless { @_ }, $class; } #line 61 sub AUTOLOAD { local $@; my $func = eval { shift->_top->autoload } or return; goto &$func; } #line 75 sub _top { $_[0]->{_top}; } #line 90 sub admin { $_[0]->_top->{admin} or Module::Install::Base::FakeAdmin->new; } #line 106 sub is_admin { ! $_[0]->admin->isa('Module::Install::Base::FakeAdmin'); } sub DESTROY {} package Module::Install::Base::FakeAdmin; use vars qw{$VERSION}; BEGIN { $VERSION = $Module::Install::Base::VERSION; } my $fake; sub new { $fake ||= bless(\@_, $_[0]); } sub AUTOLOAD {} sub DESTROY {} # Restore warning handler BEGIN { $SIG{__WARN__} = $SIG{__WARN__}->(); } 1; #line 159 RDF-RDFa-Parser-1.097/inc/Module/Install/Share.pm0000644000076400007640000000464311764060676017325 0ustar taitai#line 1 package Module::Install::Share; use strict; use Module::Install::Base (); use File::Find (); use ExtUtils::Manifest (); use vars qw{$VERSION @ISA $ISCORE}; BEGIN { $VERSION = '1.06'; @ISA = 'Module::Install::Base'; $ISCORE = 1; } sub install_share { my $self = shift; my $dir = @_ ? pop : 'share'; my $type = @_ ? shift : 'dist'; unless ( defined $type and $type eq 'module' or $type eq 'dist' ) { die "Illegal or invalid share dir type '$type'"; } unless ( defined $dir and -d $dir ) { require Carp; Carp::croak("Illegal or missing directory install_share param: '$dir'"); } # Split by type my $S = ($^O eq 'MSWin32') ? "\\" : "\/"; my $root; if ( $type eq 'dist' ) { die "Too many parameters to install_share" if @_; # Set up the install $root = "\$(INST_LIB)${S}auto${S}share${S}dist${S}\$(DISTNAME)"; } else { my $module = Module::Install::_CLASS($_[0]); unless ( defined $module ) { die "Missing or invalid module name '$_[0]'"; } $module =~ s/::/-/g; $root = "\$(INST_LIB)${S}auto${S}share${S}module${S}$module"; } my $manifest = -r 'MANIFEST' ? ExtUtils::Manifest::maniread() : undef; my $skip_checker = $ExtUtils::Manifest::VERSION >= 1.54 ? ExtUtils::Manifest::maniskip() : ExtUtils::Manifest::_maniskip(); my $postamble = ''; my $perm_dir = eval($ExtUtils::MakeMaker::VERSION) >= 6.52 ? '$(PERM_DIR)' : 755; File::Find::find({ no_chdir => 1, wanted => sub { my $path = File::Spec->abs2rel($_, $dir); if (-d $_) { return if $skip_checker->($File::Find::name); $postamble .=<<"END"; \t\$(NOECHO) \$(MKPATH) "$root${S}$path" \t\$(NOECHO) \$(CHMOD) $perm_dir "$root${S}$path" END } else { return if ref $manifest && !exists $manifest->{$File::Find::name}; return if $skip_checker->($File::Find::name); $postamble .=<<"END"; \t\$(NOECHO) \$(CP) "$dir${S}$path" "$root${S}$path" END } }, }, $dir); # Set up the install $self->postamble(<<"END_MAKEFILE"); config :: $postamble END_MAKEFILE # The above appears to behave incorrectly when used with old versions # of ExtUtils::Install (known-bad on RHEL 3, with 5.8.0) # So when we need to install a share directory, make sure we add a # dependency on a moderately new version of ExtUtils::MakeMaker. $self->build_requires( 'ExtUtils::MakeMaker' => '6.11' ); # 99% of the time we don't want to index a shared dir $self->no_index( directory => $dir ); } 1; __END__ #line 154 RDF-RDFa-Parser-1.097/inc/Module/Install/WriteAll.pm0000644000076400007640000000237611764060677020010 0ustar taitai#line 1 package Module::Install::WriteAll; use strict; use Module::Install::Base (); use vars qw{$VERSION @ISA $ISCORE}; BEGIN { $VERSION = '1.06'; @ISA = qw{Module::Install::Base}; $ISCORE = 1; } sub WriteAll { my $self = shift; my %args = ( meta => 1, sign => 0, inline => 0, check_nmake => 1, @_, ); $self->sign(1) if $args{sign}; $self->admin->WriteAll(%args) if $self->is_admin; $self->check_nmake if $args{check_nmake}; unless ( $self->makemaker_args->{PL_FILES} ) { # XXX: This still may be a bit over-defensive... unless ($self->makemaker(6.25)) { $self->makemaker_args( PL_FILES => {} ) if -f 'Build.PL'; } } # Until ExtUtils::MakeMaker support MYMETA.yml, make sure # we clean it up properly ourself. $self->realclean_files('MYMETA.yml'); if ( $args{inline} ) { $self->Inline->write; } else { $self->Makefile->write; } # The Makefile write process adds a couple of dependencies, # so write the META.yml files after the Makefile. if ( $args{meta} ) { $self->Meta->write; } # Experimental support for MYMETA if ( $ENV{X_MYMETA} ) { if ( $ENV{X_MYMETA} eq 'JSON' ) { $self->Meta->write_mymeta_json; } else { $self->Meta->write_mymeta_yaml; } } return 1; } 1; RDF-RDFa-Parser-1.097/inc/Module/Install/Include.pm0000644000076400007640000000101511764060650017624 0ustar taitai#line 1 package Module::Install::Include; use strict; use Module::Install::Base (); use vars qw{$VERSION @ISA $ISCORE}; BEGIN { $VERSION = '1.06'; @ISA = 'Module::Install::Base'; $ISCORE = 1; } sub include { shift()->admin->include(@_); } sub include_deps { shift()->admin->include_deps(@_); } sub auto_include { shift()->admin->auto_include(@_); } sub auto_include_deps { shift()->admin->auto_include_deps(@_); } sub auto_include_dependent_dists { shift()->admin->auto_include_dependent_dists(@_); } 1; RDF-RDFa-Parser-1.097/inc/Module/Install/Metadata.pm0000644000076400007640000004327711764060650020001 0ustar taitai#line 1 package Module::Install::Metadata; use strict 'vars'; use Module::Install::Base (); use vars qw{$VERSION @ISA $ISCORE}; BEGIN { $VERSION = '1.06'; @ISA = 'Module::Install::Base'; $ISCORE = 1; } my @boolean_keys = qw{ sign }; my @scalar_keys = qw{ name module_name abstract version distribution_type tests installdirs }; my @tuple_keys = qw{ configure_requires build_requires requires recommends bundles resources }; my @resource_keys = qw{ homepage bugtracker repository }; my @array_keys = qw{ keywords author }; *authors = \&author; sub Meta { shift } sub Meta_BooleanKeys { @boolean_keys } sub Meta_ScalarKeys { @scalar_keys } sub Meta_TupleKeys { @tuple_keys } sub Meta_ResourceKeys { @resource_keys } sub Meta_ArrayKeys { @array_keys } foreach my $key ( @boolean_keys ) { *$key = sub { my $self = shift; if ( defined wantarray and not @_ ) { return $self->{values}->{$key}; } $self->{values}->{$key} = ( @_ ? $_[0] : 1 ); return $self; }; } foreach my $key ( @scalar_keys ) { *$key = sub { my $self = shift; return $self->{values}->{$key} if defined wantarray and !@_; $self->{values}->{$key} = shift; return $self; }; } foreach my $key ( @array_keys ) { *$key = sub { my $self = shift; return $self->{values}->{$key} if defined wantarray and !@_; $self->{values}->{$key} ||= []; push @{$self->{values}->{$key}}, @_; return $self; }; } foreach my $key ( @resource_keys ) { *$key = sub { my $self = shift; unless ( @_ ) { return () unless $self->{values}->{resources}; return map { $_->[1] } grep { $_->[0] eq $key } @{ $self->{values}->{resources} }; } return $self->{values}->{resources}->{$key} unless @_; my $uri = shift or die( "Did not provide a value to $key()" ); $self->resources( $key => $uri ); return 1; }; } foreach my $key ( grep { $_ ne "resources" } @tuple_keys) { *$key = sub { my $self = shift; return $self->{values}->{$key} unless @_; my @added; while ( @_ ) { my $module = shift or last; my $version = shift || 0; push @added, [ $module, $version ]; } push @{ $self->{values}->{$key} }, @added; return map {@$_} @added; }; } # Resource handling my %lc_resource = map { $_ => 1 } qw{ homepage license bugtracker repository }; sub resources { my $self = shift; while ( @_ ) { my $name = shift or last; my $value = shift or next; if ( $name eq lc $name and ! $lc_resource{$name} ) { die("Unsupported reserved lowercase resource '$name'"); } $self->{values}->{resources} ||= []; push @{ $self->{values}->{resources} }, [ $name, $value ]; } $self->{values}->{resources}; } # Aliases for build_requires that will have alternative # meanings in some future version of META.yml. sub test_requires { shift->build_requires(@_) } sub install_requires { shift->build_requires(@_) } # Aliases for installdirs options sub install_as_core { $_[0]->installdirs('perl') } sub install_as_cpan { $_[0]->installdirs('site') } sub install_as_site { $_[0]->installdirs('site') } sub install_as_vendor { $_[0]->installdirs('vendor') } sub dynamic_config { my $self = shift; my $value = @_ ? shift : 1; if ( $self->{values}->{dynamic_config} ) { # Once dynamic we never change to static, for safety return 0; } $self->{values}->{dynamic_config} = $value ? 1 : 0; return 1; } # Convenience command sub static_config { shift->dynamic_config(0); } sub perl_version { my $self = shift; return $self->{values}->{perl_version} unless @_; my $version = shift or die( "Did not provide a value to perl_version()" ); # Normalize the version $version = $self->_perl_version($version); # We don't support the really old versions unless ( $version >= 5.005 ) { die "Module::Install only supports 5.005 or newer (use ExtUtils::MakeMaker)\n"; } $self->{values}->{perl_version} = $version; } sub all_from { my ( $self, $file ) = @_; unless ( defined($file) ) { my $name = $self->name or die( "all_from called with no args without setting name() first" ); $file = join('/', 'lib', split(/-/, $name)) . '.pm'; $file =~ s{.*/}{} unless -e $file; unless ( -e $file ) { die("all_from cannot find $file from $name"); } } unless ( -f $file ) { die("The path '$file' does not exist, or is not a file"); } $self->{values}{all_from} = $file; # Some methods pull from POD instead of code. # If there is a matching .pod, use that instead my $pod = $file; $pod =~ s/\.pm$/.pod/i; $pod = $file unless -e $pod; # Pull the different values $self->name_from($file) unless $self->name; $self->version_from($file) unless $self->version; $self->perl_version_from($file) unless $self->perl_version; $self->author_from($pod) unless @{$self->author || []}; $self->license_from($pod) unless $self->license; $self->abstract_from($pod) unless $self->abstract; return 1; } sub provides { my $self = shift; my $provides = ( $self->{values}->{provides} ||= {} ); %$provides = (%$provides, @_) if @_; return $provides; } sub auto_provides { my $self = shift; return $self unless $self->is_admin; unless (-e 'MANIFEST') { warn "Cannot deduce auto_provides without a MANIFEST, skipping\n"; return $self; } # Avoid spurious warnings as we are not checking manifest here. local $SIG{__WARN__} = sub {1}; require ExtUtils::Manifest; local *ExtUtils::Manifest::manicheck = sub { return }; require Module::Build; my $build = Module::Build->new( dist_name => $self->name, dist_version => $self->version, license => $self->license, ); $self->provides( %{ $build->find_dist_packages || {} } ); } sub feature { my $self = shift; my $name = shift; my $features = ( $self->{values}->{features} ||= [] ); my $mods; if ( @_ == 1 and ref( $_[0] ) ) { # The user used ->feature like ->features by passing in the second # argument as a reference. Accomodate for that. $mods = $_[0]; } else { $mods = \@_; } my $count = 0; push @$features, ( $name => [ map { ref($_) ? ( ref($_) eq 'HASH' ) ? %$_ : @$_ : $_ } @$mods ] ); return @$features; } sub features { my $self = shift; while ( my ( $name, $mods ) = splice( @_, 0, 2 ) ) { $self->feature( $name, @$mods ); } return $self->{values}->{features} ? @{ $self->{values}->{features} } : (); } sub no_index { my $self = shift; my $type = shift; push @{ $self->{values}->{no_index}->{$type} }, @_ if $type; return $self->{values}->{no_index}; } sub read { my $self = shift; $self->include_deps( 'YAML::Tiny', 0 ); require YAML::Tiny; my $data = YAML::Tiny::LoadFile('META.yml'); # Call methods explicitly in case user has already set some values. while ( my ( $key, $value ) = each %$data ) { next unless $self->can($key); if ( ref $value eq 'HASH' ) { while ( my ( $module, $version ) = each %$value ) { $self->can($key)->($self, $module => $version ); } } else { $self->can($key)->($self, $value); } } return $self; } sub write { my $self = shift; return $self unless $self->is_admin; $self->admin->write_meta; return $self; } sub version_from { require ExtUtils::MM_Unix; my ( $self, $file ) = @_; $self->version( ExtUtils::MM_Unix->parse_version($file) ); # for version integrity check $self->makemaker_args( VERSION_FROM => $file ); } sub abstract_from { require ExtUtils::MM_Unix; my ( $self, $file ) = @_; $self->abstract( bless( { DISTNAME => $self->name }, 'ExtUtils::MM_Unix' )->parse_abstract($file) ); } # Add both distribution and module name sub name_from { my ($self, $file) = @_; if ( Module::Install::_read($file) =~ m/ ^ \s* package \s* ([\w:]+) \s* ; /ixms ) { my ($name, $module_name) = ($1, $1); $name =~ s{::}{-}g; $self->name($name); unless ( $self->module_name ) { $self->module_name($module_name); } } else { die("Cannot determine name from $file\n"); } } sub _extract_perl_version { if ( $_[0] =~ m/ ^\s* (?:use|require) \s* v? ([\d_\.]+) \s* ; /ixms ) { my $perl_version = $1; $perl_version =~ s{_}{}g; return $perl_version; } else { return; } } sub perl_version_from { my $self = shift; my $perl_version=_extract_perl_version(Module::Install::_read($_[0])); if ($perl_version) { $self->perl_version($perl_version); } else { warn "Cannot determine perl version info from $_[0]\n"; return; } } sub author_from { my $self = shift; my $content = Module::Install::_read($_[0]); if ($content =~ m/ =head \d \s+ (?:authors?)\b \s* ([^\n]*) | =head \d \s+ (?:licen[cs]e|licensing|copyright|legal)\b \s* .*? copyright .*? \d\d\d[\d.]+ \s* (?:\bby\b)? \s* ([^\n]*) /ixms) { my $author = $1 || $2; # XXX: ugly but should work anyway... if (eval "require Pod::Escapes; 1") { # Pod::Escapes has a mapping table. # It's in core of perl >= 5.9.3, and should be installed # as one of the Pod::Simple's prereqs, which is a prereq # of Pod::Text 3.x (see also below). $author =~ s{ E<( (\d+) | ([A-Za-z]+) )> } { defined $2 ? chr($2) : defined $Pod::Escapes::Name2character_number{$1} ? chr($Pod::Escapes::Name2character_number{$1}) : do { warn "Unknown escape: E<$1>"; "E<$1>"; }; }gex; } elsif (eval "require Pod::Text; 1" && $Pod::Text::VERSION < 3) { # Pod::Text < 3.0 has yet another mapping table, # though the table name of 2.x and 1.x are different. # (1.x is in core of Perl < 5.6, 2.x is in core of # Perl < 5.9.3) my $mapping = ($Pod::Text::VERSION < 2) ? \%Pod::Text::HTML_Escapes : \%Pod::Text::ESCAPES; $author =~ s{ E<( (\d+) | ([A-Za-z]+) )> } { defined $2 ? chr($2) : defined $mapping->{$1} ? $mapping->{$1} : do { warn "Unknown escape: E<$1>"; "E<$1>"; }; }gex; } else { $author =~ s{E}{<}g; $author =~ s{E}{>}g; } $self->author($author); } else { warn "Cannot determine author info from $_[0]\n"; } } #Stolen from M::B my %license_urls = ( perl => 'http://dev.perl.org/licenses/', apache => 'http://apache.org/licenses/LICENSE-2.0', apache_1_1 => 'http://apache.org/licenses/LICENSE-1.1', artistic => 'http://opensource.org/licenses/artistic-license.php', artistic_2 => 'http://opensource.org/licenses/artistic-license-2.0.php', lgpl => 'http://opensource.org/licenses/lgpl-license.php', lgpl2 => 'http://opensource.org/licenses/lgpl-2.1.php', lgpl3 => 'http://opensource.org/licenses/lgpl-3.0.html', bsd => 'http://opensource.org/licenses/bsd-license.php', gpl => 'http://opensource.org/licenses/gpl-license.php', gpl2 => 'http://opensource.org/licenses/gpl-2.0.php', gpl3 => 'http://opensource.org/licenses/gpl-3.0.html', mit => 'http://opensource.org/licenses/mit-license.php', mozilla => 'http://opensource.org/licenses/mozilla1.1.php', open_source => undef, unrestricted => undef, restrictive => undef, unknown => undef, ); sub license { my $self = shift; return $self->{values}->{license} unless @_; my $license = shift or die( 'Did not provide a value to license()' ); $license = __extract_license($license) || lc $license; $self->{values}->{license} = $license; # Automatically fill in license URLs if ( $license_urls{$license} ) { $self->resources( license => $license_urls{$license} ); } return 1; } sub _extract_license { my $pod = shift; my $matched; return __extract_license( ($matched) = $pod =~ m/ (=head \d \s+ L(?i:ICEN[CS]E|ICENSING)\b.*?) (=head \d.*|=cut.*|)\z /xms ) || __extract_license( ($matched) = $pod =~ m/ (=head \d \s+ (?:C(?i:OPYRIGHTS?)|L(?i:EGAL))\b.*?) (=head \d.*|=cut.*|)\z /xms ); } sub __extract_license { my $license_text = shift or return; my @phrases = ( '(?:under )?the same (?:terms|license) as (?:perl|the perl (?:\d )?programming language)' => 'perl', 1, '(?:under )?the terms of (?:perl|the perl programming language) itself' => 'perl', 1, 'Artistic and GPL' => 'perl', 1, 'GNU general public license' => 'gpl', 1, 'GNU public license' => 'gpl', 1, 'GNU lesser general public license' => 'lgpl', 1, 'GNU lesser public license' => 'lgpl', 1, 'GNU library general public license' => 'lgpl', 1, 'GNU library public license' => 'lgpl', 1, 'GNU Free Documentation license' => 'unrestricted', 1, 'GNU Affero General Public License' => 'open_source', 1, '(?:Free)?BSD license' => 'bsd', 1, 'Artistic license 2\.0' => 'artistic_2', 1, 'Artistic license' => 'artistic', 1, 'Apache (?:Software )?license' => 'apache', 1, 'GPL' => 'gpl', 1, 'LGPL' => 'lgpl', 1, 'BSD' => 'bsd', 1, 'Artistic' => 'artistic', 1, 'MIT' => 'mit', 1, 'Mozilla Public License' => 'mozilla', 1, 'Q Public License' => 'open_source', 1, 'OpenSSL License' => 'unrestricted', 1, 'SSLeay License' => 'unrestricted', 1, 'zlib License' => 'open_source', 1, 'proprietary' => 'proprietary', 0, ); while ( my ($pattern, $license, $osi) = splice(@phrases, 0, 3) ) { $pattern =~ s#\s+#\\s+#gs; if ( $license_text =~ /\b$pattern\b/i ) { return $license; } } return ''; } sub license_from { my $self = shift; if (my $license=_extract_license(Module::Install::_read($_[0]))) { $self->license($license); } else { warn "Cannot determine license info from $_[0]\n"; return 'unknown'; } } sub _extract_bugtracker { my @links = $_[0] =~ m#L<( https?\Q://rt.cpan.org/\E[^>]+| https?\Q://github.com/\E[\w_]+/[\w_]+/issues| https?\Q://code.google.com/p/\E[\w_\-]+/issues/list )>#gx; my %links; @links{@links}=(); @links=keys %links; return @links; } sub bugtracker_from { my $self = shift; my $content = Module::Install::_read($_[0]); my @links = _extract_bugtracker($content); unless ( @links ) { warn "Cannot determine bugtracker info from $_[0]\n"; return 0; } if ( @links > 1 ) { warn "Found more than one bugtracker link in $_[0]\n"; return 0; } # Set the bugtracker bugtracker( $links[0] ); return 1; } sub requires_from { my $self = shift; my $content = Module::Install::_readperl($_[0]); my @requires = $content =~ m/^use\s+([^\W\d]\w*(?:::\w+)*)\s+(v?[\d\.]+)/mg; while ( @requires ) { my $module = shift @requires; my $version = shift @requires; $self->requires( $module => $version ); } } sub test_requires_from { my $self = shift; my $content = Module::Install::_readperl($_[0]); my @requires = $content =~ m/^use\s+([^\W\d]\w*(?:::\w+)*)\s+([\d\.]+)/mg; while ( @requires ) { my $module = shift @requires; my $version = shift @requires; $self->test_requires( $module => $version ); } } # Convert triple-part versions (eg, 5.6.1 or 5.8.9) to # numbers (eg, 5.006001 or 5.008009). # Also, convert double-part versions (eg, 5.8) sub _perl_version { my $v = $_[-1]; $v =~ s/^([1-9])\.([1-9]\d?\d?)$/sprintf("%d.%03d",$1,$2)/e; $v =~ s/^([1-9])\.([1-9]\d?\d?)\.(0|[1-9]\d?\d?)$/sprintf("%d.%03d%03d",$1,$2,$3 || 0)/e; $v =~ s/(\.\d\d\d)000$/$1/; $v =~ s/_.+$//; if ( ref($v) ) { # Numify $v = $v + 0; } return $v; } sub add_metadata { my $self = shift; my %hash = @_; for my $key (keys %hash) { warn "add_metadata: $key is not prefixed with 'x_'.\n" . "Use appopriate function to add non-private metadata.\n" unless $key =~ /^x_/; $self->{values}->{$key} = $hash{$key}; } } ###################################################################### # MYMETA Support sub WriteMyMeta { die "WriteMyMeta has been deprecated"; } sub write_mymeta_yaml { my $self = shift; # We need YAML::Tiny to write the MYMETA.yml file unless ( eval { require YAML::Tiny; 1; } ) { return 1; } # Generate the data my $meta = $self->_write_mymeta_data or return 1; # Save as the MYMETA.yml file print "Writing MYMETA.yml\n"; YAML::Tiny::DumpFile('MYMETA.yml', $meta); } sub write_mymeta_json { my $self = shift; # We need JSON to write the MYMETA.json file unless ( eval { require JSON; 1; } ) { return 1; } # Generate the data my $meta = $self->_write_mymeta_data or return 1; # Save as the MYMETA.yml file print "Writing MYMETA.json\n"; Module::Install::_write( 'MYMETA.json', JSON->new->pretty(1)->canonical->encode($meta), ); } sub _write_mymeta_data { my $self = shift; # If there's no existing META.yml there is nothing we can do return undef unless -f 'META.yml'; # We need Parse::CPAN::Meta to load the file unless ( eval { require Parse::CPAN::Meta; 1; } ) { return undef; } # Merge the perl version into the dependencies my $val = $self->Meta->{values}; my $perl = delete $val->{perl_version}; if ( $perl ) { $val->{requires} ||= []; my $requires = $val->{requires}; # Canonize to three-dot version after Perl 5.6 if ( $perl >= 5.006 ) { $perl =~ s{^(\d+)\.(\d\d\d)(\d*)}{join('.', $1, int($2||0), int($3||0))}e } unshift @$requires, [ perl => $perl ]; } # Load the advisory META.yml file my @yaml = Parse::CPAN::Meta::LoadFile('META.yml'); my $meta = $yaml[0]; # Overwrite the non-configure dependency hashs delete $meta->{requires}; delete $meta->{build_requires}; delete $meta->{recommends}; if ( exists $val->{requires} ) { $meta->{requires} = { map { @$_ } @{ $val->{requires} } }; } if ( exists $val->{build_requires} ) { $meta->{build_requires} = { map { @$_ } @{ $val->{build_requires} } }; } return $meta; } 1; RDF-RDFa-Parser-1.097/inc/Module/Install/AutoManifest.pm0000644000076400007640000000125711764060675020657 0ustar taitai#line 1 use strict; use warnings; package Module::Install::AutoManifest; use Module::Install::Base; BEGIN { our $VERSION = '0.003'; our $ISCORE = 1; our @ISA = qw(Module::Install::Base); } sub auto_manifest { my ($self) = @_; return unless $Module::Install::AUTHOR; die "auto_manifest requested, but no MANIFEST.SKIP exists\n" unless -e "MANIFEST.SKIP"; if (-e "MANIFEST") { unlink('MANIFEST') or die "Can't remove MANIFEST: $!"; } $self->postamble(<<"END"); create_distdir: manifest_clean manifest distclean :: manifest_clean manifest_clean: \t\$(RM_F) MANIFEST END } 1; __END__ #line 48 #line 131 1; # End of Module::Install::AutoManifest RDF-RDFa-Parser-1.097/inc/Module/Install/TrustMetaYml.pm0000644000076400007640000000170111764060650020655 0ustar taitai#line 1 package Module::Install::TrustMetaYml; use 5.008; use constant { FALSE => 0, TRUE => 1 }; use strict; use utf8; BEGIN { $Module::Install::TrustMetaYml::AUTHORITY = 'cpan:TOBYINK'; } BEGIN { $Module::Install::TrustMetaYml::VERSION = '0.001'; } use base qw(Module::Install::Base); sub trust_meta_yml { my ($self, $where) = @_; $where ||= 'META.yml'; $self->perl_version('5.006') unless defined $self->perl_version; $self->include_deps('YAML::Tiny', 0); return $self if $self->is_admin; require YAML::Tiny; my $data = YAML::Tiny::LoadFile($where); $self->perl_version($data->{requires}{perl} || '5.006'); KEY: foreach my $key (qw(requires recommends build_requires)) { next KEY unless ref $data->{$key} eq 'HASH'; my %deps = %{$data->{$key}}; DEP: while (my ($pkg, $ver) = each %deps) { next if $pkg eq 'perl'; $self->$key($pkg, $ver); } } return $self; } *trust_meta_yaml = \&trust_meta_yml; TRUE; __END__ RDF-RDFa-Parser-1.097/inc/Module/Install.pm0000644000076400007640000003013511764060642016247 0ustar taitai#line 1 package Module::Install; # For any maintainers: # The load order for Module::Install is a bit magic. # It goes something like this... # # IF ( host has Module::Install installed, creating author mode ) { # 1. Makefile.PL calls "use inc::Module::Install" # 2. $INC{inc/Module/Install.pm} set to installed version of inc::Module::Install # 3. The installed version of inc::Module::Install loads # 4. inc::Module::Install calls "require Module::Install" # 5. The ./inc/ version of Module::Install loads # } ELSE { # 1. Makefile.PL calls "use inc::Module::Install" # 2. $INC{inc/Module/Install.pm} set to ./inc/ version of Module::Install # 3. The ./inc/ version of Module::Install loads # } use 5.005; use strict 'vars'; use Cwd (); use File::Find (); use File::Path (); use vars qw{$VERSION $MAIN}; BEGIN { # All Module::Install core packages now require synchronised versions. # This will be used to ensure we don't accidentally load old or # different versions of modules. # This is not enforced yet, but will be some time in the next few # releases once we can make sure it won't clash with custom # Module::Install extensions. $VERSION = '1.06'; # Storage for the pseudo-singleton $MAIN = undef; *inc::Module::Install::VERSION = *VERSION; @inc::Module::Install::ISA = __PACKAGE__; } sub import { my $class = shift; my $self = $class->new(@_); my $who = $self->_caller; #------------------------------------------------------------- # all of the following checks should be included in import(), # to allow "eval 'require Module::Install; 1' to test # installation of Module::Install. (RT #51267) #------------------------------------------------------------- # Whether or not inc::Module::Install is actually loaded, the # $INC{inc/Module/Install.pm} is what will still get set as long as # the caller loaded module this in the documented manner. # If not set, the caller may NOT have loaded the bundled version, and thus # they may not have a MI version that works with the Makefile.PL. This would # result in false errors or unexpected behaviour. And we don't want that. my $file = join( '/', 'inc', split /::/, __PACKAGE__ ) . '.pm'; unless ( $INC{$file} ) { die <<"END_DIE" } Please invoke ${\__PACKAGE__} with: use inc::${\__PACKAGE__}; not: use ${\__PACKAGE__}; END_DIE # This reportedly fixes a rare Win32 UTC file time issue, but # as this is a non-cross-platform XS module not in the core, # we shouldn't really depend on it. See RT #24194 for detail. # (Also, this module only supports Perl 5.6 and above). eval "use Win32::UTCFileTime" if $^O eq 'MSWin32' && $] >= 5.006; # If the script that is loading Module::Install is from the future, # then make will detect this and cause it to re-run over and over # again. This is bad. Rather than taking action to touch it (which # is unreliable on some platforms and requires write permissions) # for now we should catch this and refuse to run. if ( -f $0 ) { my $s = (stat($0))[9]; # If the modification time is only slightly in the future, # sleep briefly to remove the problem. my $a = $s - time; if ( $a > 0 and $a < 5 ) { sleep 5 } # Too far in the future, throw an error. my $t = time; if ( $s > $t ) { die <<"END_DIE" } Your installer $0 has a modification time in the future ($s > $t). This is known to create infinite loops in make. Please correct this, then run $0 again. END_DIE } # Build.PL was formerly supported, but no longer is due to excessive # difficulty in implementing every single feature twice. if ( $0 =~ /Build.PL$/i ) { die <<"END_DIE" } Module::Install no longer supports Build.PL. It was impossible to maintain duel backends, and has been deprecated. Please remove all Build.PL files and only use the Makefile.PL installer. END_DIE #------------------------------------------------------------- # To save some more typing in Module::Install installers, every... # use inc::Module::Install # ...also acts as an implicit use strict. $^H |= strict::bits(qw(refs subs vars)); #------------------------------------------------------------- unless ( -f $self->{file} ) { foreach my $key (keys %INC) { delete $INC{$key} if $key =~ /Module\/Install/; } local $^W; require "$self->{path}/$self->{dispatch}.pm"; File::Path::mkpath("$self->{prefix}/$self->{author}"); $self->{admin} = "$self->{name}::$self->{dispatch}"->new( _top => $self ); $self->{admin}->init; @_ = ($class, _self => $self); goto &{"$self->{name}::import"}; } local $^W; *{"${who}::AUTOLOAD"} = $self->autoload; $self->preload; # Unregister loader and worker packages so subdirs can use them again delete $INC{'inc/Module/Install.pm'}; delete $INC{'Module/Install.pm'}; # Save to the singleton $MAIN = $self; return 1; } sub autoload { my $self = shift; my $who = $self->_caller; my $cwd = Cwd::cwd(); my $sym = "${who}::AUTOLOAD"; $sym->{$cwd} = sub { my $pwd = Cwd::cwd(); if ( my $code = $sym->{$pwd} ) { # Delegate back to parent dirs goto &$code unless $cwd eq $pwd; } unless ($$sym =~ s/([^:]+)$//) { # XXX: it looks like we can't retrieve the missing function # via $$sym (usually $main::AUTOLOAD) in this case. # I'm still wondering if we should slurp Makefile.PL to # get some context or not ... my ($package, $file, $line) = caller; die <<"EOT"; Unknown function is found at $file line $line. Execution of $file aborted due to runtime errors. If you're a contributor to a project, you may need to install some Module::Install extensions from CPAN (or other repository). If you're a user of a module, please contact the author. EOT } my $method = $1; if ( uc($method) eq $method ) { # Do nothing return; } elsif ( $method =~ /^_/ and $self->can($method) ) { # Dispatch to the root M:I class return $self->$method(@_); } # Dispatch to the appropriate plugin unshift @_, ( $self, $1 ); goto &{$self->can('call')}; }; } sub preload { my $self = shift; unless ( $self->{extensions} ) { $self->load_extensions( "$self->{prefix}/$self->{path}", $self ); } my @exts = @{$self->{extensions}}; unless ( @exts ) { @exts = $self->{admin}->load_all_extensions; } my %seen; foreach my $obj ( @exts ) { while (my ($method, $glob) = each %{ref($obj) . '::'}) { next unless $obj->can($method); next if $method =~ /^_/; next if $method eq uc($method); $seen{$method}++; } } my $who = $self->_caller; foreach my $name ( sort keys %seen ) { local $^W; *{"${who}::$name"} = sub { ${"${who}::AUTOLOAD"} = "${who}::$name"; goto &{"${who}::AUTOLOAD"}; }; } } sub new { my ($class, %args) = @_; delete $INC{'FindBin.pm'}; { # to suppress the redefine warning local $SIG{__WARN__} = sub {}; require FindBin; } # ignore the prefix on extension modules built from top level. my $base_path = Cwd::abs_path($FindBin::Bin); unless ( Cwd::abs_path(Cwd::cwd()) eq $base_path ) { delete $args{prefix}; } return $args{_self} if $args{_self}; $args{dispatch} ||= 'Admin'; $args{prefix} ||= 'inc'; $args{author} ||= ($^O eq 'VMS' ? '_author' : '.author'); $args{bundle} ||= 'inc/BUNDLES'; $args{base} ||= $base_path; $class =~ s/^\Q$args{prefix}\E:://; $args{name} ||= $class; $args{version} ||= $class->VERSION; unless ( $args{path} ) { $args{path} = $args{name}; $args{path} =~ s!::!/!g; } $args{file} ||= "$args{base}/$args{prefix}/$args{path}.pm"; $args{wrote} = 0; bless( \%args, $class ); } sub call { my ($self, $method) = @_; my $obj = $self->load($method) or return; splice(@_, 0, 2, $obj); goto &{$obj->can($method)}; } sub load { my ($self, $method) = @_; $self->load_extensions( "$self->{prefix}/$self->{path}", $self ) unless $self->{extensions}; foreach my $obj (@{$self->{extensions}}) { return $obj if $obj->can($method); } my $admin = $self->{admin} or die <<"END_DIE"; The '$method' method does not exist in the '$self->{prefix}' path! Please remove the '$self->{prefix}' directory and run $0 again to load it. END_DIE my $obj = $admin->load($method, 1); push @{$self->{extensions}}, $obj; $obj; } sub load_extensions { my ($self, $path, $top) = @_; my $should_reload = 0; unless ( grep { ! ref $_ and lc $_ eq lc $self->{prefix} } @INC ) { unshift @INC, $self->{prefix}; $should_reload = 1; } foreach my $rv ( $self->find_extensions($path) ) { my ($file, $pkg) = @{$rv}; next if $self->{pathnames}{$pkg}; local $@; my $new = eval { local $^W; require $file; $pkg->can('new') }; unless ( $new ) { warn $@ if $@; next; } $self->{pathnames}{$pkg} = $should_reload ? delete $INC{$file} : $INC{$file}; push @{$self->{extensions}}, &{$new}($pkg, _top => $top ); } $self->{extensions} ||= []; } sub find_extensions { my ($self, $path) = @_; my @found; File::Find::find( sub { my $file = $File::Find::name; return unless $file =~ m!^\Q$path\E/(.+)\.pm\Z!is; my $subpath = $1; return if lc($subpath) eq lc($self->{dispatch}); $file = "$self->{path}/$subpath.pm"; my $pkg = "$self->{name}::$subpath"; $pkg =~ s!/!::!g; # If we have a mixed-case package name, assume case has been preserved # correctly. Otherwise, root through the file to locate the case-preserved # version of the package name. if ( $subpath eq lc($subpath) || $subpath eq uc($subpath) ) { my $content = Module::Install::_read($subpath . '.pm'); my $in_pod = 0; foreach ( split //, $content ) { $in_pod = 1 if /^=\w/; $in_pod = 0 if /^=cut/; next if ($in_pod || /^=cut/); # skip pod text next if /^\s*#/; # and comments if ( m/^\s*package\s+($pkg)\s*;/i ) { $pkg = $1; last; } } } push @found, [ $file, $pkg ]; }, $path ) if -d $path; @found; } ##################################################################### # Common Utility Functions sub _caller { my $depth = 0; my $call = caller($depth); while ( $call eq __PACKAGE__ ) { $depth++; $call = caller($depth); } return $call; } # Done in evals to avoid confusing Perl::MinimumVersion eval( $] >= 5.006 ? <<'END_NEW' : <<'END_OLD' ); die $@ if $@; sub _read { local *FH; open( FH, '<', $_[0] ) or die "open($_[0]): $!"; my $string = do { local $/; }; close FH or die "close($_[0]): $!"; return $string; } END_NEW sub _read { local *FH; open( FH, "< $_[0]" ) or die "open($_[0]): $!"; my $string = do { local $/; }; close FH or die "close($_[0]): $!"; return $string; } END_OLD sub _readperl { my $string = Module::Install::_read($_[0]); $string =~ s/(?:\015{1,2}\012|\015|\012)/\n/sg; $string =~ s/(\n)\n*__(?:DATA|END)__\b.*\z/$1/s; $string =~ s/\n\n=\w+.+?\n\n=cut\b.+?\n+/\n\n/sg; return $string; } sub _readpod { my $string = Module::Install::_read($_[0]); $string =~ s/(?:\015{1,2}\012|\015|\012)/\n/sg; return $string if $_[0] =~ /\.pod\z/; $string =~ s/(^|\n=cut\b.+?\n+)[^=\s].+?\n(\n=\w+|\z)/$1$2/sg; $string =~ s/\n*=pod\b[^\n]*\n+/\n\n/sg; $string =~ s/\n*=cut\b[^\n]*\n+/\n\n/sg; $string =~ s/^\n+//s; return $string; } # Done in evals to avoid confusing Perl::MinimumVersion eval( $] >= 5.006 ? <<'END_NEW' : <<'END_OLD' ); die $@ if $@; sub _write { local *FH; open( FH, '>', $_[0] ) or die "open($_[0]): $!"; foreach ( 1 .. $#_ ) { print FH $_[$_] or die "print($_[0]): $!"; } close FH or die "close($_[0]): $!"; } END_NEW sub _write { local *FH; open( FH, "> $_[0]" ) or die "open($_[0]): $!"; foreach ( 1 .. $#_ ) { print FH $_[$_] or die "print($_[0]): $!"; } close FH or die "close($_[0]): $!"; } END_OLD # _version is for processing module versions (eg, 1.03_05) not # Perl versions (eg, 5.8.1). sub _version ($) { my $s = shift || 0; my $d =()= $s =~ /(\.)/g; if ( $d >= 2 ) { # Normalise multipart versions $s =~ s/(\.)(\d{1,3})/sprintf("$1%03d",$2)/eg; } $s =~ s/^(\d+)\.?//; my $l = $1 || 0; my @v = map { $_ . '0' x (3 - length $_) } $s =~ /(\d{1,3})\D?/g; $l = $l . '.' . join '', @v if @v; return $l + 0; } sub _cmp ($$) { _version($_[1]) <=> _version($_[2]); } # Cloned from Params::Util::_CLASS sub _CLASS ($) { ( defined $_[0] and ! ref $_[0] and $_[0] =~ m/^[^\W\d]\w*(?:::\w+)*\z/s ) ? $_[0] : undef; } 1; # Copyright 2008 - 2012 Adam Kennedy. RDF-RDFa-Parser-1.097/inc/Module/Package/0000755000076400007640000000000011764061700015630 5ustar taitaiRDF-RDFa-Parser-1.097/inc/Module/Package/Dist/0000755000076400007640000000000011764061700016533 5ustar taitaiRDF-RDFa-Parser-1.097/inc/Module/Package/Dist/RDF.pm0000644000076400007640000000100611764060662017507 0ustar taitai#line 1 package Module::Package::Dist::RDF; use 5.008003; BEGIN { $Module::Package::Dist::RDF::AUTHORITY = 'cpan:TOBYINK'; $Module::Package::Dist::RDF::VERSION = '0.005'; } package Module::Package::Dist::RDF::standard; use 5.008003; use strict; use base qw[Module::Package::Dist]; BEGIN { $Module::Package::Dist::RDF::standard::AUTHORITY = 'cpan:TOBYINK'; $Module::Package::Dist::RDF::standard::VERSION = '0.005'; } sub _main { my ($self) = @_; $self->mi->trust_meta_yml; $self->mi->auto_install; } 1; RDF-RDFa-Parser-1.097/t/0000755000076400007640000000000011764061700012542 5ustar taitaiRDF-RDFa-Parser-1.097/t/06xmlbase.t0000644000076400007640000001607011663406033014534 0ustar taitai# Tests that base URLs are working OK. use Test::More tests => 14; BEGIN { use_ok('RDF::RDFa::Parser') }; my ($parser, $model); my $xhtml = <
EOF my $config = RDF::RDFa::Parser::Config->new('xhtml', '1.0'); $parser = RDF::RDFa::Parser->new($xhtml, 'http://example.com/perl', $config); $parser->consume; $model = $parser->graph; ok($model->count_statements( RDF::Trine::Node::Resource->new('http://example.com/html#about'), RDF::Trine::Node::Resource->new('http://example.com/ns#test'), RDF::Trine::Node::Resource->new('http://example.com/html#resource'), ), "Default behaviour respects BASE element - about and resource."); ok($model->count_statements( RDF::Trine::Node::Resource->new('http://example.com/html#src'), RDF::Trine::Node::Resource->new('http://example.com/ns#test'), RDF::Trine::Node::Resource->new('http://example.com/html#href'), ), "Default behaviour respects BASE element - src and href."); $config = RDF::RDFa::Parser::Config->new('xhtml', '1.0', xhtml_base=>0); $parser = RDF::RDFa::Parser->new($xhtml, 'http://example.com/perl', $config); $parser->consume; $model = $parser->graph; ok($model->count_statements( RDF::Trine::Node::Resource->new('http://example.com/perl#about'), RDF::Trine::Node::Resource->new('http://example.com/ns#test'), RDF::Trine::Node::Resource->new('http://example.com/perl#resource'), ), "Can switch off BASE element - about and resource."); ok($model->count_statements( RDF::Trine::Node::Resource->new('http://example.com/perl#src'), RDF::Trine::Node::Resource->new('http://example.com/ns#test'), RDF::Trine::Node::Resource->new('http://example.com/perl#href'), ), "Can switch off BASE element - src and href."); $config = RDF::RDFa::Parser::Config->new('xhtml', '1.0', xml_base=>1); $parser = RDF::RDFa::Parser->new($xhtml, 'http://example.com/perl', $config); $parser->consume; $model = $parser->graph; ok($model->count_statements( RDF::Trine::Node::Resource->new('http://example.com/xml#about'), RDF::Trine::Node::Resource->new('http://example.com/ns#test'), RDF::Trine::Node::Resource->new('http://example.com/xml#resource'), ), "Can switch on xml:base attribute selectively - about and resource."); ok($model->count_statements( RDF::Trine::Node::Resource->new('http://example.com/html#src'), RDF::Trine::Node::Resource->new('http://example.com/ns#test'), RDF::Trine::Node::Resource->new('http://example.com/html#href'), ), "Can switch on xml:base attribute selectively - src and href don't use it."); $config = RDF::RDFa::Parser::Config->new('xhtml', '1.0', xml_base=>2); $parser = RDF::RDFa::Parser->new($xhtml, 'http://example.com/perl', $config); $parser->consume; $model = $parser->graph; ok($model->count_statements( RDF::Trine::Node::Resource->new('http://example.com/xml#about'), RDF::Trine::Node::Resource->new('http://example.com/ns#test'), RDF::Trine::Node::Resource->new('http://example.com/xml#resource'), ), "Can switch on xml:base attribute completely - about and resource."); ok($model->count_statements( RDF::Trine::Node::Resource->new('http://example.com/xml#src'), RDF::Trine::Node::Resource->new('http://example.com/ns#test'), RDF::Trine::Node::Resource->new('http://example.com/xml#href'), ), "Can switch on xml:base attribute completely - src and href."); $config = RDF::RDFa::Parser::Config->new('xhtml', '1.0', xml_base=>1,xhtml_base=>0); $parser = RDF::RDFa::Parser->new($xhtml, 'http://example.com/perl', $config); $parser->consume; $model = $parser->graph; ok($model->count_statements( RDF::Trine::Node::Resource->new('http://example.com/xml#about'), RDF::Trine::Node::Resource->new('http://example.com/ns#test'), RDF::Trine::Node::Resource->new('http://example.com/xml#resource'), ), "Can switch on xml:base attribute and switch off BASE element at the same time - about and resource."); ok($model->count_statements( RDF::Trine::Node::Resource->new('http://example.com/perl#src'), RDF::Trine::Node::Resource->new('http://example.com/ns#test'), RDF::Trine::Node::Resource->new('http://example.com/perl#href'), ), "Can switch on xml:base attribute and switch off BASE element at the same time - src and href."); $xhtml = < EOF $config = RDF::RDFa::Parser::Config->new('xhtml', '1.0', xml_base=>0,embedded_rdfxml=>1); $parser = RDF::RDFa::Parser->new($xhtml, 'http://example.com/perl', $config); $parser->consume; $model = $parser->graph; ok($model->count_statements( RDF::Trine::Node::Resource->new('http://example.com/xml#rdfabout'), RDF::Trine::Node::Resource->new('http://example.com/ns#foo'), RDF::Trine::Node::Resource->new('http://example.com/xml#rdfresource'), ), "RDF/XML respects xml:base always."); $xhtml = < EOF $config = RDF::RDFa::Parser::Config->new('xhtml', '1.0', xml_base=>0,xhtml_base=>2,embedded_rdfxml=>1); $parser = RDF::RDFa::Parser->new($xhtml, 'http://example.com/perl', $config); $parser->consume; $model = $parser->graph; ok($model->count_statements( RDF::Trine::Node::Resource->new('http://example.com/html#rdfabout'), RDF::Trine::Node::Resource->new('http://example.com/ns#foo'), RDF::Trine::Node::Resource->new('http://example.com/html#rdfresource'), ), "RDF/XML respects BASE element if you're crazy."); $xhtml = <
EOF $config = RDF::RDFa::Parser::Config->new('xhtml', '1.0', xml_base=>1); $parser = RDF::RDFa::Parser->new($xhtml, 'http://example.com/perl', {xml_base=>1}); $parser->consume; $model = $parser->graph; ok($model->count_statements( RDF::Trine::Node::Resource->new('http://example.com/xml#about'), RDF::Trine::Node::Resource->new('http://example.com/ns#test'), RDF::Trine::Node::Resource->new('http://example.com/xml#resource'), ), "Nesting xml:base works.");RDF-RDFa-Parser-1.097/t/05namedgraphs.t0000644000076400007640000000462011663406033015367 0ustar taitaiuse Test::More tests => 7; BEGIN { use_ok('RDF::RDFa::Parser') }; use RDF::RDFa::Parser; my $xhtml = < This is the title

Albert Einstein

Joe Bloggs
EOF $parser = RDF::RDFa::Parser->new($xhtml, 'http://example.com/einstein', { graph => 1, graph_attr => '{http://example.com/graphing}graph', graph_type => 'about', }); $parser->consume; ok($parser->graph('http://example.com/einstein#JOE')->count_statements( RDF::Trine::Node::Resource->new('http://example.com/einstein#maker'), RDF::Trine::Node::Resource->new('http://xmlns.com/foaf/0.1/name'), RDF::Trine::Node::Literal->new('Joe Bloggs', 'en') ), "The graph(uri) method returns the appropriate graph"); ok(!$parser->graph('_:RDFaDefaultGraph')->count_statements( RDF::Trine::Node::Resource->new('http://example.com/einstein#maker'), RDF::Trine::Node::Resource->new('http://xmlns.com/foaf/0.1/name'), RDF::Trine::Node::Literal->new('Joe Bloggs', 'en') ), "Statement in a non-default graph isn't duplicated in the default graph."); ok($parser->graphs->{'http://example.com/einstein#JOE'}->count_statements( RDF::Trine::Node::Resource->new('http://example.com/einstein#maker'), RDF::Trine::Node::Resource->new('http://xmlns.com/foaf/0.1/name'), RDF::Trine::Node::Literal->new('Joe Bloggs', 'en') ), "The graphs() method returns a hashref of graphs"); my $iter = $parser->graph->get_statements( RDF::Trine::Node::Resource->new('http://example.com/einstein#maker'), RDF::Trine::Node::Resource->new('http://xmlns.com/foaf/0.1/name'), RDF::Trine::Node::Literal->new('Joe Bloggs', 'en'), RDF::Trine::Node::Resource->new('http://example.com/einstein#JOE')); my $st = $iter->next; isa_ok($st, 'RDF::Trine::Statement::Quad'); isa_ok($st->context, 'RDF::Trine::Node::Resource'); ok($st->context->uri eq 'http://example.com/einstein#JOE', "Graph URI looks OK."); RDF-RDFa-Parser-1.097/t/01basic.t0000644000076400007640000000406211663406033014153 0ustar taitai# Test the very basics. use Test::More tests => 6; BEGIN { use_ok('RDF::RDFa::Parser') }; use RDF::Trine; my $xhtml = < This is the title

Albert Einstein

Joe Bloggs
EOF $parser = RDF::RDFa::Parser->new($xhtml, 'http://example.com/einstein'); $parser->set_callbacks({pretriple_literal => sub{ if ($_[2] eq 'http://example.com/einstein#maker' && $_[3] eq 'http://xmlns.com/foaf/0.1/name') { ok($_[4] eq 'Joe Bloggs', 'Callbacks working OK.'); } return 0; }, ontoken => sub{ if ($_[2] eq 'foam:topic') { return 'http://xmlns.com/foaf/0.1/topic'; } return $_[3]; }}); ok(lc($parser->dom->documentElement->tagName) eq 'html', 'DOM Tree returned OK.'); $parser->consume; my $model = $parser->graph; ok($model->count_statements( RDF::Trine::Node::Resource->new('http://example.com/einstein'), RDF::Trine::Node::Resource->new('http://purl.org/dc/elements/1.1/creator'), RDF::Trine::Node::Resource->new('http://example.com/einstein#maker') ), 'RDFa graph looks OK (tested a resource).'); ok($model->count_statements( RDF::Trine::Node::Resource->new('http://example.com/einstein#topic'), RDF::Trine::Node::Resource->new('http://xmlns.com/foaf/0.1/name'), RDF::Trine::Node::Literal->new('Albert Einstein', 'de') ), 'RDFa graph looks OK (tested a literal).'); ok($model->count_statements( RDF::Trine::Node::Resource->new('http://example.com/einstein'), RDF::Trine::Node::Resource->new('http://xmlns.com/foaf/0.1/topic'), RDF::Trine::Node::Resource->new('http://example.com/einstein#topic') ), 'oncurie CURIE rewriting worked.'); RDF-RDFa-Parser-1.097/t/10trine.t0000644000076400007640000000165211757253344014226 0ustar taitaiuse Test::More tests => 6; use RDF::Trine qw(iri literal); use RDF::TrineX::Parser::RDFa; use Data::Dumper; my $parser = new_ok 'RDF::Trine::Parser' => ['xhtmlrdfa11']; isa_ok $parser => 'RDF::Trine::Parser'; isa_ok $parser => 'RDF::TrineX::Parser::RDFa'; isa_ok $parser => 'RDF::TrineX::Parser::XHTML_RDFa11'; can_ok $parser => qw( parse_url_into_model parse_into_model parse parse_file_into_model parse_file ); my $model = RDF::Trine::Model->new; $parser->parse_file_into_model( 'http://www.example.com/', \*DATA => $model, context => iri('http://www.example.com/graph'), ); ok( $model->count_statements( iri('http://www.example.com/'), iri('http://purl.org/dc/terms/title'), literal('Hello', 'en'), iri('http://www.example.com/graph'), ) ); __DATA__ Hello

Hello World

RDF-RDFa-Parser-1.097/t/09opendocument.odt0000644000076400007640000002137111755143017016131 0ustar taitaiPK l;<^2 ''mimetypeUT nLrOux application/vnd.oasis.opendocument.textPK l;<Configurations2/statusbar/UT nLrOux PK l;<'Configurations2/accelerator/current.xmlUT nLrOux PK l;<Configurations2/floater/UT nLrOux PK l;<Configurations2/popupmenu/UT nLrOux PK l;<Configurations2/progressbar/UT nLrOux PK l;<Configurations2/menubar/UT nLrOux PK l;<Configurations2/toolbar/UT nLrOux PK l;<Configurations2/images/Bitmaps/UT nLrOux PKQ@N9 content.xmlUT OOux WMs0Wxܙތ3 δMv&9%*dÕd +Ġ@{OnT<.ÀJR&}t&3e8UTڈ(i;4q: -c 3ĂؒXT6+_[M]Kv/=W.;ոty^jfQ8W⭠nѵ+Ӷ] alAӿȊ IcGF$ 4Wڶ%dkzI3ܺU"G|u- w2k+Qޔu+rnr#b2 lRqJJnn*;Xt UCj m ,8'\j c\8g{n6}y=Se`8jyM"')i|1 ^/>Rj|CǠB) 9cW&Pe'2ukrL\~}0g~UZv-L0^));nhDrPKl;gRrŲ^{|yD@`_9Ќ(?z[D:f 6ЋGDZ Ԍs+]ǖ!tj!- ۚEop[i1_LO;6=w;b 0,Sj1_xž}=wa8Ζ(MԿާtUmVeE )Y ^}4+8ΰOF VngX XhGs 7 [~l /C3/#W jCxY\C7nNQ5{{:gNV*r[qRr'Ϩ?{3zS9]Ͽ;>w[J^WT*(Èkj7ܶ;]R˭_++d^l>}{T_SE]77(Iow_Toʻ_cKr?p}v&ҭ޽)9w,g-?֋/)llb';$W3h*OX::&PKl;^"T>CZtI;}aKIh &*8?IL p,\:ⴰrKEˏ!Gq=컽DPG<2 u40Ll,H+Pj]aKK`Ɍm b%CP~i{IcfvuUƟਯIj]槯%*hr -JsiZҧ(P LR2A9Oý;}i5< ք2چUѣ)c#Sdc-%*t:'Ɗݒm7"xg4 Lb?ݑ*xP栬G\jٻÃd4$!Ԟ5!nsJHr+Հ&#O@GH!5 6xr>p xcS!VX&-cЀbM QќD/G/:%K7 8s:hm0~?4'L;fSV.3mhaFr3yb2cM;Vr)V ~_-| ̖h=)}*iCEӱL&uwKsLn49m?A!Mn>wOPKl;ɘ:HڷL0P )ozH.;R` O}*8<'7^RF*~nz 7Pj2`Qǃm'T Jzbt2c-l] 12; BEGIN { use_ok('RDF::RDFa::Parser') }; my $xhtml_rdfa_10 = RDF::RDFa::Parser::Config->new('xhtml','1.0'); my ($parser, $model); my $xhtml = <
EOF $parser = RDF::RDFa::Parser->new($xhtml, 'http://example.com/', $xhtml_rdfa_10); $parser->consume; $model = $parser->graph; #my $iter = $model->as_stream; #while (my $st = $iter->next) #{ # diag $st->as_string; #} ok($model->count_statements( RDF::Trine::Node::Resource->new('http://example.com/ns#r1/foo'), undef, undef, ), "Supports non-QName characters in SafeCURIEs."); ok($model->count_statements( undef, RDF::Trine::Node::Resource->new('http://example.com/ns#r2/foo'), undef, ), "Supports non-QName characters in CURIEs."); ok($model->count_statements( RDF::Trine::Node::Resource->new('http://example.com/ns#r3'), RDF::Trine::Node::Resource->new('http://www.w3.org/1999/xhtml/vocab#TEST'), undef, ), "Default prefix works."); ok(!$model->count_statements( RDF::Trine::Node::Resource->new('http://example.com/ns#r4'), RDF::Trine::Node::Resource->new('http://example.com/ns#r4'), RDF::Trine::Node::Resource->new('http://example.com/ns#r4'), ), "Safe CURIEs don't work in \@href."); ok($model->count_statements( RDF::Trine::Node::Resource->new('http://example.com/ns#r5'), RDF::Trine::Node::Resource->new('http://example.com/ns#r5'), RDF::Trine::Node::Resource->new('http://example.com/ns#r5'), ), "Safe CURIEs work in \@resource."); ok(!$model->count_statements( RDF::Trine::Node::Resource->new('http://example.com/ns#r6'), undef, RDF::Trine::Node::Resource->new('http://example.com/ns#r6'), ), "Nonsense keywords ignored."); ok($model->count_statements( RDF::Trine::Node::Resource->new('http://example.net/1'), undef, undef, ), "http-URI recognised."); ok($model->count_statements( RDF::Trine::Node::Resource->new('http://example.com/http#//example.net/2'), undef, undef, ), "http-URI-looking CURIE recognised."); $xhtml = <
EOF $parser = RDF::RDFa::Parser->new($xhtml, 'http://example.com/', $xhtml_rdfa_10); $parser->consume; $model = $parser->graph; ok(1==$model->count_statements( RDF::Trine::Node::Resource->new('http://example.com/ns#r1'), undef, RDF::Trine::Node::Resource->new('http://example.com/ns#r1'), ), "Undefined CURIE ignored."); $parser = RDF::RDFa::Parser->new($xhtml, 'http://example.com/', {'full_uris'=>1}); $parser->consume; $model = $parser->graph; ok($model->count_statements( RDF::Trine::Node::Resource->new('http://example.com/ns#r1'), RDF::Trine::Node::Resource->new('http://example.com/http#//example.com/'), RDF::Trine::Node::Resource->new('http://example.com/ns#r1'), ), "http-URI-looking CURIE recognised, even if full URIs enabled."); ok($model->count_statements( RDF::Trine::Node::Resource->new('http://example.com/ns#r1'), RDF::Trine::Node::Resource->new('https://example.com/'), RDF::Trine::Node::Resource->new('http://example.com/ns#r1'), ), "Full URI recognised."); RDF-RDFa-Parser-1.097/t/07rdfxml.t0000644000076400007640000000547211663406033014402 0ustar taitai# Tests that lang tags work properly use Test::More tests => 10; BEGIN { use_ok('RDF::RDFa::Parser') }; my $xhtml = <
Foo EOF my $parser = RDF::RDFa::Parser->new( $xhtml, 'http://example.com/', RDF::RDFa::Parser::Config->new(xhtml => '1.0', embedded_rdfxml=>1), ); $parser->consume; my $model; ok($model = $parser->graph, "Graph retrieved"); ok(!$model->count_statements( RDF::Trine::Node::Resource->new('http://example.com/ns#r2'), RDF::Trine::Node::Resource->new('http://example.com/ns#test'), RDF::Trine::Node::Resource->new('http://example.com/ns#test'), ), "RDF/XML inside rdf:XMLLiterals is ignored."); ok($model->count_statements( RDF::Trine::Node::Resource->new('http://example.com/ns#r3'), RDF::Trine::Node::Resource->new('http://example.com/ns#test'), RDF::Trine::Node::Resource->new('http://example.com/ns#test'), ), "Embedded RDF/XML is parsed."); ok($model->count_statements( RDF::Trine::Node::Resource->new('http://example.com/ns#r3'), RDF::Trine::Node::Resource->new('http://example.com/ns#literal'), RDF::Trine::Node::Literal->new('Foo', 'en-gb'), ), "Language tags correctly inherited."); $parser = RDF::RDFa::Parser->new($xhtml, 'http://example.com/', {embedded_rdfxml=>2}); $parser->consume; ok($model = $parser->graph, "Alternative graph retrieved"); ok(!$model->count_statements( RDF::Trine::Node::Resource->new('http://example.com/ns#r3'), RDF::Trine::Node::Resource->new('http://example.com/ns#test'), RDF::Trine::Node::Resource->new('http://example.com/ns#test'), ), "Embedded RDF/XML is skipped."); $parser = RDF::RDFa::Parser->new($xhtml, 'http://example.com/', {embedded_rdfxml=>1, graph=>1} ); $parser->consume; $model = $parser->graph; my $iter = $model->get_statements( RDF::Trine::Node::Resource->new('http://example.com/ns#r3'), RDF::Trine::Node::Resource->new('http://example.com/ns#literal'), RDF::Trine::Node::Literal->new('Foo', 'en-gb'), undef, ); my @r; while (my $st = $iter->next) { push @r, $st; } ok(@r, "Named graphs work with RDF/XML - I."); ok(!$r[1], "Named graphs work with RDF/XML - II."); ok($r[0]->context->is_blank, "Named graphs work with RDF/XML - III."); RDF-RDFa-Parser-1.097/t/08atom.t0000644000076400007640000000770311663406033014046 0ustar taitaiuse Test::More tests => 5; BEGIN { use_ok('RDF::RDFa::Parser') }; my $atom = < dive into mark A <em>lot</em> of effort went into making this effortless 2005-07-31T12:29:29Z tag:example.org,2003:3 Copyright (c) 2003, Mark Pilgrim Example Toolkit Atom draft-07 snapshot tag:example.org,2003:3.2397 2005-07-31T12:29:29Z 2003-12-13T08:29:29-04:00 Mark Pilgrim http://example.org/ f8dy\@example.com Sam Ruby Joe Gregorio

[Update: The Atom draft is finished.]

12.99 0 500
ATOM my $opts = RDF::RDFa::Parser::Config->new('atom','1.0',atom_parser=>1); my $p = RDF::RDFa::Parser->new($atom, "http://example.com/", $opts); $p->consume; my $graph = $p->graph; SKIP: { skip "XML::Atom::OWL not installed", 2 unless $RDF::RDFa::Parser::HAS_AWOL; ok( $graph->count_statements( undef, RDF::Trine::Node::Resource->new('http://bblfish.net/work/atom-owl/2006-06-06/#id'), RDF::Trine::Node::Literal->new('tag:example.org,2003:3', undef, 'http://www.w3.org/2001/XMLSchema#anyURI') ), "Parsed feed OK." ); ok( $graph->count_statements( undef, RDF::Trine::Node::Resource->new('http://bblfish.net/work/atom-owl/2006-06-06/#id'), RDF::Trine::Node::Literal->new('tag:example.org,2003:3.2397', undef, 'http://www.w3.org/2001/XMLSchema#anyURI') ), "Parsed entry OK." ); }; ok( $graph->count_statements( undef, RDF::Trine::Node::Resource->new('http://www.iana.org/assignments/relation/enclosure'), RDF::Trine::Node::Resource->new('http://example.org/audio/ph34r_my_podcast.mp3') ), "IANA-registered link type recognised." ); eval "use RDF::Query;"; SKIP: { skip "RDF::Query and XML::Atom::OWL not installed", 1 if $@ or !$RDF::RDFa::Parser::HAS_AWOL; skip "Need newer version of Trine", 1 unless $RDF::Trine::VERSION gt '0.128'; $result = RDF::Query->new("PREFIX awol: ASK WHERE { ?entry a awol:Entry ; awol:author [ awol:uri ] ; [ \"12.99\"^^ ] . }")->execute($graph); ok($result->get_boolean, "Atom native semantics and RDFa mix properly."); }; RDF-RDFa-Parser-1.097/t/04xmlliteral.t0000644000076400007640000000301311663406033015245 0ustar taitai# Tests that XML Literals are working OK. use Test::More tests => 8; BEGIN { use_ok('RDF::RDFa::Parser') }; BEGIN { use_ok('XML::LibXML') }; my $xhtml = <

Albert Einstein

EOF $parser = RDF::RDFa::Parser->new($xhtml, 'http://example.com/einstein'); ok(lc($parser->dom->documentElement->tagName) eq 'html', 'DOM Tree returned OK.'); ok($parser->consume, "Parse OK"); my $model; ok($model = $parser->graph, "Graph retrieved"); my $iter = $model->get_statements( RDF::Trine::Node::Resource->new('http://example.com/einstein#topic'), RDF::Trine::Node::Resource->new('http://xmlns.com/foaf/0.1/name'), undef); my $st = $iter->next; ok(defined $st, "Literal found"); ok($st->object->literal_datatype eq 'http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral', "XML seems to have correct datatype"); SKIP: { skip("If you care about XML canonicalisation, upgrade to at least libxml 2.6.23.", 1) unless XML::LibXML::LIBXML_VERSION >= 20623; ok($st->object->literal_value eq 'Albert Einstein', "XML seems to have correct literal value (with ec14n)"); } RDF-RDFa-Parser-1.097/t/03lang.t0000644000076400007640000000442111663406033014014 0ustar taitai# Tests that lang tags work properly use Test::More tests => 8; BEGIN { use_ok('RDF::RDFa::Parser') }; my $xhtml_rdfa_10 = RDF::RDFa::Parser::Config->new('xhtml','1.0'); my $xhtml = <
EOF my $parser = RDF::RDFa::Parser->new($xhtml, 'http://example.com/', $xhtml_rdfa_10); $parser->consume; my $model; ok($model = $parser->graph, "Graph retrieved"); ok($model->count_statements( RDF::Trine::Node::Resource->new('http://example.com/ns#r0'), RDF::Trine::Node::Resource->new('http://example.com/ns#test'), RDF::Trine::Node::Literal->new('English', 'en-gb'), ), "Language tags are being picked up."); ok($model->count_statements( RDF::Trine::Node::Resource->new('http://example.com/ns#r1'), RDF::Trine::Node::Resource->new('http://example.com/ns#test'), RDF::Trine::Node::Literal->new('English', 'en-gb'), ), "Non-XML lang tags are correctly ignored."); ok($model->count_statements( RDF::Trine::Node::Resource->new('http://example.com/ns#r2'), RDF::Trine::Node::Resource->new('http://example.com/ns#test'), RDF::Trine::Node::Literal->new('English', 'en-gb'), ), "Invalid XML lang tags are correctly ignored."); ok($model->count_statements( RDF::Trine::Node::Resource->new('http://example.com/ns#r3'), RDF::Trine::Node::Resource->new('http://example.com/ns#test'), RDF::Trine::Node::Literal->new('Empty'), ), "Empty XML lang tags reset the language."); $parser = RDF::RDFa::Parser->new($xhtml, 'http://example.com/', {xhtml_lang=>1}); $parser->consume; ok($model = $parser->graph, "Alternative graph retrieved"); ok($model->count_statements( RDF::Trine::Node::Resource->new('http://example.com/ns#r1'), RDF::Trine::Node::Resource->new('http://example.com/ns#test'), RDF::Trine::Node::Literal->new('English', 'de'), ), "XHTML lang tags are not ignored when that option is requested."); RDF-RDFa-Parser-1.097/t/09opendocument.t0000644000076400007640000000142511755143637015614 0ustar taitaiuse Test::More; use RDF::RDFa::Parser; eval { require RDF::Query; require Archive::Zip; 'OK' } or plan skip_all => 'Need RDF::Query and Archive::Zip to run this test!'; plan tests => 1; (my $file = __FILE__) =~ s/t$/odt/; my $data = do { local(@ARGV, $/) = $file; <> }; my $p = RDF::RDFa::Parser->new( $data, 'http://example.com/09opendocument.odt', RDF::RDFa::Parser::Config->new( RDF::RDFa::Parser::Config->HOST_OPENDOCUMENT_ZIP, '1.1', graph => 0 ), ); my $query = RDF::Query->new(<<'SPARQL'); PREFIX dc: ASK WHERE { ?u dc:example1 "B" . ?u dc:example2 "EFG" . ?u dc:example3 "FGH" . ?u dc:example4 "GHI" . FILTER ( !isBlank(?u) ) } SPARQL my $result = $query->execute($p->graph); ok($result->is_boolean and $result->get_boolean); RDF-RDFa-Parser-1.097/README0000644000076400007640000005143011764060662013170 0ustar taitaiNAME RDF::RDFa::Parser - flexible RDFa parser SYNOPSIS If you're wanting to work with an RDF::Trine::Model that can be queried with SPARQL, etc: use RDF::RDFa::Parser; my $url = 'http://example.com/document.html'; my $options = RDF::RDFa::Parser::Config->new('xhtml', '1.1'); my $rdfa = RDF::RDFa::Parser->new_from_url($url, $options); my $model = $rdfa->graph; For dealing with local data: use RDF::RDFa::Parser; my $base_url = 'http://example.com/document.html'; my $options = RDF::RDFa::Parser::Config->new('xhtml', '1.1'); my $rdfa = RDF::RDFa::Parser->new($markup, $base_url, $options); my $model = $rdfa->graph; A simple set of operations for working with Open Graph Protocol data: use RDF::RDFa::Parser; my $url = 'http://www.rottentomatoes.com/m/net/'; my $options = RDF::RDFa::Parser::Config->tagsoup; my $rdfa = RDF::RDFa::Parser->new_from_url($url, $options); print $rdfa->opengraph('title') . "\n"; print $rdfa->opengraph('image') . "\n"; DESCRIPTION RDF::TrineX::Parser::RDFa provides a saner interface for this module. If you are new to parsing RDFa with Perl, then that's the best place to start. Forthcoming API Changes Some of the logic regarding host language and RDFa version guessing is likely to be removed from RDF::RDFa::Parser and RDF::RDFa::Parser::Config, and shifted into RDF::TrineX::Parser::RDFa instead. Constructors "$p = RDF::RDFa::Parser->new($markup, $base, [$config], [$storage])" This method creates a new RDF::RDFa::Parser object and returns it. The $markup variable may contain an XHTML/XML string, or a XML::LibXML::Document. If a string, the document is parsed using XML::LibXML::Parser or HTML::HTML5::Parser, depending on the configuration in $config. XML well-formedness errors will cause the function to die. $base is a URL used to resolve relative links found in the document. $config optionally holds an RDF::RDFa::Parser::Config object which determines the set of rules used to parse the RDFa. It defaults to XHTML+RDFa 1.1. Advanced usage note: $storage optionally holds an RDF::Trine::Store object. If undef, then a new temporary store is created. "$p = RDF::RDFa::Parser->new_from_url($url, [$config], [$storage])" "$p = RDF::RDFa::Parser->new_from_uri($url, [$config], [$storage])" $url is a URL to fetch and parse, or an HTTP::Response object. $config optionally holds an RDF::RDFa::Parser::Config object which determines the set of rules used to parse the RDFa. The default is to determine the configuration by looking at the HTTP response Content-Type header; it's probably sensible to keep the default. $storage optionally holds an RDF::Trine::Store object. If undef, then a new temporary store is created. This function can also be called as "new_from_url" or "new_from_uri". Same thing. "$p = RDF::RDFa::Parser->new_from_response($response, [$config], [$storage])" $response is an "HTTP::Response" object. Otherwise the same as "new_from_url". Public Methods "$p->graph" This will return an RDF::Trine::Model containing all the RDFa data found on the page. Advanced usage note: If passed a graph URI as a parameter, will return a single named graph from within the page. This feature is only useful if you're using named graphs. "$p->graphs" Advanced usage only. Will return a hashref of all named graphs, where the graph name is a key and the value is a RDF::Trine::Model tied to a temporary storage. This method is only useful if you're using named graphs. "$p->opengraph([$property])" If $property is provided, will return the value or list of values (if called in list context) for that Open Graph Protocol property. (In pure RDF terms, it returns the non-bnode objects of triples where the subject is the document base URI; and the predicate is $property, with non-URI $property strings taken as having the implicit prefix 'http://ogp.me/ns#'. There is no distinction between literal and non-literal values; literal datatypes and languages are dropped.) If $property is omitted, returns a list of possible properties. Example: foreach my $property (sort $p->opengraph) { print "$property :\n"; foreach my $val (sort $p->opengraph($property)) { print " * $val\n"; } } See also: . "$p->dom" Returns the parsed XML::LibXML::Document. "$p->uri( [$other_uri] )" Returns the base URI of the document being parsed. This will usually be the same as the base URI provided to the constructor, but may differ if the document contains a HTML element. Optionally it may be passed a parameter - an absolute or relative URI - in which case it returns the same URI which it was passed as a parameter, but as an absolute URI, resolved relative to the document's base URI. This seems like two unrelated functions, but if you consider the consequence of passing a relative URI consisting of a zero-length string, it in fact makes sense. "$p->errors" Returns a list of errors and warnings that occurred during parsing. "$p->processor_graph" As per "$p->errors" but returns data as an RDF model. "$p->output_graph" An alias for "graph", but does not accept a parameter. "$p->processor_and_output_graph" Union of the above two graphs. "$p->consume" Advanced usage only. The document is parsed for RDFa. As of RDF::RDFa::Parser 1.09x, this is called automatically when needed; you probably don't need to touch it unless you're doing interesting things with callbacks. Calling "$p->consume(survive => 1)" will avoid crashing (e.g. when the markup provided cannot be parsed), and instead make more errors available in "$p->errors". "$p->set_callbacks(\%callbacks)" Advanced usage only. Set callback functions for the parser to call on certain events. These are only necessary if you want to do something especially unusual. $p->set_callbacks({ 'pretriple_resource' => sub { ... } , 'pretriple_literal' => sub { ... } , 'ontriple' => undef , 'onprefix' => \&some_function , }); Either of the two pretriple callbacks can be set to the string 'print' instead of a coderef. This enables built-in callbacks for printing Turtle to STDOUT. For details of the callback functions, see the section CALLBACKS. If used, "set_callbacks" must be called *before* "consume". "set_callbacks" returns a reference to the parser object itself. "$p->element_subjects" Advanced usage only. Gets/sets a hashref of { xpath => RDF::Trine::Node } mappings. This is not touched during normal RDFa parsing, only being used by the @role and @cite features where RDF resources (i.e. URIs and blank nodes) are needed to represent XML elements themselves. CALLBACKS Several callback functions are provided. These may be set using the "set_callbacks" function, which takes a hashref of keys pointing to coderefs. The keys are named for the event to fire the callback on. ontriple This is called once a triple is ready to be added to the graph. (After the pretriple callbacks.) The parameters passed to the callback function are: * A reference to the "RDF::RDFa::Parser" object * A hashref of relevant "XML::LibXML::Element" objects (subject, predicate, object, graph, current) * An RDF::Trine::Statement object. The callback should return 1 to tell the parser to skip this triple (not add it to the graph); return 0 otherwise. The callback may modify the RDF::Trine::Statement object. onprefix This is called when a new CURIE prefix is discovered. The parameters passed to the callback function are: * A reference to the "RDF::RDFa::Parser" object * A reference to the "XML::LibXML::Element" being parsed * The prefix (string, e.g. "foaf") * The expanded URI (string, e.g. "http://xmlns.com/foaf/0.1/") The return value of this callback is currently ignored, but you should return 0 in case future versions of this module assign significance to the return value. ontoken This is called when a CURIE or term has been expanded. The parameters are: * A reference to the "RDF::RDFa::Parser" object * A reference to the "XML::LibXML::Element" being parsed * The CURIE or token as a string (e.g. "foaf:name" or "Stylesheet") * The fully expanded URI The callback function must return a fully expanded URI, or if it wants the CURIE to be ignored, undef. onerror This is called when an error occurs: * A reference to the "RDF::RDFa::Parser" object * The error level (RDF::RDFa::Parser::ERR_ERROR or RDF::RDFa::Parser::ERR_WARNING) * An error code * An error message * A hash of other information The return value of this callback is currently ignored, but you should return 0 in case future versions of this module assign significance to the return value. If you do not define an onerror callback, then errors will be output via STDERR and warnings will be silent. Either way, you can retrieve errors after parsing using the "errors" method. pretriple_resource This callback is deprecated - use ontriple instead. This is called when a triple has been found, but before preparing the triple for adding to the model. It is only called for triples with a non-literal object value. The parameters passed to the callback function are: * A reference to the "RDF::RDFa::Parser" object * A reference to the "XML::LibXML::Element" being parsed * Subject URI or bnode (string) * Predicate URI (string) * Object URI or bnode (string) * Graph URI or bnode (string or undef) The callback should return 1 to tell the parser to skip this triple (not add it to the graph); return 0 otherwise. pretriple_literal This callback is deprecated - use ontriple instead. This is the equivalent of pretriple_resource, but is only called for triples with a literal object value. The parameters passed to the callback function are: * A reference to the "RDF::RDFa::Parser" object * A reference to the "XML::LibXML::Element" being parsed * Subject URI or bnode (string) * Predicate URI (string) * Object literal (string) * Datatype URI (string or undef) * Language (string or undef) * Graph URI or bnode (string or undef) Beware: sometimes both a datatype *and* a language will be passed. This goes beyond the normal RDF data model.) The callback should return 1 to tell the parser to skip this triple (not add it to the graph); return 0 otherwise. FEATURES Most features are configurable using RDF::RDFa::Parser::Config. RDFa Versions RDF::RDFa::Parser supports RDFa versions 1.0 and 1.1. 1.1 is currently a moving target; support is experimental. 1.1 is the default, but this can be configured using RDF::RDFa::Parser::Config. Host Languages RDF::RDFa::Parser supports various different RDFa host languages: * XHTML As per the XHTML+RDFa 1.0 and XHTML+RDFa 1.1 specifications. * HTML 4 Uses an HTML5 (sic) parser; uses @lang instead of @xml:lang; keeps prefixes and terms case-insensitive; recognises the @rel relations defined in the HTML 4 specification. Otherwise the same as XHTML. * HTML5 Uses an HTML5 parser; uses @lang as well as @xml:lang; keeps prefixes and terms case-insensitive; recognises the @rel relations defined in the HTML5 draft specification. Otherwise the same as XHTML. * XML This is implemented as per the RDFa Core 1.1 specification. There is also support for "RDFa Core 1.0", for which no specification exists, but has been reverse-engineered by applying the differences between XHTML+RDFa 1.1 and RDFa Core 1.1 to the XHTML+RDFa 1.0 specification. Embedded chunks of RDF/XML within XML are supported. * SVG For now, a synonym for XML. * Atom The and elements are treated specially, setting a new subject; IANA-registered rel keywords are recognised. By passing "atom_parser=>1" as a Config option, you can also handle Atom's native semantics. (Uses XML::Atom::OWL. If this module is not installed, this option is silently ignored.) Otherwise, the same as XML. * DataRSS Defines some default prefixes. Otherwise, the same as Atom. * OpenDocument XML That is, XML content formatted along the lines of 'content.xml' in OpenDocument files. Supports OpenDocument bookmarked ranges used as typed or plain object literals (though not XML literals); expects RDFa attributes in the XHTML namespace instead of in no namespace. Otherwise, the same as XML. * OpenDocument That is, a ZIP file containing OpenDocument XML files. RDF::RDFa::Parser will do all the unzipping and combining for you, so you don't have to. The unregistered "jar:" URI scheme is used to refer to files within the ZIP. Embedded RDF/XML Though a rarely used feature, XHTML allows other XML markup languages to be directly embedded into it. In particular, chunks of RDF/XML can be included in XHTML. While this is not common in XHTML, it's seen quite often in SVG and other XML markup languages. When RDF::RDFa::Parser encounters a chunk of RDF/XML in a document it's parsing (i.e. an element called 'RDF' with namespace 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'), there are three different courses of action it can take: 0. Continue straight through it. This is the behaviour that XHTML+RDFa seems to suggest is the right option. It should mostly not do any harm: triples encoded in RDF/XML will be generally ignored (though the chunk itself could theoretically end up as part of an XML literal). It will waste a bit of time though. 1. Parse the RDF/XML. The parser will parse the RDF/XML properly. If named graphs are enabled, any triples will be added to a separate graph. This is the behaviour that SVG Tiny 1.2 seems to suggest is the correct thing to do. 2. Skip the chunk. This will skip over the RDF element entirely, and thus save you a bit of time. You can decide which path to take by setting the 'embedded_rdfxml' Config option. For HTML and XHTML, you probably want to set embedded_rdfxml to '0' (the default) or '2' (a little faster). For other XML markup languages (e.g. SVG or Atom), then you probably want to set it to '1'. (There's also an option '3' which controls how embedded RDF/XML interacts with named graphs, but this is only really intended for internal use, parsing OpenDocument.) Named Graphs The parser has support for named graphs within a single RDFa document. To switch this on, use the 'graph' Config option. See also . The name of the attribute which indicates graph URIs is by default 'graph', but can be changed using the 'graph_attr' Config option. This option accepts Clark Notation to specify a namespaced attribute. By default, the attribute value is interpreted as like the 'about' attribute (i.e. CURIEs, URIs, etc), but if you set the 'graph_type' Config option to 'id', it will be treated as setting a fragment identifier (like the 'id' attribute). The 'graph_default' Config option allows you to set the default graph URI/bnode identifier. Once you're using named graphs, the "graphs" method becomes useful: it returns a hashref of { graph_uri => trine_model } pairs. The optional parameter to the "graph" method also becomes useful. OpenDocument (ZIP) host language support makes internal use of named graphs, so if you're parsing OpenDocument, tinker with the graph Config options at your own risk! Auto Config RDF::RDFa::Parser has a lot of different Config options to play with. Sometimes it might be useful to allow the page being parsed to control some of these options. If you switch on the 'auto_config' Config option, pages can do this. A page can set options using a specially crafted tag: Note that the "content" attribute is an application/x-www-form-urlencoded string (which must then be HTML-escaped of course). Semicolons may be used instead of ampersands, as these tend to look nicer: It's possible to use auto config outside XHTML (e.g. in Atom or SVG) using namespaces: Any Config option may be given using auto config, except 'use_rtnlx', 'dom_parser', and of course 'auto_config' itself. Profiles Support for Profiles (an experimental RDFa 1.1 feature) was added in version 1.09_00, but dropped after version 1.096, because the feature was removed from draft specs. BUGS RDF::RDFa::Parser 0.21 passed all approved tests in the XHTML+RDFa test suite at the time of its release. RDF::RDFa::Parser 0.22 (used in conjunction with HTML::HTML5::Parser 0.01 and HTML::HTML5::Sanity 0.01) additionally passes all approved tests in the HTML4+RDFa and HTML5+RDFa test suites at the time of its release; except test cases 0113 and 0121, which the author of this module believes mandate incorrect HTML parsing. RDF::RDFa::Parser 1.096_01 passes all approved tests on the default graph (not the processor graph) in the RDFa 1.1 test suite for language versions 1.0 and host languages xhtml1, html4 and html5, with the following exceptions which are skipped: * 0140 - wilful violation, pending proof that the test is backed up by the spec. * 0198 - an XML canonicalisation test that may be dropped in the future. * 0212 - wilful violation, as passing this test would require regressing on the old RDFa 1.0 test suite. * 0251 to 0256 pass with RDFa 1.1 and are skipped in RDFa 1.0 because they use RDFa-1.1-specific syntax. * 0256 is additionally skipped in HTML4 mode, as the author believes xml:lang should be ignored in HTML versions prior to HTML5. * 0303 - wilful violation, as this feature is simply awful. Please report any bugs to . Common gotchas: * Are you using the XML catalogue? RDF::RDFa::Parser maintains a locally cached version of the XHTML+RDFa DTD. This will normally be within your Perl module directory, in a subdirectory named "auto/share/dist/RDF-RDFa-Parser/catalogue/". If this is missing, the parser should still work, but will be very slow. SEE ALSO RDF::TrineX::Parser::RDFa provides a saner interface for this module. RDF::RDFa::Parser::Config. XML::LibXML, RDF::Trine, HTML::HTML5::Parser, HTML::HTML5::Sanity, RDF::RDFa::Generator, RDF::RDFa::Linter. , . AUTHOR Toby Inkster . ACKNOWLEDGEMENTS Kjetil Kjernsmo wrote much of the stuff for building RDF::Trine models. Neubert Joachim taught me to use XML catalogues, which massively speeds up parsing of XHTML files that have DTDs. COPYRIGHT AND LICENCE Copyright 2008-2012 Toby Inkster This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. DISCLAIMER OF WARRANTIES THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. RDF-RDFa-Parser-1.097/share/0000755000076400007640000000000011764061700013401 5ustar taitaiRDF-RDFa-Parser-1.097/share/catalogue/0000755000076400007640000000000011764061700015345 5ustar taitaiRDF-RDFa-Parser-1.097/share/catalogue/index.xml0000644000076400007640000000065211663406032017200 0ustar taitai RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/0000755000076400007640000000000011764061700017307 5ustar taitaiRDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/TR/0000755000076400007640000000000011764061700017634 5ustar taitaiRDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/TR/xhtml-modularization/0000755000076400007640000000000011764061700024027 5ustar taitaiRDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/TR/xhtml-modularization/DTD/0000755000076400007640000000000011764061700024442 5ustar taitaiRDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/TR/xhtml-modularization/DTD/xhtml-basic-form-1.mod0000644000076400007640000001334411663406033030462 0ustar taitai ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/TR/xhtml-modularization/DTD/xhtml-inlstyle-1.mod0000644000076400007640000000216411663406033030301 0ustar taitai RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/TR/xhtml-modularization/DTD/xhtml-base-1.mod0000644000076400007640000000330311663406033027344 0ustar taitai ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/TR/xhtml-modularization/DTD/xhtml-hypertext-1.mod0000644000076400007640000000347311663406033030476 0ustar taitai ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/TR/xhtml-modularization/DTD/xhtml-style-1.mod0000644000076400007640000000305311663406033027574 0ustar taitai ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/TR/xhtml-modularization/DTD/xhtml-basic-table-1.mod0000644000076400007640000001126011663406033030601 0ustar taitai ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/TR/xhtml-modularization/DTD/xhtml-object-1.mod0000644000076400007640000000425211663406033027704 0ustar taitai ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/TR/xhtml-modularization/DTD/xhtml-struct-1.mod0000644000076400007640000000750611663406033027767 0ustar taitai ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/TR/xhtml-modularization/DTD/xhtml-list-1.mod0000644000076400007640000000623011663406033027407 0ustar taitai ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/TR/xhtml-modularization/DTD/xhtml-meta-1.mod0000644000076400007640000000302611663406033027362 0ustar taitai ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/TR/xhtml-modularization/DTD/xhtml-framework-1.mod0000644000076400007640000000607711663406033030442 0ustar taitai %xhtml-arch.mod;]]> %xhtml-notations.mod;]]> %xhtml-datatypes.mod;]]> %xhtml-xlink.mod; %xhtml-qname.mod;]]> %xhtml-events.mod;]]> %xhtml-attribs.mod;]]> %xhtml-model.redecl; %xhtml-model.mod;]]> %xhtml-charent.mod;]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/TR/xhtml-modularization/DTD/xhtml-param-1.mod0000644000076400007640000000311711663406033027535 0ustar taitai ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/TR/xhtml-modularization/DTD/xhtml-link-1.mod0000644000076400007640000000422611663406033027374 0ustar taitai ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/TR/xhtml-modularization/DTD/xhtml-script-1.mod0000644000076400007640000000417211663406033027743 0ustar taitai ]]> ]]> ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/TR/xhtml-modularization/DTD/xhtml-text-1.mod0000644000076400007640000000340111663406033027415 0ustar taitai %xhtml-inlstruct.mod;]]> %xhtml-inlphras.mod;]]> %xhtml-blkstruct.mod;]]> %xhtml-blkphras.mod;]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/TR/xhtml-modularization/DTD/xhtml-pres-1.mod0000644000076400007640000000247111663406033027410 0ustar taitai %xhtml-inlpres.mod;]]> %xhtml-blkpres.mod;]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/TR/xhtml-modularization/DTD/xhtml-image-1.mod0000644000076400007640000000322311663406033027515 0ustar taitai ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/TR/ruby/0000755000076400007640000000000011764061700020615 5ustar taitaiRDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/TR/ruby/xhtml-ruby-1.mod0000644000076400007640000001531111663406033023570 0ustar taitai ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/0000755000076400007640000000000011764061700020506 5ustar taitaiRDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/0000755000076400007640000000000011764061700021121 5ustar taitaiRDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-basic-form-1.mod0000644000076400007640000001343311663406032025137 0ustar taitai ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-basic10.cat0000644000076400007640000000243311663406032024167 0ustar taitai-- .......................................................................... -- -- File catalog ............................................................ -- -- XHTML Basic Catalog Data File Revision: $Id: xhtml-basic10.cat,v 1.1 2006/07/05 16:29:09 matthieu Exp $ SMI See "Entity Management", SGML Open Technical Resolution 9401 for detailed information on supplying and using catalog data. This document is available from OASIS at URL: -- -- .......................................................................... -- -- SGML declaration associated with XML .................................... -- OVERRIDE YES SGMLDECL "xml1.dcl" -- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -- -- XHTML Basic DTD modular driver file ..................................... -- PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN" "xhtml-basic10.dtd" -- XHTML Basic framework module ............................................. -- PUBLIC "-//W3C//ENTITIES XHTML Basic 1.0 Document Model 1.0//EN" "xhtml-basic10-model-1.mod" -- End of catalog data ..................................................... -- -- .......................................................................... -- RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-inlstyle-1.mod0000644000076400007640000000216611663406032024761 0ustar taitai RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-base-1.mod0000644000076400007640000000330511663406032024024 0ustar taitai ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-blkpres-1.mod0000644000076400007640000000234311663406032024555 0ustar taitai ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-hypertext-1.mod0000644000076400007640000000347511663406032025156 0ustar taitai ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xml-events-qname-2.mod0000644000076400007640000001160711663406033025167 0ustar taitai ]]> %xml-events-qname-extra.mod; RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd0000644000076400007640000003667711663406032024044 0ustar taitai ]]> %xhtml-datatypes.mod;]]> %xhtml-metaAttributes.mod;]]> %xhtml-inlstyle.mod;]]> %xhtml-framework.mod;]]> ]]> %xhtml-text.mod;]]> %xhtml-hypertext.mod;]]> %xhtml-list.mod;]]> %xhtml-edit.mod;]]> %xhtml-bdo.mod;]]> %xhtml-ruby.mod;]]> %xhtml-pres.mod;]]> %xhtml-link.mod;]]> %xhtml-meta.mod;]]> %xhtml-base.mod;]]> %xhtml-script.mod;]]> %xhtml-style.mod;]]> %xhtml-image.mod;]]> %xhtml-csismap.mod;]]> %xhtml-ssismap.mod;]]> %xhtml-param.mod;]]> %xhtml-object.mod;]]> %xhtml-table.mod;]]> %xhtml-form.mod;]]> %xhtml-target.mod;]]> %xhtml-legacy.mod;]]> %xhtml-struct.mod;]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-rdfa-model-1.mod0000644000076400007640000001542211663406032025127 0ustar taitai RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-csismap-1.mod0000644000076400007640000000674311663406032024562 0ustar taitai ]]> ]]> ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-style-1.mod0000644000076400007640000000305511663406032024254 0ustar taitai ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-legacy-1.mod0000644000076400007640000002572211663406032024365 0ustar taitai ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> %xhtml-frames.mod;]]> %xhtml-iframe.mod;]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xml-events-qname-1.mod0000644000076400007640000001044711663406033025167 0ustar taitai ]]> %xml-events-qname-extra.mod; RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xml-script-1.mod0000644000076400007640000000240711663406033024065 0ustar taitai ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-basic10-f.dtd0000644000076400007640000032732711663406032024432 0ustar taitai %xhtml-arch.mod;]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> %xhtml-events.mod;]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-form-1.mod0000644000076400007640000002140511663406032024056 0ustar taitai ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xframes-1.dtd0000644000076400007640000001064111663406032023422 0ustar taitai %xframes-qname.mod; RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xml1n.dcl0000644000076400007640000001633411663406033022653 0ustar taitai" PIC "?>" SHORTREF NONE NAMES SGMLREF QUANTITY NONE -- Quantities are not restricted in XML -- ENTITIES "amp" 38 "lt" 60 "gt" 62 "quot" 34 "apos" 39 FEATURES MINIMIZE DATATAG NO OMITTAG NO RANK NO SHORTTAG STARTTAG EMPTY NO UNCLOSED NO NETENABL IMMEDNET ENDTAG EMPTY NO UNCLOSED NO ATTRIB DEFAULT YES OMITNAME NO VALUE NO EMPTYNRM YES IMPLYDEF ATTLIST NO -- VALID: was YES -- DOCTYPE NO ELEMENT NO -- VALID: was YES -- ENTITY NO NOTATION NO -- VALID: was YES -- LINK SIMPLE NO IMPLICIT NO EXPLICIT NO OTHER CONCUR NO SUBDOC NO FORMAL NO URN NO KEEPRSRE YES VALIDITY TYPE -- VALID: was NOASSERT -- ENTITIES REF ANY INTEGRAL YES APPINFO NONE SEEALSO "ISO 8879//NOTATION Extensible Markup Language (XML) 1.0//EN" > RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-inlstruct-1.mod0000644000076400007640000000330411663406032025140 0ustar taitai ]]> ]]> ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-blkstruct-1.mod0000644000076400007640000000310311663406032025123 0ustar taitai ]]> ]]> ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/html4-rdfa-1.dtd0000644000076400007640000012777211663406032023735 0ustar taitai ... ... The URI used as a system identifier with the public identifier allows the user agent to download the DTD and entity sets as needed. --> %HTMLlat1; %HTMLsymbol; %HTMLspecial; ]]> ]]> ]]> ]]> ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-basic-table-1.mod0000644000076400007640000001126211663406032025261 0ustar taitai ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-basic11.cat0000644000076400007640000000267011663406032024173 0ustar taitai-- .......................................................................... -- -- File catalog ............................................................ -- -- XHTML Basic Catalog Data File Revision: $Id: xhtml-basic11.cat,v 1.3 2008/03/05 16:53:38 smccarro Exp $ SMI See "Entity Management", SGML Open Technical Resolution 9401 for detailed information on supplying and using catalog data. This document is available from OASIS at URL: -- -- .......................................................................... -- -- SGML declaration associated with XML .................................... -- OVERRIDE YES SGMLDECL "xml1.dcl" -- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -- -- XHTML Basic DTD modular driver file ..................................... -- PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN" "xhtml-basic11.dtd" -- XHTML Basic framework module ............................................. -- PUBLIC "-//W3C//ENTITIES XHTML Basic 1.1 Document Model 1.0//EN" "xhtml-basic11-model-1.mod" -- XHTML Inputmode module ............................................. -- PUBLIC "-//W3C//ELEMENTS XHTML Inputmode 1.0//EN" "xhtml-inputmode-1.mod" -- End of catalog data ..................................................... -- -- .......................................................................... -- RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xframes-qname-1.mod0000644000076400007640000001115211663406032024523 0ustar taitai ]]> %xframes-qname-extra.mod; ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-frames-1.mod0000644000076400007640000000632511663406032024374 0ustar taitai ]]> ]]> ]]> ]]> ]]> ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/html4-rdfa.cat0000644000076400007640000000134711663406032023560 0ustar taitai-- .......................................................................... -- -- File catalog ............................................................ -- -- HTML4+RDFa 1.0 Catalog Data File Revision: $Revision: 1.1 $ See "Entity Management", SGML Open Technical Resolution 9401 for detailed information on supplying and using catalog data. This document is available from OASIS at URL: -- -- .......................................................................... -- -- SGML declaration associated with HTML + RDFa ............................. -- OVERRIDE YES SGMLDECL "HTML4.decl" PUBLIC "-//ApTest//DTD HTML4+RDFa 1.0//EN" "html4-rdfa-1.dtd" RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-object-1.mod0000644000076400007640000000425411663406032024364 0ustar taitai ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-applet-1.mod0000644000076400007640000000406611663406032024404 0ustar taitai ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-role-1.mod0000644000076400007640000000144311663406032024054 0ustar taitai RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-struct-1.mod0000644000076400007640000000750011663406032024437 0ustar taitai ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-basic11-f.dtd0000644000076400007640000036671111663406032024433 0ustar taitai %xhtml-arch.mod;]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-print10.dtd0000644000076400007640000001712611663406032024253 0ustar taitai %xhtml-inlstyle.mod;]]> %xhtml-framework.mod; %xhtml-text.mod; %xhtml-hypertext.mod; %xhtml-list.mod; %xhtml-pres.mod;]]> %xhtml-image.mod;]]> %xhtml-table.mod;]]> %xhtml-form.mod;]]> %xhtml-script.mod;]]> %xhtml-style.mod;]]> %xhtml-link.mod;]]> %xhtml-meta.mod;]]> %xhtml-base.mod;]]> %xhtml-param.mod;]]> %xhtml-object.mod;]]> %xhtml-struct.mod; RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml1.dcl0000644000076400007640000001631411663406033023027 0ustar taitai" PIC "?>" SHORTREF NONE NAMES SGMLREF QUANTITY NONE -- Quantities are not restricted in XML -- ENTITIES "amp" 38 "lt" 60 "gt" 62 "quot" 34 "apos" 39 FEATURES MINIMIZE DATATAG NO OMITTAG NO RANK NO SHORTTAG STARTTAG EMPTY NO UNCLOSED NO NETENABL IMMEDNET ENDTAG EMPTY NO UNCLOSED NO ATTRIB DEFAULT YES OMITNAME NO VALUE NO EMPTYNRM YES IMPLYDEF ATTLIST NO -- VALID: was YES -- DOCTYPE NO ELEMENT NO -- VALID: was YES -- ENTITY NO NOTATION NO -- VALID: was YES -- LINK SIMPLE NO IMPLICIT NO EXPLICIT NO OTHER CONCUR NO SUBDOC NO FORMAL NO URN NO KEEPRSRE YES VALIDITY TYPE -- VALID: was NOASSERT -- ENTITIES REF ANY INTEGRAL YES APPINFO NONE SEEALSO "ISO 8879//NOTATION Extensible Markup Language (XML) 1.0//EN" > RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml11-flat.dtd0000644000076400007640000046376511663406033024065 0ustar taitai ]]> ]]> ]]> %xhtml-arch.mod;]]> %xhtml-notations.mod;]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> %xhtml-legacy.mod;]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-bdo-1.mod0000644000076400007640000000275611663406032023667 0ustar taitai ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-basic11-model-1.mod0000644000076400007640000001005011663406032025426 0ustar taitai RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-charent-1.mod0000644000076400007640000000245311663406032024541 0ustar taitai %xhtml-lat1; %xhtml-symbol; %xhtml-special; RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-inputmode-1.mod0000644000076400007640000000241611663406032025120 0ustar taitai RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml1-frameset.dtd0000644000076400007640000010026611663406032024643 0ustar taitai %HTMLlat1; %HTMLsymbol; %HTMLspecial; RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-rdfa.cat0000644000076400007640000000314511663406032023662 0ustar taitai-- .......................................................................... -- -- File catalog ............................................................ -- -- XHTML Catalog Data File Revision: $Id: xhtml-rdfa.cat,v 1.1 2007/08/11 19:07:00 jigsaw Exp $ SMI This is the catalog data file for various versions of the XHTML DTD. You do not need to use the file names listed here, and do not need to use the filename method of identifying storage objects at all. See "Entity Management", SGML Open Technical Resolution 9401 for detailed information on supplying and using catalog data. This document is available from OASIS at URL: -- -- .......................................................................... -- -- SGML declaration associated with XHTML .................................. -- OVERRIDE YES -- for use with non-Unicode compatible parsers: -- -- SGMLDECL "xml1n.dcl" -- uncomment for XML compatibility: -- SGMLDECL "xml1.dcl" -- -- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -- -- XHTML framework modules .................................................. -- PUBLIC "-//W3C//ENTITIES XHTML HyperAttributes 1.0//EN" "xhtml-hyperAttributes-1.mod" PUBLIC "-//W3C//ENTITIES XHTML MetaAttributes 1.0//EN" "xhtml-metaAttributes-1.mod" PUBLIC "-//W3C//ELEMENTS XHTML Metainformation 2.0//EN" "xhtml-meta-2.mod" -- End of catalog data ..................................................... -- -- .......................................................................... -- RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-list-1.mod0000644000076400007640000000623211663406032024067 0ustar taitai ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-metaAttributes-2.mod0000644000076400007640000001151611663406032026113 0ustar taitai ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-target-1.mod0000644000076400007640000000305311663406032024400 0ustar taitai RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-nameident-1.mod0000644000076400007640000000401611663406032025056 0ustar taitai ]]> ]]> ]]> ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-ruby-1.mod0000644000076400007640000001531211663406032024074 0ustar taitai ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-attribs-1.mod0000644000076400007640000000724311663406032024567 0ustar taitai ]]> ]]> ]]> ]]> ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-access-1.mod0000644000076400007640000000254211663406032024355 0ustar taitai ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xml-handlers-1.mod0000644000076400007640000001054611663406033024364 0ustar taitai ]]> ]]> ]]> ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-basic10.dtd0000644000076400007640000001411711663406032024175 0ustar taitai %xhtml-framework.mod; %xhtml-text.mod; %xhtml-hypertext.mod; %xhtml-list.mod; %xhtml-image.mod;]]> %xhtml-table.mod;]]> %xhtml-form.mod;]]> %xhtml-link.mod;]]> %xhtml-meta.mod;]]> %xhtml-base.mod;]]> %xhtml-param.mod;]]> %xhtml-object.mod;]]> %xhtml-struct.mod; RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml11-model-1.mod0000644000076400007640000001546611663406033024370 0ustar taitai RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-legacy-redecl-1.mod0000644000076400007640000001366511663406032025624 0ustar taitai %xhtml-arch.mod;]]> %xhtml-notations.mod;]]> %xhtml-datatypes.mod;]]> %xhtml-qname.mod;]]> %xhtml-events.mod;]]> %xhtml-attribs.mod;]]> %xhtml-model.redecl; %xhtml-model.mod;]]> %xhtml-charent.mod;]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-meta-2.mod0000644000076400007640000000403111663406032024036 0ustar taitai ]]> ]]> ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-basic11.dtd0000644000076400007640000002157711663406032024206 0ustar taitai %xhtml-inlstyle.mod;]]> %xhtml-datatypes.mod;]]> %xhtml-framework.mod; %xhtml-text.mod; %xhtml-hypertext.mod; %xhtml-list.mod; %xhtml-script.mod;]]> %xhtml-style.mod;]]> %xhtml-image.mod;]]> %xhtml-table.mod;]]> %xhtml-form.mod;]]> %xhtml-pres.mod;]]> %xhtml-link.mod;]]> %xhtml-meta.mod;]]> %xhtml-base.mod;]]> %xhtml-param.mod;]]> %xhtml-object.mod;]]> %xhtml-inputmode.mod;]]> %xhtml-target.mod;]]> %xhtml-struct.mod; RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/html401-rdfa-1.dtd0000644000076400007640000013002311663406032024055 0ustar taitai ... ... The URI used as a system identifier with the public identifier allows the user agent to download the DTD and entity sets as needed. --> %HTMLlat1; %HTMLsymbol; %HTMLspecial; ]]> ]]> ]]> ]]> ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-symbol.ent0000644000076400007640000003074311663406032024276 0ustar taitai RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xml-events-1.mod0000644000076400007640000000234511663406033024066 0ustar taitai RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-rdfa-qname-1.mod0000644000076400007640000000714211663406032025130 0ustar taitai ]]> ]]> %xhtml-rdfa-qname-extra.mod; RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-special.ent0000644000076400007640000001024311663406032024402 0ustar taitai RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-aria-1.dtd0000644000076400007640000004122011663406032024020 0ustar taitai ]]> %xhtml-datatypes.mod;]]> %ARIA-attributes.mod;]]> %xhtml-role.mod;]]> %xhtml-inlstyle.mod;]]> %xhtml-framework.mod;]]> ]]> %xhtml-text.mod;]]> %xhtml-hypertext.mod;]]> %xhtml-list.mod;]]> %xhtml-edit.mod;]]> %xhtml-bdo.mod;]]> %xhtml-ruby.mod;]]> %xhtml-pres.mod;]]> %xhtml-link.mod;]]> %xhtml-meta.mod;]]> %xhtml-base.mod;]]> %xhtml-script.mod;]]> %xhtml-style.mod;]]> %xhtml-image.mod;]]> %xhtml-csismap.mod;]]> %xhtml-ssismap.mod;]]> %xhtml-param.mod;]]> %xhtml-object.mod;]]> %xhtml-table.mod;]]> %xhtml-form.mod;]]> %xhtml-target.mod;]]> %xhtml-legacy.mod;]]> %xhtml-struct.mod;]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-metaAttributes-1.mod0000644000076400007640000001022311663406032026104 0ustar taitai ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-role-qname-1.mod0000644000076400007640000000742511663406032025161 0ustar taitai ]]> %xhtml-role-qname-extra.mod; RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml1-transitional.dtd0000644000076400007640000007672211663406033025556 0ustar taitai %HTMLlat1; %HTMLsymbol; %HTMLspecial; RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-meta-1.mod0000644000076400007640000000303011663406032024033 0ustar taitai ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xml1.dcl0000644000076400007640000001631511663406033022474 0ustar taitai" PIC "?>" SHORTREF NONE NAMES SGMLREF QUANTITY NONE -- Quantities are not restricted in XML -- ENTITIES "amp" 38 "lt" 60 "gt" 62 "quot" 34 "apos" 39 FEATURES MINIMIZE DATATAG NO OMITTAG NO RANK NO SHORTTAG STARTTAG EMPTY NO UNCLOSED NO NETENABL IMMEDNET ENDTAG EMPTY NO UNCLOSED NO ATTRIB DEFAULT YES OMITNAME NO VALUE NO EMPTYNRM YES IMPLYDEF ATTLIST NO -- VALID: was YES -- DOCTYPE NO ELEMENT NO -- VALID: was YES -- ENTITY NO NOTATION NO -- VALID: was YES -- LINK SIMPLE NO IMPLICIT NO EXPLICIT NO OTHER CONCUR NO SUBDOC NO FORMAL NO URN NO KEEPRSRE YES VALIDITY TYPE -- VALID: was NOASSERT -- ENTITIES REF ANY INTEGRAL YES APPINFO NONE SEEALSO "ISO 8879//NOTATION Extensible Markup Language (XML) 1.0//EN" > RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-ssismap-1.mod0000644000076400007640000000216211663406032024571 0ustar taitai RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-print10-model-1.mod0000644000076400007640000000742611663406032025515 0ustar taitai RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml11.dtd0000644000076400007640000002734511663406033023127 0ustar taitai ]]> %xhtml-inlstyle.mod;]]> %xhtml-datatypes.mod;]]> %xhtml-framework.mod;]]> ]]> %xhtml-text.mod;]]> %xhtml-hypertext.mod;]]> %xhtml-list.mod;]]> %xhtml-edit.mod;]]> %xhtml-bdo.mod;]]> %xhtml-ruby.mod;]]> %xhtml-pres.mod;]]> %xhtml-link.mod;]]> %xhtml-meta.mod;]]> %xhtml-base.mod;]]> %xhtml-script.mod;]]> %xhtml-style.mod;]]> %xhtml-image.mod;]]> %xhtml-csismap.mod;]]> %xhtml-ssismap.mod;]]> %xhtml-param.mod;]]> %xhtml-object.mod;]]> %xhtml-table.mod;]]> %xhtml-form.mod;]]> %xhtml-legacy.mod;]]> %xhtml-struct.mod;]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-basic10-model-1.mod0000644000076400007640000000663511663406032025443 0ustar taitai RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml.cat0000644000076400007640000001304211663406032022745 0ustar taitai-- .......................................................................... -- -- File catalog ............................................................ -- -- XHTML Catalog Data File Revision: $Id: xhtml.cat,v 1.1 2008/10/08 20:26:20 smccarro Exp $ SMI This is the catalog data file for various versions of the XHTML DTD. You do not need to use the file names listed here, and do not need to use the filename method of identifying storage objects at all. See "Entity Management", SGML Open Technical Resolution 9401 for detailed information on supplying and using catalog data. This document is available from OASIS at URL: -- -- .......................................................................... -- -- SGML declaration associated with XHTML .................................. -- OVERRIDE YES -- for use with non-Unicode compatible parsers: -- -- SGMLDECL "xml1n.dcl" -- uncomment for XML compatibility: -- SGMLDECL "xml1.dcl" -- -- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -- -- XHTML framework modules .................................................. -- PUBLIC "-//W3C//ENTITIES XHTML Modular Framework 1.0//EN" "xhtml-framework-1.mod" PUBLIC "-//W3C//NOTATIONS XHTML Notations 1.0//EN" "xhtml-notations-1.mod" PUBLIC "-//W3C//ENTITIES XHTML Datatypes 1.0//EN" "xhtml-datatypes-1.mod" PUBLIC "-//W3C//ENTITIES XHTML Qualified Names 1.0//EN" "xhtml-qname-1.mod" PUBLIC "-//W3C//ENTITIES XHTML Common Attributes 1.0//EN" "xhtml-attribs-1.mod" PUBLIC "-//W3C//ENTITIES XHTML Character Entities 1.0//EN" "xhtml-charent-1.mod" PUBLIC "-//W3C//ELEMENTS XHTML Redeclarations 1.0//EN" "xhtml-redecl-1.mod" -- XHTML modules ............................................................ -- PUBLIC "-//W3C//ELEMENTS XHTML Document Structure 1.0//EN" "xhtml-struct-1.mod" PUBLIC "-//W3C//ELEMENTS XHTML Text 1.0//EN" "xhtml-text-1.mod" PUBLIC "-//W3C//ELEMENTS XHTML Hypertext 1.0//EN" "xhtml-hypertext-1.mod" PUBLIC "-//W3C//ELEMENTS XHTML Lists 1.0//EN" "xhtml-list-1.mod" PUBLIC "-//W3C//ELEMENTS XHTML Inline Structural 1.0//EN" "xhtml-inlstruct-1.mod" PUBLIC "-//W3C//ELEMENTS XHTML Inline Presentation 1.0//EN" "xhtml-inlpres-1.mod" PUBLIC "-//W3C//ELEMENTS XHTML Inline Phrasal 1.0//EN" "xhtml-inlphras-1.mod" PUBLIC "-//W3C//ELEMENTS XHTML Block Structural 1.0//EN" "xhtml-blkstruct-1.mod" PUBLIC "-//W3C//ELEMENTS XHTML Block Presentation 1.0//EN" "xhtml-blkpres-1.mod" PUBLIC "-//W3C//ELEMENTS XHTML Block Phrasal 1.0//EN" "xhtml-blkphras-1.mod" PUBLIC "-//W3C//ELEMENTS XHTML Ruby 1.0//EN" "xhtml-ruby-1.mod" PUBLIC "-//W3C//ELEMENTS XHTML Java Applets 1.0//EN" "xhtml-applet-1.mod" PUBLIC "-//W3C//ELEMENTS XHTML Base Architecture 1.0//EN" "xhtml-arch-1.mod" PUBLIC "-//W3C//DTD XHTML Architecture 1.1//EN" "xhtml11-arch.dtd" PUBLIC "-//W3C//ELEMENTS XHTML Param Element 1.0//EN" "xhtml-param-1.mod" PUBLIC "-//W3C//ELEMENTS XHTML Presentation 1.0//EN" "xhtml-pres-1.mod" PUBLIC "-//W3C//ELEMENTS XHTML Editing Elements 1.0//EN" "xhtml-edit-1.mod" PUBLIC "-//W3C//ELEMENTS XHTML BIDI Override Element 1.0//EN" "xhtml-bdo-1.mod" PUBLIC "-//W3C//ELEMENTS XHTML Basic Forms 1.0//EN" "xhtml-basic-form-1.mod" PUBLIC "-//W3C//ELEMENTS XHTML Forms 1.0//EN" "xhtml-form-1.mod" PUBLIC "-//W3C//ELEMENTS XHTML Basic Tables 1.0//EN" "xhtml-basic-table-1.mod" PUBLIC "-//W3C//ELEMENTS XHTML Tables 1.0//EN" "xhtml-table-1.mod" PUBLIC "-//W3C//ELEMENTS XHTML Images 1.0//EN" "xhtml-image-1.mod" PUBLIC "-//W3C//ELEMENTS XHTML Client-side Image Maps 1.0//EN" "xhtml-csismap-1.mod" PUBLIC "-//W3C//ELEMENTS XHTML Server-side Image Maps 1.0//EN" "xhtml-ssismap-1.mod" PUBLIC "-//W3C//ENTITIES XHTML Intrinsic Events 1.0//EN" "xhtml-events-1.mod" PUBLIC "-//W3C//ELEMENTS XHTML Metainformation 1.0//EN" "xhtml-meta-1.mod" PUBLIC "-//W3C//ELEMENTS XHTML Scripting 1.0//EN" "xhtml-script-1.mod" PUBLIC "-//W3C//ELEMENTS XHTML Style Sheets 1.0//EN" "xhtml-style-1.mod" PUBLIC "-//W3C//ELEMENTS XHTML Link Element 1.0//EN" "xhtml-link-1.mod" PUBLIC "-//W3C//ELEMENTS XHTML Base Element 1.0//EN" "xhtml-base-1.mod" PUBLIC "-//W3C//ELEMENTS XHTML Legacy Redeclarations 1.0//EN" "xhtml-legacy-redecl-1.mod" PUBLIC "-//W3C//ELEMENTS XHTML Legacy Markup 1.0//EN" "xhtml-legacy-1.mod" PUBLIC "-//W3C//ELEMENTS XHTML Embedded Object 1.0//EN" "xhtml-object-1.mod" PUBLIC "-//W3C//ELEMENTS XHTML Frames 1.0//EN" "xhtml-frames-1.mod" PUBLIC "-//W3C//ELEMENTS XHTML Target 1.0//EN" "xhtml-target-1.mod" PUBLIC "-//W3C//ELEMENTS XHTML Inline Frame Element 1.0//EN" "xhtml-iframe-1.mod" PUBLIC "-//W3C//ELEMENTS XHTML Inline Style 1.0//EN" "xhtml-inlstyle-1.mod" PUBLIC "-//W3C//ELEMENTS XHTML Name Identifier 1.0//EN" "xhtml-nameident-1.mod" -- XHTML entity sets ....................................................... -- PUBLIC "-//W3C//ENTITIES Latin 1 for XHTML//EN" "xhtml-lat1.ent" PUBLIC "-//W3C//ENTITIES Special for XHTML//EN" "xhtml-special.ent" PUBLIC "-//W3C//ENTITIES Symbols for XHTML//EN" "xhtml-symbol.ent" -- End of catalog data ..................................................... -- -- .......................................................................... -- RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-framework-1.mod0000644000076400007640000000610111663406032025104 0ustar taitai %xhtml-arch.mod;]]> %xhtml-notations.mod;]]> %xhtml-datatypes.mod;]]> %xhtml-xlink.mod; %xhtml-qname.mod;]]> %xhtml-events.mod;]]> %xhtml-attribs.mod;]]> %xhtml-model.redecl; %xhtml-model.mod;]]> %xhtml-charent.mod;]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-edit-1.mod0000644000076400007640000000365111663406032024043 0ustar taitai ]]> ]]> ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-notations-1.mod0000644000076400007640000000734311663406032025136 0ustar taitai RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-access-qname-1.mod0000644000076400007640000000703511663406032025456 0ustar taitai ]]> %xhtml-access-qname-extra.mod; RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml1-strict.dtd0000644000076400007640000006204711663406033024352 0ustar taitai %HTMLlat1; %HTMLsymbol; %HTMLspecial; RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml.soc0000644000076400007640000000111711663406032022762 0ustar taitaiOVERRIDE YES -- Oasis entity catalog for Extensible HTML 1.0 -- PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "xhtml1-strict.dtd" PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "xhtml1-transitional.dtd" PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "xhtml1-frameset.dtd" -- ISO latin 1 entity set for Extensible HTML (XML 1.0 format) -- PUBLIC "-//W3C//ENTITIES Latin 1 for XHTML//EN" "xhtml-lat1.ent" PUBLIC "-//W3C//ENTITIES Symbols for XHTML//EN" "xhtml-symbol.ent" PUBLIC "-//W3C//ENTITIES Special for XHTML//EN" "xhtml-special.ent" SGMLDECL "xhtml1.dcl" RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-arch-1.mod0000644000076400007640000000353611663406032024035 0ustar taitai RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xml-events-2.mod0000644000076400007640000000242511663406033024066 0ustar taitai RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-param-1.mod0000644000076400007640000000312111663406032024206 0ustar taitai ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-lat1.ent0000644000076400007640000002106611663406032023630 0ustar taitai RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-math11-f.dtd0000644000076400007640000134340011663406032024272 0ustar taitai ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> %xhtml-legacy.mod;]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> %mathml-qname.mod;]]> ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-events-1.mod0000644000076400007640000001145511663406032024423 0ustar taitai ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xml-handlers-2.mod0000644000076400007640000001173311663406033024364 0ustar taitai ]]> ]]> ]]> ]]> ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-link-1.mod0000644000076400007640000000423011663406032024045 0ustar taitai ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-inlphras-1.mod0000644000076400007640000001152211663406032024732 0ustar taitai ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-rdfa-2.dtd0000644000076400007640000003667711663406032024045 0ustar taitai ]]> %xhtml-datatypes.mod;]]> %xhtml-metaAttributes.mod;]]> %xhtml-inlstyle.mod;]]> %xhtml-framework.mod;]]> ]]> %xhtml-text.mod;]]> %xhtml-hypertext.mod;]]> %xhtml-list.mod;]]> %xhtml-edit.mod;]]> %xhtml-bdo.mod;]]> %xhtml-ruby.mod;]]> %xhtml-pres.mod;]]> %xhtml-link.mod;]]> %xhtml-meta.mod;]]> %xhtml-base.mod;]]> %xhtml-script.mod;]]> %xhtml-style.mod;]]> %xhtml-image.mod;]]> %xhtml-csismap.mod;]]> %xhtml-ssismap.mod;]]> %xhtml-param.mod;]]> %xhtml-object.mod;]]> %xhtml-table.mod;]]> %xhtml-form.mod;]]> %xhtml-target.mod;]]> %xhtml-legacy.mod;]]> %xhtml-struct.mod;]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-inlpres-1.mod0000644000076400007640000000644611663406032024577 0ustar taitai ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-hyperAttributes-1.mod0000644000076400007640000000515211663406032026312 0ustar taitai ]]> ]]> ]]> ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-script-1.mod0000644000076400007640000000417411663406032024423 0ustar taitai ]]> ]]> ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-blkphras-1.mod0000644000076400007640000001011411663406032024714 0ustar taitai ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-qname-1.mod0000644000076400007640000002564111663406032024222 0ustar taitai ]]> %xhtml-qname-extra.mod; ]]> ]]> ]]> %xhtml-qname.redecl; RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/aria-attributes-1.mod0000644000076400007640000000470311663406032025063 0ustar taitai RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-text-1.mod0000644000076400007640000000340311663406032024075 0ustar taitai %xhtml-inlstruct.mod;]]> %xhtml-inlphras.mod;]]> %xhtml-blkstruct.mod;]]> %xhtml-blkphras.mod;]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-rdfa-model-2.mod0000644000076400007640000001542211663406032025130 0ustar taitai RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml11.cat0000644000076400007640000000271511663406033023115 0ustar taitai-- .......................................................................... -- -- File catalog ............................................................ -- -- XHTML 1.1 Catalog Data File Revision: @(#)xhtml11.cat 1.9 2001/04/04 SMI See "Entity Management", SGML Open Technical Resolution 9401 for detailed information on supplying and using catalog data. This document is available from OASIS at URL: -- -- .......................................................................... -- -- SGML declaration associated with XHTML .................................. -- OVERRIDE YES SGMLDECL "xml1.dcl" -- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -- -- XHTML 1.1 DTD modular driver file ....................................... -- -- note that this uses the local, flattened version of the DTD. If you want your catalog to use the master version of the XHTML Modules, change the entry to reference xhtml11.dtd instead of xhtml11-flat.dtd -- PUBLIC "-//W3C//DTD XHTML 1.1//EN" "xhtml11-flat.dtd" -- XHTML 1.1 framework modules .............................................. -- PUBLIC "-//W3C//ENTITIES XHTML 1.1 Document Model 1.0//EN" "xhtml11-model-1.mod" -- End of catalog data ..................................................... -- -- .......................................................................... -- RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-pres-1.mod0000644000076400007640000000247311663406032024070 0ustar taitai %xhtml-inlpres.mod;]]> %xhtml-blkpres.mod;]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-iframe-1.mod0000644000076400007640000000317011663406032024355 0ustar taitai RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-table-1.mod0000644000076400007640000002244011663406032024202 0ustar taitai ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-datatypes-1.mod0000644000076400007640000000647211663406032025120 0ustar taitai RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml-image-1.mod0000644000076400007640000000331211663406032024172 0ustar taitai ]]> ]]> RDF-RDFa-Parser-1.097/share/catalogue/www.w3.org/MarkUp/DTD/xhtml2.dtd0000644000076400007640000000363211663406033023040 0ustar taitai %XHTMLlat1; %XHTMLsymbol; %XHTMLspecial; RDF-RDFa-Parser-1.097/lib/0000755000076400007640000000000011764061700013045 5ustar taitaiRDF-RDFa-Parser-1.097/lib/RDF/0000755000076400007640000000000011764061700013460 5ustar taitaiRDF-RDFa-Parser-1.097/lib/RDF/RDFa/0000755000076400007640000000000011764061700014234 5ustar taitaiRDF-RDFa-Parser-1.097/lib/RDF/RDFa/Parser/0000755000076400007640000000000011764061700015470 5ustar taitaiRDF-RDFa-Parser-1.097/lib/RDF/RDFa/Parser/OpenDocumentObjectModel.pm0000644000076400007640000001325711763507522022554 0ustar taitaipackage RDF::RDFa::Parser::OpenDocumentObjectModel; BEGIN { $RDF::RDFa::Parser::OpenDocumentObjectModel::AUTHORITY = 'cpan:TOBYINK'; $RDF::RDFa::Parser::OpenDocumentObjectModel::VERSION = '1.097'; } our @Types = qw( application/vnd.oasis.opendocument.chart application/vnd.oasis.opendocument.database application/vnd.oasis.opendocument.formula application/vnd.oasis.opendocument.graphics application/vnd.oasis.opendocument.graphics-template application/vnd.oasis.opendocument.image application/vnd.oasis.opendocument.presentation application/vnd.oasis.opendocument.presentation-template application/vnd.oasis.opendocument.spreadsheet application/vnd.oasis.opendocument.spreadsheet-template application/vnd.oasis.opendocument.text application/vnd.oasis.opendocument.text-master application/vnd.oasis.opendocument.text-template application/vnd.oasis.opendocument.text-web ); use File::Temp qw':seekable'; use Scalar::Util qw'blessed'; use URI; use URI::file; use XML::LibXML qw':all'; use constant DOM_NS => 'http://purl.org/NET/cpan-uri/dist/RDF-RDFa-Parser/opendocument-dom-wrapper'; use constant XHTML_NS => 'http://www.w3.org/1999/xhtml'; BEGIN { eval 'use Archive::Zip;'; } sub new { my ($class) = @_; die "Need Archive::Zip installed to parse OpenDocument files.\n" unless $class->usable; return bless {}, $class; } sub usable { return Archive::Zip->can('new'); } sub parse_archive { my ($self, $zip, $baseurl) = @_; my $dom = XML::LibXML::Document->new; $dom->setDocumentElement( $dom->createElement('ROOT'), ); $dom->documentElement->setNamespace(XHTML_NS, 'xhtml'); $dom->documentElement->setNamespace(DOM_NS, 'od', 1); $dom->documentElement->setNodeName('od:Document'); foreach my $file (qw{content.xml settings.xml styles.xml meta.xml META-INF/manifest.xml}) { my $data = $zip->contents($file); if (defined $data) { $self->_handle_content($dom, $baseurl, $file, $data); } } my @rdf = $zip->membersMatching('^/?meta/.+\.rdf'); unshift @rdf, 'manifest.rdf'; foreach my $file (@rdf) { my $data = $zip->contents($file); if (defined $data) { $self->_handle_content($dom, $baseurl, $file, $data, 'Meta'); } } return $dom; } sub _handle_content { my ($self, $dom, $baseurl, $filename, $content, $class) = @_; $class ||= 'Data'; my $content_dom; eval { $content_dom = XML::LibXML->new->parse_string($content); }; return unless $content_dom; my $content_base = sprintf('jar:%s!/%s', $baseurl, $filename); my $wrapper = $dom->documentElement->addNewChild(DOM_NS, $class); $wrapper->setAttributeNS(XHTML_NS, 'about', $content_base); $wrapper->setAttributeNS(XML_XML_NS, 'base', $content_base); $wrapper->setAttributeNS(DOM_NS, 'graph', $content_base); $wrapper->setAttributeNS(DOM_NS, 'file', $filename); $wrapper->appendChild( $content_dom->documentElement ); return $wrapper; } sub parse_string { my ($self, $content, $baseurl) = @_; my ($tmp,$file) = File::Temp::tempfile; binmode $tmp; print $tmp $content; close $tmp; my $zip = Archive::Zip->new($file); my $dom = $self->parse_archive($zip, $baseurl); unlink $file; return $dom; } sub parse_fh { my ($self, $handle, $baseurl) = @_; my $zip = Archive::Zip->new; $zip->readFromFileHandle($handle); return $self->parse_archive($zip, $baseurl); } sub parse_file { my ($self, $file, $baseurl) = @_; unless (blessed($file) && $file->isa('URI')) { if ($file =~ /^[a-z0-9_\.-]+:\S+$/i) { $file = URI->new($file); } else { $baseurl ||= URI::file->new_abs($file); my $zip = Archive::Zip->new($file); return $self->parse_archive($zip, $baseurl); } } $baseurl ||= $file; my $ua = LWP::UserAgent->new; $ua->agent(__PACKAGE__.$VERSION." "); $ua->default_header('Accept' => (join ', ', @Types)); $ua->parse_head(0); my $response = $ua->get($file); die "HTTP response code was not 200 OK." unless $response->code == 200; my $content = $response->decoded_content; return $self->parse_string($content, $baseurl); } __PACKAGE__ __END__ =head1 NAME RDF::RDFa::Parser::OpenDocumentObjectModel - DOM representation of an OpenDocument Format 1.2 file =head1 DESCRIPTION You should hopefully not need to use this module to be able to use RDF::RDFa::Parser. It's used internally by the parser to deal with OpenDocument Format input. This class provides a C constructor and C, C and C methods offering rought compatibility with the parsing interface described in L. It represents an OpenDocument Format 1.2 file (internally a ZIP file containing various XML, RDF/XML and other files) into a single L with a root element C. The root element has several child elements with tag names C and C which each contain a single child corresponding to the root element of (respectively) an XML or RDF/XML file found inside the ZIP. (C and C elements each have a C attribute indicating which file.) This representation is necessarily different to the "Flat XML" format offered by OpenOffice - trust me. The "od" namespace URI is L. =head1 SEE ALSO L. L, L. =head1 AUTHOR Toby Inkster Etobyink@cpan.orgE. =head1 COPYRIGHT AND LICENCE Copyright 2008-2012 Toby Inkster This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. =head1 DISCLAIMER OF WARRANTIES THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. RDF-RDFa-Parser-1.097/lib/RDF/RDFa/Parser/InitialContext.pm0000644000076400007640000002116611763507522021000 0ustar taitaipackage RDF::RDFa::Parser::InitialContext; use 5.010; use strict; no warnings; BEGIN { $RDF::RDFa::Parser::InitialContext::AUTHORITY = 'cpan:TOBYINK'; $RDF::RDFa::Parser::InitialContext::VERSION = '1.097'; } my @rdfa_10 = qw( alternate appendix bookmark cite chapter contents copyright first glossary help icon index last license meta next p3pv1 prev role section stylesheet subsection start top up ); my @std_roles = qw( banner complementary contentinfo definition main navigation note search ); my @aria_roles = qw( alert alertdialog application article button checkbox columnheader combobox dialog directory document grid gridcell group heading img link list listbox listitem log marquee math menu menubar menuitem menuitemcheckbox menuitemradio option presentation progressbar radio radiogroup region row rowheader separator slider spinbutton status tab tablist tabpanel textbox timer toolbar tooltip tree treegrid treeitem ); our %Known = ( 'tag:buzzword.org.uk,2010:rdfa:profile:rdfa-1.0' => { map {; "$_\@rel" => "http://www.w3.org/1999/xhtml/vocab#$_", "$_\@rev" => "http://www.w3.org/1999/xhtml/vocab#$_", } @rdfa_10 }, 'http://www.w3.org/2011/rdfa-context/rdfa-1.1' => { qw( grddl: http://www.w3.org/2003/g/data-view# ma: http://www.w3.org/ns/ma-ont# owl: http://www.w3.org/2002/07/owl# rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns# rdfa: http://www.w3.org/ns/rdfa# rdfs: http://www.w3.org/2000/01/rdf-schema# rif: http://www.w3.org/2007/rif# skos: http://www.w3.org/2004/02/skos/core# skosxl: http://www.w3.org/2008/05/skos-xl# wdr: http://www.w3.org/2007/05/powder# void: http://rdfs.org/ns/void# wdrs: http://www.w3.org/2007/05/powder-s# xhv: http://www.w3.org/1999/xhtml/vocab# xml: http://www.w3.org/XML/1998/namespace xsd: http://www.w3.org/2001/XMLSchema# ), qw( cc: http://creativecommons.org/ns# ctag: http://commontag.org/ns# dc: http://purl.org/dc/terms/ dcterms: http://purl.org/dc/terms/ foaf: http://xmlns.com/foaf/0.1/ gr: http://purl.org/goodrelations/v1# ical: http://www.w3.org/2002/12/cal/icaltzd# og: http://ogp.me/ns# rev: http://purl.org/stuff/rev# sioc: http://rdfs.org/sioc/ns# v: http://rdf.data-vocabulary.org/# vcard: http://www.w3.org/2006/vcard/ns# schema: http://schema.org/ ), describedby => 'http://www.w3.org/2007/05/powder-s#describedby', license => 'http://www.w3.org/1999/xhtml/vocab#license', role => 'http://www.w3.org/1999/xhtml/vocab#role', }, 'http://www.w3.org/2011/rdfa-context/xhtml-rdfa-1.1' => { map {; $_ => "http://www.w3.org/1999/xhtml/vocab#$_" } qw( alternate appendix cite bookmark contents chapter copyright first glossary help icon index last license meta next prev previous section start stylesheet subsection top up p3pv1 ) }, 'http://www.w3.org/2011/rdfa-context/html-rdfa-1.1' => {}, 'tag:buzzword.org.uk,2010:rdfa:profile:xhtml-role' => { map {; lc("$_\@role") => "http://www.w3.org/1999/xhtml/vocab#$_" } @rdfa_10, 'itsRules', @std_roles, @aria_roles, }, 'tag:buzzword.org.uk,2010:rdfa:profile:aria-role' => { map {; "$_\@role" => "http://www.w3.org/1999/xhtml/vocab#$_" } @std_roles, @aria_roles, }, # perl -MWeb::Magic -E'Web::Magic->new("http://www.iana.org/assignments/link-relations/link-relations.xml")->findnodes("//*[local-name()=\"value\"]")->foreach(sub {say $_->textContent})' 'tag:buzzword.org.uk,2010:rdfa:profile:ietf' => { map {; "$_\@rel" => "http://www.iana.org/assignments/relation/$_", "$_\@rev" => "http://www.iana.org/assignments/relation/$_", } qw( alternate appendix archives author bookmark canonical chapter collection contents copyright current describedby disclosure duplicate edit edit-media enclosure first glossary help hub icon index item last latest-version license lrdd monitor monitor-group next next-archive nofollow noreferrer payment predecessor-version prefetch prev previous prev-archive related replies search section self service start stylesheet subsection successor-version tag up version-history via working-copy working-copy-of ) }, 'http://search.yahoo.com/searchmonkey-profile' => { qw( abmeta: http://www.abmeta.org/ns# action: http://search.yahoo.com/searchmonkey/action/ assert: http://search.yahoo.com/searchmonkey/assert/ cc: http://creativecommons.org/ns# commerce: http://search.yahoo.com/searchmonkey/commerce/ context: http://search.yahoo.com/searchmonkey/context/ country: http://search.yahoo.com/searchmonkey-datatype/country/ currency: http://search.yahoo.com/searchmonkey-datatype/currency/ dbpedia: http://dbpedia.org/resource/ dc: http://purl.org/dc/terms/ fb: http://rdf.freebase.com/ feed: http://search.yahoo.com/searchmonkey/feed/ finance: http://search.yahoo.com/searchmonkey/finance/ foaf: http://xmlns.com/foaf/0.1/ geo: http://www.georss.org/georss# gr: http://purl.org/goodrelations/v1# job: http://search.yahoo.com/searchmonkey/job/ media: http://search.yahoo.com/searchmonkey/media/ news: http://search.yahoo.com/searchmonkey/news/ owl: http://www.w3.org/2002/07/owl# page: http://search.yahoo.com/searchmonkey/page/ product: http://search.yahoo.com/searchmonkey/product/ rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns# rdfs: http://www.w3.org/2000/01/rdf-schema# reference: http://search.yahoo.com/searchmonkey/reference/ rel: http://search.yahoo.com/searchmonkey-relation/ resume: http://search.yahoo.com/searchmonkey/resume/ review: http://purl.org/stuff/rev# sioc: http://rdfs.org/sioc/ns# social: http://search.yahoo.com/searchmonkey/social/ stag: http://semantictagging.org/ns# tagspace: http://search.yahoo.com/searchmonkey/tagspace/ umbel: http://umbel.org/umbel/sc/ use: http://search.yahoo.com/searchmonkey-datatype/use/ vcal: http://www.w3.org/2002/12/cal/icaltzd# vcard: http://www.w3.org/2006/vcard/ns# xfn: http://gmpg.org/xfn/11# xhtml: http://www.w3.org/1999/xhtml/vocab# xsd: http://www.w3.org/2001/XMLSchema# ) }, 'tag:buzzword.org.uk,2010:rdfa:profile:html32' => { map {; "$_\@rel" => "http://www.w3.org/1999/xhtml/vocab#$_", "$_\@rev" => "http://www.w3.org/1999/xhtml/vocab#$_", } qw( top contents index glossary copyright next previous help search chapter made ) }, 'tag:buzzword.org.uk,2010:rdfa:profile:html4' => { map {; "$_\@rel" => "http://www.w3.org/1999/xhtml/vocab#$_", "$_\@rev" => "http://www.w3.org/1999/xhtml/vocab#$_", } map {; lc $_ } qw( Alternate Stylesheet Start Next Prev Contents Index Glossary Copyright Chapter Section Subsection Appendix Help Bookmark ) }, 'tag:buzzword.org.uk,2010:rdfa:profile:html5' => { map {; "$_\@rel" => "http://www.w3.org/1999/xhtml/vocab#$_", "$_\@rev" => "http://www.w3.org/1999/xhtml/vocab#$_", } qw( alternate archives author bookmark external feed first help icon index last license next nofollow noreferrer pingback prefetch prev search stylesheet sidebar tag up ALTERNATE-STYLESHEET ) }, 'http://www.w3.org/2003/g/data-view' => { map {; "$_\@rel" => "http://www.w3.org/2003/g/data-view#$_", "$_\@rev" => "http://www.w3.org/2003/g/data-view#$_", } qw(transformation profileTransformation namespaceTransformation) }, ); sub new { my $class = shift; my @contexts = map { split /\s+/, $_ } @_; my %self; foreach my $ctx (reverse @contexts) { my %ctx = %{ $Known{$ctx} // +{} }; while (my ($k, $v) = each %ctx) { $self{$k} = $v; } } bless(\%self, $class); } sub uri_mappings { my $self = shift; +{ map { (my $prefix = $_) =~ s/:$//; lc $prefix => $self->{$_} } grep { /:$/ } keys %$self } } sub term_mappings { my $self = shift; my %return; my @keys = grep { !/:$/ } keys %$self; foreach my $key (@keys) { my ($term, $attr) = split /\@/, $key; $attr //= '*'; $return{$attr}{lc $term} = $self->{$key}; } \%return } __PACKAGE__ __END__ =head1 NAME RDF::RDFa::Parser::InitialContext - initially defined lists of prefixes and terms =head1 DESCRIPTION This is fairly internal to RDF::RDFa::Parser, but will nevertheless be documented in due course. =head1 SEE ALSO L. =head1 AUTHOR Toby Inkster Etobyink@cpan.orgE. =head1 COPYRIGHT AND LICENCE Copyright 2008-2012 Toby Inkster This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. =head1 DISCLAIMER OF WARRANTIES THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. RDF-RDFa-Parser-1.097/lib/RDF/RDFa/Parser/Config.pm0000644000076400007640000005262211763507522017250 0ustar taitaipackage RDF::RDFa::Parser::Config; BEGIN { $RDF::RDFa::Parser::Config::AUTHORITY = 'cpan:TOBYINK'; $RDF::RDFa::Parser::Config::VERSION = '1.097'; } use parent qw(Exporter); use constant { HOST_ATOM => 'atom', HOST_DATARSS => 'datarss', HOST_HTML32 => 'html32', HOST_HTML4 => 'html4', HOST_HTML5 => 'html5', HOST_OPENDOCUMENT_XML => 'opendocument-xml', HOST_OPENDOCUMENT_ZIP => 'opendocument-zip', HOST_SVG => 'svg', HOST_XHTML => 'xhtml', HOST_XHTML5 => 'xhtml5', HOST_XML => 'xml', }; use constant { RDFA_10 => '1.0', RDFA_11 => '1.1', RDFA_LATEST => '1.1', RDFA_GUESS => 'guess', }; use common::sense; use 5.010; use RDF::RDFa::Parser::OpenDocumentObjectModel; use URI::Escape qw'uri_unescape'; our @EXPORT_OK = qw(HOST_ATOM HOST_DATARSS HOST_HTML4 HOST_HTML5 HOST_OPENDOCUMENT_XML HOST_OPENDOCUMENT_ZIP HOST_SVG HOST_XHTML HOST_XHTML5 HOST_XML RDFA_10 RDFA_11); our $CONFIGS = { 'host' => { HOST_ATOM() => { 'atom_elements' => 1, 'initial_context' => '', 'vocab_default' => 'http://www.iana.org/assignments/relation/', }, HOST_DATARSS() => { 'atom_elements' => 1, 'initial_context' => 'http://search.yahoo.com/searchmonkey-profile', 'vocab_default' => 'http://www.iana.org/assignments/relation/', }, HOST_HTML32() => { 'dom_parser' => 'html', 'embedded_rdfxml' => 0, 'intial_context' => 'tag:buzzword.org.uk,2010:rdfa:profile:html32', 'prefix_nocase_xmlns' => 1, 'xhtml_base' => 1, 'xhtml_elements' => 1, 'xhtml_lang' => 1, 'xml_base' => 0, 'xml_lang' => 0, }, HOST_HTML4() => { 'dom_parser' => 'html', 'embedded_rdfxml' => 0, 'initial_context' => 'tag:buzzword.org.uk,2010:rdfa:profile:html4 http://www.w3.org/2011/rdfa-context/html-rdfa-1.1', 'prefix_nocase_xmlns' => 1, 'xhtml_base' => 1, 'xhtml_elements' => 1, 'xhtml_lang' => 1, 'xml_base' => 0, 'xml_lang' => 0, }, HOST_HTML5() => { 'dom_parser' => 'html', 'embedded_rdfxml' => 0, 'initial_context' => 'tag:buzzword.org.uk,2010:rdfa:profile:html5 http://www.w3.org/2011/rdfa-context/html-rdfa-1.1', 'prefix_nocase_xmlns' => 1, 'xhtml_base' => 1, 'xhtml_elements' => 1, 'xhtml_lang' => 1, 'xml_base' => 0, 'xml_lang' => 1, }, HOST_OPENDOCUMENT_XML() => { 'bookmark_end' => '{urn:oasis:names:tc:opendocument:xmlns:text:1.0}bookmark-end', 'bookmark_name' => '{urn:oasis:names:tc:opendocument:xmlns:text:1.0}name', 'bookmark_start' => '{urn:oasis:names:tc:opendocument:xmlns:text:1.0}bookmark-start', 'ns' => 'http://www.w3.org/1999/xhtml', }, HOST_OPENDOCUMENT_ZIP() => { 'bookmark_end' => '{urn:oasis:names:tc:opendocument:xmlns:text:1.0}bookmark-end', 'bookmark_name' => '{urn:oasis:names:tc:opendocument:xmlns:text:1.0}name', 'bookmark_start' => '{urn:oasis:names:tc:opendocument:xmlns:text:1.0}bookmark-start', 'dom_parser' => 'opendocument', 'graph' => 3, 'graph_attr' => '{http://purl.org/NET/cpan-uri/dist/RDF-RDFa-Parser/opendocument-dom-wrapper}graph', 'graph_type' => 'about', 'ns' => 'http://www.w3.org/1999/xhtml', }, HOST_SVG() => {}, HOST_XHTML() => { 'embedded_rdfxml' => 0, 'xhtml_base' => 1, 'xhtml_elements' => 1, 'xml_base' => 0, }, HOST_XHTML5() => { 'embedded_rdfxml' => 0, 'xhtml_base' => 1, 'xhtml_elements' => 1, 'xml_base' => 2, }, HOST_XML() => {}, }, 'rdfa' => { RDFA_10() => { 'alt_stylesheet' => 0, 'atom_elements' => 0, 'atom_parser' => 0, 'auto_config' => 0, 'bookmark_end' => undef, 'bookmark_name' => undef, 'bookmark_start' => undef, 'cite_attr' => 0, 'datetime_attr' => 0, 'dom_parser' => 'xml', 'embedded_rdfxml' => 1, 'full_uris' => 0, 'graph' => 0, 'graph_attr' => 'graph', 'graph_type' => 'about', 'graph_default' => undef, 'graph_default_trine' => undef, # not officially exposed 'initial_context' => 'tag:buzzword.org.uk,2010:rdfa:profile:rdfa-1.0', 'inlist_attr' => 0, 'longdesc_attr' => 0, 'lwp_ua' => undef, 'ns' => undef, 'prefix_attr' => 0, 'prefix_bare' => 0, 'prefix_default' => 'http://www.w3.org/1999/xhtml/vocab#', 'prefix_nocase_attr' => 0, 'prefix_nocase_xmlns' => 0, 'property_resources' => 0, 'role_attr' => 0, 'safe_anywhere' => 0, 'safe_optional' => 0, 'skolemize' => 0, 'src_sets_object' => 0, 'tdb_service' => 0, 'typeof_resources' => 0, 'uri_class' => 'URI', 'use_rtnlx' => 0, 'user_agent' => undef, 'value_attr' => 0, 'vocab_attr' => 0, 'vocab_default' => undef, 'vocab_triple' => 0, 'xhtml_base' => 0, 'xhtml_elements' => 0, 'xhtml_lang' => 0, 'xml_base' => 2, 'xml_lang' => 1, 'xmllit_default' => 1, 'xmllit_recurse' => 0, 'xmlns_attr' => 1, }, RDFA_11() => { 'alt_stylesheet' => 0, 'atom_elements' => 0, 'atom_parser' => 0, 'auto_config' => 0, 'bookmark_end' => undef, 'bookmark_name' => undef, 'bookmark_start' => undef, 'cite_attr' => 0, 'datetime_attr' => 0, 'dom_parser' => 'xml', 'embedded_rdfxml' => 1, 'full_uris' => 1, #diff 'graph' => 0, 'graph_attr' => 'graph', 'graph_type' => 'about', 'graph_default' => undef, 'graph_default_trine' => undef, 'inlist_attr' => 1, #diff 'initial_context' => 'http://www.w3.org/2011/rdfa-context/rdfa-1.1', 'longdesc_attr' => 0, 'lwp_ua' => undef, 'ns' => undef, 'prefix_attr' => 1, #diff 'prefix_bare' => 0, 'prefix_default' => 'http://www.w3.org/1999/xhtml/vocab#', 'prefix_nocase_attr' => 1, #diff 'prefix_nocase_xmlns' => 1, #diff 'property_resources' => 1, #diff 'role_attr' => 0, 'safe_anywhere' => 1, #diff 'safe_optional' => 1, #diff 'src_sets_object' => 1, #diff 'skolemize' => 0, 'tdb_service' => 0, 'typeof_resources' => 1, #diff 'uri_class' => 'URI', 'use_rtnlx' => 0, 'user_agent' => undef, 'value_attr' => 0, 'vocab_attr' => 1, #diff 'vocab_default' => undef, 'vocab_triple' => 1, 'xhtml_base' => 0, 'xhtml_elements' => 0, 'xhtml_lang' => 0, 'xml_base' => 2, 'xml_lang' => 1, 'xmllit_default' => 0, #diff 'xmllit_recurse' => 1, #diff 'xmlns_attr' => 1, }, }, 'combination' => { 'xhtml+1.1' => { 'initial_context' => 'http://www.w3.org/2011/rdfa-context/xhtml-rdfa-1.1 http://www.w3.org/2011/rdfa-context/rdfa-1.1', 'xhtml_elements' => 2, # XHTML+RDFa 1.1 wants to use @lang, though # neither XHTML's host language rules, nor # RDFa 1.1's rules individually use it. 'xhtml_lang' => 1, }, 'html32+1.1' => { 'datetime_attr' => 1, 'value_attr' => 1, 'xhtml_elements' => 2, }, 'html4+1.1' => { 'datetime_attr' => 1, 'value_attr' => 1, 'xhtml_elements' => 2, }, 'html5+1.1' => { 'datetime_attr' => 1, 'value_attr' => 1, 'xhtml_elements' => 2, }, 'xhtml5+1.1' => { 'datetime_attr' => 1, 'initial_context' => 'tag:buzzword.org.uk,2010:rdfa:profile:html5 http://www.w3.org/2011/rdfa-context/html-rdfa-1.1 http://www.w3.org/2011/rdfa-context/xhtml-rdfa-1.1', 'value_attr' => 1, 'xhtml_elements' => 2, 'xhtml_lang' => 1, }, }, }; sub new { my ($class, $host, $version, %options) = @_; $host ||= HOST_XHTML; $version ||= RDFA_11; if ($version eq RDFA_GUESS) { $version = RDFA_11; $options{'guess_rdfa_version'} = 1; } $host = $class->host_from_media_type($host) if $host =~ m'/'; my $self = bless {}, $class; if (defined $CONFIGS->{'rdfa'}->{$version}) { $self->merge_options($CONFIGS->{'rdfa'}->{$version}); } else { die "Unsupported RDFa version: $version"; } $self->merge_options($CONFIGS->{'host'}->{$host}) if defined $CONFIGS->{'host'}->{$host}; $self->merge_options($CONFIGS->{'combination'}->{$host . '+' . $version}) if defined $CONFIGS->{'combination'}->{$host . '+' . $version}; $self->merge_options(\%options) if %options; $self->{'_host'} = $host; $self->{'_rdfa'} = $version; $self->{'_opts'} = \%options; return $self; } sub tagsoup { my ($class) = @_; return $class->new( HOST_HTML5, RDFA_LATEST, cite_attr => 1, role_attr => 1, longdesc_attr => 1, ); } sub host_from_media_type { my ($class, $mediatype) = @_; my $host = { 'application/atom+xml' => HOST_ATOM, 'application/vnd.wap.xhtml+xml' => HOST_XHTML, 'application/xhtml+xml' => HOST_XHTML, 'application/xml' => HOST_XML, 'application/zip' => HOST_OPENDOCUMENT_ZIP, 'image/svg+xml' => HOST_SVG, 'text/html' => HOST_HTML5, 'text/xml' => HOST_XML, }->{$mediatype}; return $host if defined $host; return HOST_XML if $mediatype =~ /\+xml/; return HOST_OPENDOCUMENT_ZIP if grep { $mediatype eq $_ } @RDF::RDFa::Parser::OpenDocumentObjectModel::Types; return undef; } sub rehost { my ($self, $host, $version) = @_; $version ||= $self->{'_rdfa'}; my $opts = $self->{'_opts'}; my $class = ref $self; return $class->new($host, $version, %$opts); } sub guess_rdfa_version { my ($config, $parser) = @_; my $rdfans = $config->{'ns'} || undef; my $version; if ($rdfans) { $version = $parser->dom->documentElement->hasAttributeNS($rdfans, 'version') ? $parser->dom->documentElement->getAttributeNS($rdfans, 'version') : undef; } else { $version = $parser->dom->documentElement->hasAttribute('version') ? $parser->dom->documentElement->getAttribute('version') : undef; } if (defined $version and $version =~ /\bRDFa\s+(\d+\.\d+)\b/i) { return $config->rehost($config->{'_host'}, $1); } return $config; } sub lwp_ua { my ($self) = @_; unless (ref $self->{lwp_ua}) { my $uastr = sprintf('%s/%s ', 'RDF::RDFa::Parser', RDF::RDFa::Parser->VERSION); if (defined $self->{'user_agent'}) { if ($self->{'user_agent'} =~ /\s+$/) { $uastr = $self->{'user_agent'} . " $uastr"; } else { $uastr = $self->{'user_agent'}; } } my $accept = "application/xhtml+xml, text/html;q=0.9, image/svg+xml;q=0.9, application/atom+xml;q=0.9, application/xml;q=0.1, text/xml;q=0.1"; if (RDF::RDFa::Parser::OpenDocumentObjectModel->usable) { foreach my $t (@RDF::RDFa::Parser::OpenDocumentObjectModel::Types) { $accept .= ", $t;q=0.4"; } } $self->{lwp_ua} = LWP::UserAgent->new; $self->{lwp_ua}->agent($uastr); $self->{lwp_ua}->default_header("Accept" => $accept); } return $self->{lwp_ua}; } sub auto_config { my ($self, $parser) = @_; my $count; return undef unless $self->{'auto_config'}; my $xpc = XML::LibXML::XPathContext->new; $xpc->registerNs('x', 'http://www.w3.org/1999/xhtml'); my $nodes = $xpc->find('//x:meta[@name="http://search.cpan.org/dist/RDF-RDFa-Parser/#auto_config"]/@content', $parser->dom->documentElement); my $optstr = ''; foreach my $node ($nodes->get_nodelist) { $optstr .= '&' . $node->getValue; } $optstr =~ s/^\&//; my $options = _parse_application_x_www_form_urlencoded($optstr); my $x = {}; foreach my $o (keys %$options) { # ignore use_rtnlx, dom_parser and auto_config. next if $o=~ /^(use_rtnlx|dom_parser|auto_config)$/i; $count++; if (lc $o eq 'initial_context') { $x->{lc $o} .= ' ' . $options->{$o}; } else { $x->{lc $o} = $options->{$o}; } } $self->merge_options(%$x); return $count; } sub _parse_application_x_www_form_urlencoded { my $axwfue = shift; $axwfue =~ tr/;/&/; $axwfue =~ s/\+/%20/g; $axwfue =~ s/(^&+|&+$)//g; my $rv = {}; for (split /&/, $axwfue) { my ($k, $v) = split /=/, $_, 2; next unless length $k; $rv->{uri_unescape($k)} = uri_unescape($v); } return $rv; } sub merge_options { my $self = shift; my %opts = (ref $_[0]) ? %{$_[0]} : @_; while (my ($key, $value) = each %opts) { if ($key =~ m'^(initial_context)$'i && defined $self->{$key} && length $self->{$key}) { $self->{$key} .= " $value"; } elsif ($key eq 'prefix_nocase') { $self->{'prefix_nocase_attr'} = $value; $self->{'prefix_nocase_xmlns'} = $value; } else { $self->{$key} = $value; } } } 1; __END__ =head1 NAME RDF::RDFa::Parser::Config - configuration sets for RDFa parser =head1 DESCRIPTION The third argument to the constructor for RDF::RDFa::Parser objects is a configuration set. This module provides such configuration sets. Confguration sets are needed by the parser so that it knows how to handle certain features which vary between different host languages, or different RDFa versions. All you need to know about is the constructor: $config = RDF::RDFa::Parser::Config->new($host, $version, %options); $host is the host language. Generally you would supply one of the following constants; the default is HOST_XHTML. Internet media types are accepted (e.g. 'text/html' or 'image/svg+xml'), but it's usually better to use a constant as some media types are shared (e.g. HTML4 and HTML5 both use the same media type). =over =item * B<< RDF::RDFa::Parser::Config->HOST_ATOM >> =item * B<< RDF::RDFa::Parser::Config->HOST_DATARSS >> =item * B<< RDF::RDFa::Parser::Config->HOST_HTML32 >> =item * B<< RDF::RDFa::Parser::Config->HOST_HTML4 >> =item * B<< RDF::RDFa::Parser::Config->HOST_HTML5 >> =item * B<< RDF::RDFa::Parser::Config->HOST_OPENDOCUMENT_XML >> (Flat XML: "FODT", "FODS", etc) =item * B<< RDF::RDFa::Parser::Config->HOST_OPENDOCUMENT_ZIP >> ("ODT", "ODS", etc) =item * B<< RDF::RDFa::Parser::Config->HOST_SVG >> =item * B<< RDF::RDFa::Parser::Config->HOST_XHTML >> =item * B<< RDF::RDFa::Parser::Config->HOST_XHTML5 >> =item * B<< RDF::RDFa::Parser::Config->HOST_XML >> =back $version is the RDFa version. Generally you would supply one of the following constants; the default is RDFA_LATEST. =over 2 =item * B<< RDF::RDFa::Parser::Config->RDFA_10 >> =item * B<< RDF::RDFa::Parser::Config->RDFA_11 >> =item * B<< RDF::RDFa::Parser::Config->RDFA_GUESS >> =item * B<< RDF::RDFa::Parser::Config->RDFA_LATEST >> =back Version guessing: the root element is inspected for an attribute 'version'. If this exists and matches /\bRDFa\s+(\d+\.\d+)\b/i then that is used as the version. Otherwise, the latest version is assumed. %options is a hash of additional options to use which override the defaults. While many of these are useful, they probably also reduce conformance to the official RDFa specifications. The following options exist; defaults for XHTML+RDFa1.0 and XHTML+RDFa1.1 are shown in brackets. =over 2 =item * B - magic rel="alternate stylesheet". [0] =item * B - process and specially. [0] =item * B - extract Atom 1.0 native semantics. [0] =item * B - see section "Auto Config" [0] =item * B, B, B - Elements to treat like OpenDocument's Etext:bookmark-startE and Etext:bookmark-endE element, and associated text:name attribute. Must set all three to use this feature. Use Clark Notation to specify namespaces. [all undef] =item * B - support @cite [0] =item * B - support @datetime attribute and HTML5