[librdf-rdfa-generator-perl] 02/64: Beginnings of work on pretty-printer.
Jonas Smedegaard
dr at jones.dk
Sat Dec 23 12:22:49 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 3167cf252b67336ab14c87612ed189dd229a9ce4
Author: Toby Inkster <mail at tobyinkster.co.uk>
Date: Thu May 6 23:09:18 2010 +0000
Beginnings of work on pretty-printer.
--HG--
branch : RDF-RDFa-Generator
extra : convert_revision : svn%3A3fe8e991-6959-4966-b76d-b07eca2b6e37/RDF-RDFa-Generator%40331
---
example1-out.html | 3 +
example1.css | 33 ++++++
example1.pl | 10 +-
lib/RDF/RDFa/Generator/HTML/Head.pm | 58 +++++----
lib/RDF/RDFa/Generator/HTML/Pretty.pm | 217 ++++++++++++++++++++++++++++++++++
5 files changed, 291 insertions(+), 30 deletions(-)
diff --git a/example1-out.html b/example1-out.html
new file mode 100644
index 0000000..0b4f5fd
--- /dev/null
+++ b/example1-out.html
@@ -0,0 +1,3 @@
+<link rel="stylesheet" type="text/css" href="example1.css"/>
+
+<div xmlns="http://www.w3.org/1999/xhtml" xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:xhv="http://www.w3.org/1999/xhtml/vocab#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><div about="_:rD88B06CC596111DF9444C19270FD0CE2r0"><h3 class="blank">_:rD88B06CC596111DF9444C19270FD0CE2r0</h3><span class="rdf-type" rel="rdf:type"><img about="http://xmlns.com/foaf/0.1/Person" alt="http://xmlns.com/foaf/0.1/Person" src="data:image/png;charset=binary;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAA [...]
diff --git a/example1.css b/example1.css
new file mode 100644
index 0000000..fe9c401
--- /dev/null
+++ b/example1.css
@@ -0,0 +1,33 @@
+/* <link rel="stylesheet" type="text/css" href="example1.css"/> */
+
+div > div
+{
+ background: #fd9;
+ border: 1px solid #db7;
+ margin: 1em;
+ padding: 0.67em;
+}
+
+div > div h3
+{
+ margin: 0;
+ padding: 0;
+}
+
+div > div span.rdf-type
+{
+ float: right;
+ text-align: right;
+ width: 40px;
+ position: relative;
+ top: -1.67em;
+}
+
+div > div dl dt
+{
+ margin: 0.5em 0 0;
+ padding: 0;
+ font-weight: bold;
+ font-style: italic;
+ font-size: smaller;
+}
diff --git a/example1.pl b/example1.pl
index d1086fa..9d6554c 100644
--- a/example1.pl
+++ b/example1.pl
@@ -1,11 +1,12 @@
use lib "lib";
use RDF::TrineShortcuts;
-use RDF::RDFa::Generator::HTML::Hidden;
+use RDF::RDFa::Generator::HTML::Pretty;
my $graph = rdf_parse(<<TURTLE, type=>'turtle');
\@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+\@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
<http://example.net/>
@@ -16,13 +17,14 @@ my $graph = rdf_parse(<<TURTLE, type=>'turtle');
a foaf:Person ;
foaf:name "Joe Bloggs" ;
foaf:plan "To conquer the world!"\@en
- ] .
+ ] ;
+ foaf:segment "Hello <b xmlns='http://www.w3.org/1999/xhtml'>World</b>"^^rdf:XMLLiteral .
TURTLE
-my $gen = RDF::RDFa::Generator::HTML::Hidden->new(base=>'http://example.net/');
+my $gen = RDF::RDFa::Generator::HTML::Pretty->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/HTML/Head.pm b/lib/RDF/RDFa/Generator/HTML/Head.pm
index 9ac29a3..9694e4d 100644
--- a/lib/RDF/RDFa/Generator/HTML/Head.pm
+++ b/lib/RDF/RDFa/Generator/HTML/Head.pm
@@ -131,19 +131,8 @@ sub _process_predicate
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));
+ $node->setAttribute($attr,
+ $self->_make_curie($st->predicate->uri, $prefixes));
return $self;
}
@@ -182,19 +171,8 @@ sub _process_object
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));
+ $node->setAttribute('datatype',
+ $self->_make_curie($st->object->literal_datatype, $prefixes));
}
else
{
@@ -204,16 +182,40 @@ sub _process_object
return $self;
}
+sub _make_curie
+{
+ my ($self, $uri, $prefixes) = @_;
+
+ my ($uri_prefix, $uri_suffix) = ($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};
+
+ return sprintf('%s:%s', $curie_prefix, $uri_suffix);
+}
+
1;
__DATA__
+bibo http://purl.org/ontology/bibo/
cc http://creativecommons.org/ns#
ctag http://commontag.org/ns#
+dbp http://dbpedia.org/property/
dc http://purl.org/dc/terms/
doap http://usefulinc.com/ns/doap#
+fb http://developers.facebook.com/schema/
foaf http://xmlns.com/foaf/0.1/
geo http://www.w3.org/2003/01/geo/wgs84_pos#
gr http://purl.org/goodrelations/v1#
+ical http://www.w3.org/2002/12/cal/ical#
+og http://opengraphprotocol.org/schema/
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#
@@ -224,6 +226,10 @@ 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/
+v http://rdf.data-vocabulary.org/#
+vann http://purl.org/vocab/vann/
+vcard http://www.w3.org/2006/vcard/ns#
+void http://rdfs.org/ns/void#
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/Pretty.pm b/lib/RDF/RDFa/Generator/HTML/Pretty.pm
index e69de29..37b49e9 100644
--- a/lib/RDF/RDFa/Generator/HTML/Pretty.pm
+++ b/lib/RDF/RDFa/Generator/HTML/Pretty.pm
@@ -0,0 +1,217 @@
+package RDF::RDFa::Generator::HTML::Pretty;
+
+use 5.008;
+use base qw'RDF::RDFa::Generator::HTML::Hidden';
+use common::sense;
+use constant XHTML_NS => 'http://www.w3.org/1999/xhtml';
+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 $root_node = XML::LibXML::Element->new('div');
+ $root_node->setNamespace(XHTML_NS, undef, 1);
+
+ 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 $subject_node = $root_node->addNewChild(XHTML_NS, 'div');
+
+ $self->_process_subject($subjects->{$s}->[0], $subject_node, $prefixes);
+ $self->_resource_heading($subjects->{$s}->[0]->subject, $subject_node, $subjects->{$s}, $prefixes);
+ $self->_resource_classes($subjects->{$s}->[0]->subject, $subject_node, $subjects->{$s}, $prefixes);
+ $self->_resource_statements($subjects->{$s}->[0]->subject, $subject_node, $subjects->{$s}, $prefixes);
+ ## TODO Query $model for statements that act as special notes for the subject (in a separate graph)
+ #$self->_resource_notes($subjects->{$s}->[0]->subject, $subject_node, $model);
+ }
+
+ 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)
+ {
+ $root_node->setAttribute('prefix', $prefix_string);
+ }
+ }
+ else
+ {
+ while (my ($u,$p) = each(%$prefixes))
+ {
+ $root_node->setNamespace($u, $p, 0);
+ }
+ }
+
+ push @nodes, $root_node;
+ return @nodes if wantarray;
+ my $nodelist = XML::LibXML::NodeList->new;
+ $nodelist->push(@nodes);
+ return $nodelist;
+}
+
+sub _resource_heading
+{
+ my ($self, $subject, $node, $statements, $prefixes) = @_;
+
+ my $heading = $node->addNewChild(XHTML_NS, 'h3');
+ $heading->appendTextNode( $subject->is_resource ? $subject->uri : ('_:'.$subject->blank_identifier) );
+ $heading->setAttribute('class', $subject->is_resource ? 'resource' : 'blank' );
+
+ return $self;
+}
+
+## TODO
+## <span rel="rdf:type"><img about="[foaf:Person]" src="fsfwfwfr.png"
+## title="http://xmlns.com/foaf/0.1/Person" /></span>
+
+sub _resource_classes
+{
+ my ($self, $subject, $node, $statements, $prefixes) = @_;
+
+ my @statements = sort {
+ $a->predicate->uri cmp $b->predicate->uri
+ or $a->object->uri cmp $b->object->uri
+ }
+ grep {
+ $_->predicate->uri eq 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type'
+ and $_->object->is_resource
+ }
+ @$statements;
+
+ return unless @statements;
+
+ my $SPAN = $node->addNewChild(XHTML_NS, 'span');
+ $SPAN->setAttribute('class', 'rdf-type');
+ $SPAN->setAttribute('rel', $self->_make_curie('http://www.w3.org/1999/02/22-rdf-syntax-ns#type', $prefixes));
+
+ foreach my $st (@statements)
+ {
+ my $IMG = $SPAN->addNewChild(XHTML_NS, 'img');
+ $IMG->setAttribute('about', $st->object->uri);
+ $IMG->setAttribute('alt', $st->object->uri);
+ $IMG->setAttribute('src', $self->_img($st->object->uri));
+ $IMG->setAttribute('title', $st->object->uri);
+ }
+
+ return $self;
+}
+
+
+sub _resource_statements
+{
+ my ($self, $subject, $node, $statements, $prefixes) = @_;
+
+ my @statements = sort {
+ $a->predicate->uri cmp $b->predicate->uri
+ or $a->object->uri cmp $b->object->uri
+ }
+ grep {
+ $_->predicate->uri ne 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type'
+ or !$_->object->is_resource
+ }
+ @$statements;
+
+ return unless @statements;
+
+ my $DL = $node->addNewChild(XHTML_NS, 'dl');
+
+ my $current_property = undef;
+ foreach my $st (@statements)
+ {
+ unless ($st->predicate->uri eq $current_property)
+ {
+ my $DT = $DL->addNewChild(XHTML_NS, 'dt');
+ $DT->setAttribute('title', $st->predicate->uri);
+ $DT->appendTextNode($self->_make_curie($st->predicate->uri, $prefixes));
+ }
+
+ my $DD = $DL->addNewChild(XHTML_NS, 'dd');
+
+ if ($st->object->is_resource)
+ {
+ $DD->setAttribute('rel', $self->_make_curie($st->predicate->uri, $prefixes));
+ $DD->setAttribute('class', 'resource');
+
+ my $A = $DD->addNewChild(XHTML_NS, 'a');
+ $A->setAttribute('href', $st->object->uri);
+ $A->appendTextNode($st->object->uri);
+ }
+ elsif ($st->object->is_blank)
+ {
+ $DD->setAttribute('rel', $self->_make_curie($st->predicate->uri, $prefixes));
+ $DD->setAttribute('class', 'blank');
+
+ my $A = $DD->addNewChild(XHTML_NS, 'span');
+ $A->setAttribute('about', '_:'.$st->object->blank_identifier);
+ $A->appendTextNode('_:'.$st->object->blank_identifier);
+ }
+ elsif ($st->object->is_literal
+ && !$st->object->has_datatype)
+ {
+ $DD->setAttribute('property', $self->_make_curie($st->predicate->uri, $prefixes));
+ $DD->setAttribute('class', 'plain-literal');
+ $DD->setAttribute('xml:lang', $st->object->literal_value_language);
+ $DD->appendTextNode($st->object->literal_value);
+ }
+ elsif ($st->object->is_literal
+ && $st->object->has_datatype
+ && $st->object->literal_datatype eq 'http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral')
+ {
+ $DD->setAttribute('property', $self->_make_curie($st->predicate->uri, $prefixes));
+ $DD->setAttribute('class', 'typed-literal datatype-xmlliteral');
+ $DD->setAttribute('datatype', $self->_make_curie($st->object->literal_datatype, $prefixes));
+ $DD->appendWellBalancedChunk($st->object->literal_value);
+ }
+ elsif ($st->object->is_literal
+ && $st->object->has_datatype)
+ {
+ $DD->setAttribute('property', $self->_make_curie($st->predicate->uri, $prefixes));
+ $DD->setAttribute('class', 'typed-literal');
+ $DD->setAttribute('datatype', $self->_make_curie($st->object->literal_datatype, $prefixes));
+ $DD->appendTextNode($st->object->literal_value);
+ }
+ }
+
+ return $self;
+}
+
+sub _img
+{
+ my ($self, $type) = @_;
+
+ my $icons = {
+ 'http://xmlns.com/foaf/0.1/Document' => 'data:image/png;charset=binary;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAz1JREFUWIXll0FPG0cUx38zuzgmllM7TQhRFFVVghGRkIBYqJz6HfoFyIEb36HXHnPiGIlP0I/QWy6oQkKqBAdXTghxD03BwnaK1zs7OeBZz65n2TVKT32StTPjnfd+83/PM2P4v5tID+zt7f3k+/4+UPU8DyklURShlIo/YRjGT7t90xjQC8Pw1f7+/q92PH+KSIg3Ozs71XGbMAzxfR+tdeI9u1+wXd3d3X0D3AyglKoBtNtthBAopahUKgRBYAARYiKc3Xb1DcjCwgJBENTS300BaK3jIMZZuu16ZgXPsymAKIoSQe1ArVYr/r5IUM/zaDQaicUVAjAqpEGWlpb+ [...]
+ 'http://xmlns.com/foaf/0.1/Person' => 'data:image/png;charset=binary;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAakSURBVFiFrZZbbBTXGcf/58yZy+7Mrr2brC9rm0tck4CqSoVElUwAG3pRH9oktJVaqVKf+tI8RLRYlqxKqGlj5K4VUbVJFXp56UMTUERV5YFLEnDADWmJCm1MSowNwsaXxWa9u97rnEsfdme9i80S4hzp04xmdr//73zznfM/RCmFhxlDsUEHwPcM3dhDCNnJBY8yxq4LIc9z7o4AONHfN8A/bT7yMABDscG9jOl/jUZbnQ0dG/1NkWYEgw4SiSTu3Imr8Ynx [...]
+ 'http://xmlns.com/foaf/0.1/Group' => 'data:image/png;charset=binary;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH1gsKFTktQWg0swAAB8FJREFUWIXlV1tsFNcZ/mbO3HZ2d/bitfGFi7HXDuZaSAqikDYIVUFCabi4BEopD3nrG1JKGlAqiwhh16h+qPrQVkrVh7RVUiyoooBKKJcQATFp7OILF8uG2JBiK7az6/XO5Vz6MLtjY7kEqvapR/o1u2eOzvnO93/n+88A/+9N+roBbW1tcY/n9yiKuplSWgYAiqKMUOqdU+XQHw8cODDxPwPQ0nJ0k6Krb659bq1aX7dEsawYACCbzeDOndv0ascVjzreW6+/fvj8fx3A8ePNG81I5MiObTtD4XAEsgzIsgJZlsE5B8CRzU7i [...]
+ 'http://www.w3.org/2003/01/geo/wgs84_pos#SpatialThing' => 'data:image/png;charset=binary;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH1ggCFigiAlzmVAAACOFJREFUWIXNl1mMHNUVhr97q6qre7qnZx/PGC+z2YxNMIY4xg5LBBgTFsdRgEBAWV4iImV5iBSx5MUgBZCQEFFQeIyIgiwZJTJxLLM4RpYMNvFgG8cGj2c8mz3Ts3ePp5fqqntv5aF72h6zZFGk5EhHVVLfqv+v//zn3L7wPw7xry5cum1HVURH77Rt+aCQ8hpM2KyNqbWkzCDFZGjMaaXM677lvTO2Z0f+v0agY9vzKyzk84bwm11trcGGL7VVtzYlRU0iRlUsQr7gM5ctkJq6GPacGprvH0o5ErFbY5 [...]
+ '?' => 'data:image/png;charset=binary;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAg8SURBVFiFxZZpkFTVFcd/973u9153z0zP0M4is4DsOsoIErZYbiVIQFQUEZcKlAtlkiIRNfFDPlgVKxWTEsWlQpmgMZW4oIIaFQrEpeLIIoLIZHCAYVicGWbvmen1vX7v3XzoxW6GqLFSlVt16t537nL+53/POfcJKSX/z+b5PpsWPi1KDJ9W7Uq3TCpqjz5sdry6Ria+z1niuzCw7DWhmmF9gdDErcKRi0v0cl9lWY0V9FfKoViv0j14SotafX0uzmvSka+8 [...]
+ };
+
+ my $equiv = {
+ 'http://xmlns.com/foaf/0.1/PersonalProfileDocument' => 'http://xmlns.com/foaf/0.1/Document' ,
+ 'http://www.w3.org/2003/01/geo/wgs84_pos#Point' => 'http://www.w3.org/2003/01/geo/wgs84_pos#SpatialThing' ,
+ 'http://www.w3.org/2006/vcard/ns#Location' => 'http://www.w3.org/2003/01/geo/wgs84_pos#SpatialThing' ,
+ };
+
+ return $icons->{$type} || $icons->{ $equiv->{$type} } || $icons->{'?'};
+}
+
+1;
--
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