[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