[librdf-rdfa-generator-perl] 01/64: 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.
Jonas Smedegaard
dr at jones.dk
Sat Dec 23 12:22:48 UTC 2017
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 <mail at 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 @@
+#############################################################
+
+ at prefix : <http://usefulinc.com/ns/doap#> .
+ at prefix dcs: <http://ontologi.es/doap-changeset#> .
+ at prefix dc: <http://purl.org/dc/terms/> .
+ at prefix foaf: <http://xmlns.com/foaf/0.1/> .
+ at prefix my: <http://purl.org/NET/cpan-uri/dist/Example-Example/> .
+ at prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+ at prefix toby: <http://tobyinkster.co.uk/#> .
+ at 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:tobyink at 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 <tobyink at 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
More information about the Pkg-perl-cvs-commits
mailing list