This is an automated email from the git hooks/post-receive script. js pushed a commit to annotated tag debian/0.106-1 in repository librdf-rdfa-generator-perl.
commit 1f015c49fa2d5200e631f164dd67023914734090 Author: Toby Inkster <m...@tobyinkster.co.uk> Date: Wed May 5 21:32:51 2010 +0000 Beginnings of RDFa output stuff. R:R:G::HTML::Hidden and R:R:G::HTML::Head already work as methods of embedding XHTML invisibly into the <body> or <head> elements respectively. --HG-- branch : RDF-RDFa-Generator extra : convert_revision : svn%3A3fe8e991-6959-4966-b76d-b07eca2b6e37/RDF-RDFa-Generator%40329 --- Changes.ttl | 61 +++++++++ MANIFEST | 12 ++ MANIFEST.SKIP | 8 ++ Makefile.PL | 41 ++++++ example1.pl | 28 +++++ lib/RDF/RDFa/Generator.pm | 0 lib/RDF/RDFa/Generator/HTML/Head.pm | 229 ++++++++++++++++++++++++++++++++++ lib/RDF/RDFa/Generator/HTML/Hidden.pm | 90 +++++++++++++ lib/RDF/RDFa/Generator/HTML/Pretty.pm | 0 t/00sig.t | 4 + t/01basic.t | 3 + 11 files changed, 476 insertions(+) diff --git a/Changes.ttl b/Changes.ttl new file mode 100644 index 0000000..5e7f205 --- /dev/null +++ b/Changes.ttl @@ -0,0 +1,61 @@ +############################################################# + +@prefix : <http://usefulinc.com/ns/doap#> . +@prefix dcs: <http://ontologi.es/doap-changeset#> . +@prefix dc: <http://purl.org/dc/terms/> . +@prefix foaf: <http://xmlns.com/foaf/0.1/> . +@prefix my: <http://purl.org/NET/cpan-uri/dist/Example-Example/> . +@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . +@prefix toby: <http://tobyinkster.co.uk/#> . +@prefix xsd: <http://www.w3.org/2001/XMLSchema#> . + +############################################################# + +<> + + dc:title "Changes" ; + dc:description "Revision history for Perl extension Example::Example."@en ; + dc:subject my:project ; + dc:creator toby:i . + +############################################################# + +my:v_0-01 + + a :Version ; + dc:issued "2000-01-01"^^xsd:date ; + :revision "0.01"^^xsd:string ; + :file-release <http://backpan.cpan.org/authors/id/T/TO/TOBYINK/Example-Example-0.01.tar.gz> ; + rdfs:comment "Original version"@en . + +############################################################# + +my:project + + a :Project ; + :name "Example-Example" ; + :shortdesc "Example Project"@en ; + :programming-language "Perl" ; + :homepage <http://search.cpan.org/dist/Example-Example/> ; + :download-page <http://search.cpan.org/dist/Example-Example/> ; + :bug-database <http://rt.cpan.org/Dist/Display.html?Queue=Example-Example> ; + :repository [ a :SVNRepository ; :browse <http://goddamn.co.uk/viewvc/perlmods/Example-Example/> ] ; + :maintainer toby:i ; + :developer toby:i ; + :documenter toby:i ; + :tester toby:i ; + :created "2000-01-01"^^xsd:date ; + :license <http://dev.perl.org/licenses/> ; + :release my:v_0-01 . + +############################################################# + +toby:i + + a foaf:Person ; + foaf:name "Toby Inkster" ; + foaf:homepage <http://tobyinkster.co.uk/> ; + foaf:page <http://search.cpan.org/~tobyink/> ; + foaf:mbox <mailto:toby...@cpan.org> . + +############################################################# diff --git a/MANIFEST b/MANIFEST new file mode 100644 index 0000000..2de9c8a --- /dev/null +++ b/MANIFEST @@ -0,0 +1,12 @@ +Changes +Changes.ttl +Changes.xml +Makefile.PL +MANIFEST +MANIFEST.SKIP +README +META.yml +SIGNATURE + +t/00sig.t +t/01basic.t diff --git a/MANIFEST.SKIP b/MANIFEST.SKIP new file mode 100644 index 0000000..1016855 --- /dev/null +++ b/MANIFEST.SKIP @@ -0,0 +1,8 @@ +^Makefile$ +^blib/ +^pm_to_blib +^blibdirs +\.svn +^example.*\.pl$ +^[^/]+\.(tar\.gz|tar\.bz2|tgz|tbz2|tbz|zip|tar)$ +^MYMETA..yml \ No newline at end of file diff --git a/Makefile.PL b/Makefile.PL new file mode 100644 index 0000000..7dba62f --- /dev/null +++ b/Makefile.PL @@ -0,0 +1,41 @@ +use strict; +use warnings; + +use inc::Module::Install; + +my $dist = 'Example-Example'; +my $fn = "lib/$dist.pm"; $fn =~ s#-#/#g; + +name $dist; +perl_version_from $fn; +version_from $fn; +abstract_from $fn; +readme_from $fn; +author 'Toby Inkster <toby...@cpan.org>'; +license 'perl'; + +test_requires 'Test::More' => '0.61'; + +requires 'Carp' => '1.00'; +requires 'DateTime' => 0; +requires 'RDF::Trine' => '0.112'; +requires 'XML::LibXML' => '1.60'; +requires 'URI' => '1.30'; + +# install_script 'fingerw'; + +resources( + 'homepage' => "http://search.cpan.org/dist/$dist/", + 'repository' => "http://goddamn.co.uk/viewvc/perlmods/$dist/", + 'bugtracker' => "http://rt.cpan.org/Dist/Display.html?Queue=$dist", + ); + +write_doap_changes; +write_doap_changes_xml; + +include 'Test::Signature'; +auto_install; +WriteAll( + 'meta' => 1, + 'sign' => 1, + ); diff --git a/example1.pl b/example1.pl new file mode 100644 index 0000000..d1086fa --- /dev/null +++ b/example1.pl @@ -0,0 +1,28 @@ +use lib "lib"; + +use RDF::TrineShortcuts; +use RDF::RDFa::Generator::HTML::Hidden; + +my $graph = rdf_parse(<<TURTLE, type=>'turtle'); + +\@prefix foaf: <http://xmlns.com/foaf/0.1/> . + +<http://example.net/> + + a foaf:Document ; + <http://www.w3.org/1999/xhtml/vocab#next> <http://example.net/page2> ; + <http://www.w3.org/1999/xhtml/vocab#title> "About Joe"@en ; + foaf:primaryTopic [ + a foaf:Person ; + foaf:name "Joe Bloggs" ; + foaf:plan "To conquer the world!"\@en + ] . + +TURTLE + +my $gen = RDF::RDFa::Generator::HTML::Hidden->new(base=>'http://example.net/'); + +foreach my $n ($gen->nodes($graph)) +{ + print $n->toString . "\n"; +} \ No newline at end of file diff --git a/lib/RDF/RDFa/Generator.pm b/lib/RDF/RDFa/Generator.pm new file mode 100644 index 0000000..e69de29 diff --git a/lib/RDF/RDFa/Generator/HTML/Head.pm b/lib/RDF/RDFa/Generator/HTML/Head.pm new file mode 100644 index 0000000..9ac29a3 --- /dev/null +++ b/lib/RDF/RDFa/Generator/HTML/Head.pm @@ -0,0 +1,229 @@ +package RDF::RDFa::Generator::HTML::Head; + +use 5.008; +use common::sense; +use XML::LibXML qw':all'; + +sub new +{ + my ($class, %opts) = @_; + + while (<DATA>) + { + chomp; + my ($p, $u) = split /\s+/; + $opts{ns}->{$u} ||= $p; + } + + bless \%opts, $class; +} + +sub nodes +{ + my ($proto, $model) = @_; + my $self = (ref $proto) ? $proto : $proto->new; + + my $stream = $self->_get_stream($model); + my @nodes; + + while (my $st = $stream->next) + { + my $node = $st->object->is_literal ? + XML::LibXML::Element->new('meta') : + XML::LibXML::Element->new('link'); + $node->setNamespace('http://www.w3.org/1999/xhtml', undef, 1); + + my $prefixes = {}; + $self->_process_subject($st, $node, $prefixes) + ->_process_predicate($st, $node, $prefixes) + ->_process_object($st, $node, $prefixes); + + if ($self->{'version'} == 1.1 + and $self->{'prefix_attr'}) + { + my $prefix_string = ''; + while (my ($u,$p) = each(%$prefixes)) + { + $prefix_string .= sprintf("%s: %s ", $p, $u); + } + if (length $prefix_string) + { + $node->setAttribute('prefix', $prefix_string); + } + } + else + { + while (my ($u,$p) = each(%$prefixes)) + { + $node->setNamespace($u, $p, 0); + } + } + + push @nodes, $node; + } + + return @nodes if wantarray; + + my $nodelist = XML::LibXML::NodeList->new; + $nodelist->push(@nodes); + return $nodelist; +} + +sub _get_stream +{ + my ($self, $model) = @_; + + my $data_context = undef; + if (defined $self->{'data_context'}) + { + $data_context = ( $self->{'data_context'} =~ /^_:(.*)$/ ) ? + RDF::Trine::Node::Blank->new($1) : + RDF::Trine::Node::Resource->new($self->{'data_context'}); + } + + return $model->get_statements(undef, undef, undef, $data_context); +} + +sub _process_subject +{ + my ($self, $st, $node, $prefixes) = @_; + + if (defined $self->{'base'} + and $st->subject->is_resource + and $st->subject->uri eq $self->{'base'}) + { + return $self; + } + + if ($st->subject->is_resource) + { $node->setAttribute('about', $st->subject->uri); } + else + { $node->setAttribute('about', '_:'.$st->subject->blank_identifier); } + + return $self; +} + +sub _process_predicate +{ + my ($self, $st, $node, $prefixes) = @_; + + my $attr = $st->object->is_literal ? 'property' : 'rel'; + + if ($attr eq 'rel' + and $st->predicate->uri =~ m'^http://www\.w3\.org/1999/xhtml/vocab\# + (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)$'x) + { + $node->setAttribute($attr, $1); + return $self; + } + elsif ($attr eq 'rel' + and $st->predicate->uri =~ m'^http://www\.w3\.org/1999/xhtml/vocab#(.*)$') + { + $node->setAttribute($attr, ':'.$1); + return $self; + } + elsif ($self->{'version'} == 1.1) + { + $node->setAttribute($attr, $st->predicate->uri); + return $self; + } + + my ($uri_prefix, $uri_suffix) = ($st->predicate->uri =~ m'^(.+?)([A-Za-z0-9_-]*)$'); + if (length $uri_suffix and !length $uri_prefix) + { + ($uri_prefix, $uri_suffix) = ($uri_suffix, $uri_prefix); + } + + unless (defined $prefixes->{$uri_prefix}) + { + $prefixes->{$uri_prefix} = $self->{ns}->{$uri_prefix} || 'ns' . (1 + scalar keys %$prefixes); + } + my $curie_prefix = $prefixes->{$uri_prefix}; + + $node->setAttribute($attr, sprintf('%s:%s', $curie_prefix, $uri_suffix)); + + return $self; +} + +sub _process_object +{ + my ($self, $st, $node, $prefixes) = @_; + + if (defined $self->{'base'} + and $st->subject->is_resource + and $st->subject->uri eq $self->{'base'} + and $st->object->is_resource) + { + $node->setAttribute('href', $st->object->uri); + return $self; + } + elsif (defined $self->{'base'} + and $st->object->is_resource + and $st->object->uri eq $self->{'base'}) + { + $node->setAttribute('resource', ''); + return $self; + } + elsif ($st->object->is_resource) + { + $node->setAttribute('resource', $st->object->uri); + return $self; + } + elsif ($st->object->is_blank) + { + $node->setAttribute('resource', '_:'.$st->object->blank_identifier); + return $self; + } + + $node->setAttribute('content', $st->object->literal_value); + + if (defined $st->object->literal_datatype) + { + my ($uri_prefix, $uri_suffix) = ($st->object->literal_datatype =~ m'^(.+?)([A-Za-z0-9_-]*)$'); + if (length $uri_suffix and !length $uri_prefix) + { + ($uri_prefix, $uri_suffix) = ($uri_suffix, $uri_prefix); + } + + unless (defined $prefixes->{$uri_prefix}) + { + $prefixes->{$uri_prefix} = $self->{ns}->{$uri_prefix} || 'ns' . (1 + scalar keys %$prefixes); + } + my $curie_prefix = $prefixes->{$uri_prefix}; + + $node->setAttribute('datatype', sprintf('%s:%s', $curie_prefix, $uri_suffix)); + } + else + { + $node->setAttribute('xml:lang', ''.$st->object->literal_value_language); + } + + return $self; +} + +1; + +__DATA__ +cc http://creativecommons.org/ns# +ctag http://commontag.org/ns# +dc http://purl.org/dc/terms/ +doap http://usefulinc.com/ns/doap# +foaf http://xmlns.com/foaf/0.1/ +geo http://www.w3.org/2003/01/geo/wgs84_pos# +gr http://purl.org/goodrelations/v1# +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# +rel http://purl.org/vocab/relationship/ +rev http://purl.org/stuff/rev# +rss http://purl.org/rss/1.0/ +sioc http://rdfs.org/sioc/ns# +skos http://www.w3.org/2004/02/skos/core# +tag http://www.holygoat.co.uk/owl/redwood/0.1/tags/ +xfn http://vocab.sindice.com/xfn# +xhv http://www.w3.org/1999/xhtml/vocab# +xsd http://www.w3.org/2001/XMLSchema# diff --git a/lib/RDF/RDFa/Generator/HTML/Hidden.pm b/lib/RDF/RDFa/Generator/HTML/Hidden.pm new file mode 100644 index 0000000..c55543e --- /dev/null +++ b/lib/RDF/RDFa/Generator/HTML/Hidden.pm @@ -0,0 +1,90 @@ +package RDF::RDFa::Generator::HTML::Hidden; + +use 5.008; +use base qw'RDF::RDFa::Generator::HTML::Head'; +use common::sense; +use XML::LibXML qw':all'; + +sub nodes +{ + my ($proto, $model) = @_; + my $self = (ref $proto) ? $proto : $proto->new; + + my $stream = $self->_get_stream($model); + my @nodes; + + my $rootnode = XML::LibXML::Element->new('i'); + $rootnode->setNamespace('http://www.w3.org/1999/xhtml', undef, 1); + $rootnode->setAttribute('style','display:none'); + + my $prefixes = {}; + my $subjects = {}; + while (my $st = $stream->next) + { + my $s = $st->subject->is_resource ? + $st->subject->uri : + ('_:'.$st->subject->blank_identifier); + push @{ $subjects->{$s} }, $st; + } + + foreach my $s (keys %$subjects) + { + my $node = $rootnode->addNewChild('http://www.w3.org/1999/xhtml', 'i'); + + $self->_process_subject($subjects->{$s}->[0], $node, $prefixes); + + foreach my $st (@{ $subjects->{$s} }) + { + my $node2 = $node->addNewChild('http://www.w3.org/1999/xhtml', 'i'); + $self->_process_predicate($st, $node2, $prefixes) + ->_process_object($st, $node2, $prefixes); + } + } + + if ($self->{'version'} == 1.1 + and $self->{'prefix_attr'}) + { + my $prefix_string = ''; + while (my ($u,$p) = each(%$prefixes)) + { + $prefix_string .= sprintf("%s: %s ", $p, $u); + } + if (length $prefix_string) + { + $rootnode->setAttribute('prefix', $prefix_string); + } + } + else + { + while (my ($u,$p) = each(%$prefixes)) + { + $rootnode->setNamespace($u, $p, 0); + } + } + + push @nodes, $rootnode; + + return @nodes if wantarray; + + my $nodelist = XML::LibXML::NodeList->new; + $nodelist->push(@nodes); + return $nodelist; +} + +sub _process_subject +{ + my ($self, $st, $node, $prefixes) = @_; + + if (defined $self->{'base'} + and $st->subject->is_resource + and $st->subject->uri eq $self->{'base'}) + { $node->setAttribute('src', ''); } + elsif ($st->subject->is_resource) + { $node->setAttribute('src', $st->subject->uri); } + else + { $node->setAttribute('about', '_:'.$st->subject->blank_identifier); } + + return $self; +} + +1; diff --git a/lib/RDF/RDFa/Generator/HTML/Pretty.pm b/lib/RDF/RDFa/Generator/HTML/Pretty.pm new file mode 100644 index 0000000..e69de29 diff --git a/t/00sig.t b/t/00sig.t new file mode 100644 index 0000000..d899e4c --- /dev/null +++ b/t/00sig.t @@ -0,0 +1,4 @@ +use lib 'inc'; +use Test::More tests => 1; +use Test::Signature; +signature_ok(); diff --git a/t/01basic.t b/t/01basic.t new file mode 100644 index 0000000..efd5560 --- /dev/null +++ b/t/01basic.t @@ -0,0 +1,3 @@ +use Test::More tests => 1; +BEGIN { use_ok('Example::Example') }; + -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/librdf-rdfa-generator-perl.git _______________________________________________ Pkg-perl-cvs-commits mailing list Pkg-perl-cvs-commits@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-perl-cvs-commits