You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@any23.apache.org by ha...@apache.org on 2018/08/02 18:15:23 UTC
[1/3] any23 git commit: ANY23-380 disallow duplicate attribute keys
Repository: any23
Updated Branches:
refs/heads/master 36fba681e -> 0291f588d
ANY23-380 disallow duplicate attribute keys
Project: http://git-wip-us.apache.org/repos/asf/any23/repo
Commit: http://git-wip-us.apache.org/repos/asf/any23/commit/4e3011a4
Tree: http://git-wip-us.apache.org/repos/asf/any23/tree/4e3011a4
Diff: http://git-wip-us.apache.org/repos/asf/any23/diff/4e3011a4
Branch: refs/heads/master
Commit: 4e3011a4d80545f04563f427687f4fa74e17103f
Parents: 36fba68
Author: Hans <fi...@gmail.com>
Authored: Wed Aug 1 16:06:55 2018 -0500
Committer: Hans <fi...@gmail.com>
Committed: Wed Aug 1 16:06:55 2018 -0500
----------------------------------------------------------------------
.../any23/extractor/rdf/BaseRDFExtractor.java | 38 +-
.../extractor/rdfa/RDFa11ExtractorTest.java | 6 +
.../html/rdfa/attribute-already-specified.html | 567 +++++++++++++++++++
3 files changed, 601 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/any23/blob/4e3011a4/core/src/main/java/org/apache/any23/extractor/rdf/BaseRDFExtractor.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/any23/extractor/rdf/BaseRDFExtractor.java b/core/src/main/java/org/apache/any23/extractor/rdf/BaseRDFExtractor.java
index 84c53c7..9e24412 100644
--- a/core/src/main/java/org/apache/any23/extractor/rdf/BaseRDFExtractor.java
+++ b/core/src/main/java/org/apache/any23/extractor/rdf/BaseRDFExtractor.java
@@ -46,6 +46,7 @@ import java.io.InputStream;
import java.io.PushbackInputStream;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.regex.Pattern;
@@ -131,26 +132,43 @@ public abstract class BaseRDFExtractor implements Extractor.ContentExtractor {
// See https://issues.apache.org/jira/browse/ANY23-317
// and https://issues.apache.org/jira/browse/ANY23-340
NodeTraversor.filter(new NodeFilter() {
+ final HashSet<String> tmpAttributeKeys = new HashSet<>();
+
@Override
public FilterResult head(Node node, int depth) {
if (node instanceof Element) {
+ HashSet<String> attributeKeys = tmpAttributeKeys;
for (Iterator<Attribute> it = node.attributes().iterator(); it.hasNext(); ) {
// fix for ANY23-350: valid xml attribute names are ^[a-zA-Z_:][-a-zA-Z0-9_:.]
Attribute attr = it.next();
- String key = attr.getKey().replaceAll("[^-a-zA-Z0-9_:.]", "");
-
- // fix for ANY23-347: strip xml namespaces
- int prefixlen = key.lastIndexOf(':') + 1;
- String prefix = key.substring(0, prefixlen).toLowerCase();
- key = (prefix.equals("xmlns:") || prefix.equals("xml:") ? prefix : "")
- + key.substring(prefixlen);
-
- if (key.matches("[a-zA-Z_:][-a-zA-Z0-9_:.]*")) {
- attr.setKey(key);
+ String oldKey = attr.getKey();
+ String newKey = oldKey.replaceAll("[^-a-zA-Z0-9_:.]", "");
+
+ // fix for ANY23-347: strip non-reserved xml namespaces
+ // See https://www.w3.org/TR/xml-names/#sec-namespaces
+ // "All other prefixes beginning with the three-letter sequence x, m, l,
+ // in any case combination, are reserved. This means that:
+ // * users SHOULD NOT use them except as defined by later specifications
+ // * processors MUST NOT treat them as fatal errors."
+ int prefixlen = oldKey.lastIndexOf(':') + 1;
+ String prefix = newKey.substring(0, prefixlen).toLowerCase();
+ newKey = (prefix.startsWith("xml") ? prefix : "") + newKey.substring(prefixlen);
+
+ if (newKey.matches("[a-zA-Z_:][-a-zA-Z0-9_:.]*")
+ //the namespace name for "xmlns" MUST NOT be declared
+ //the namespace name for "xml" need not be declared
+ && !newKey.startsWith("xmlns:xml")
+ // fix for ANY23-380: disallow duplicate attribute keys
+ && attributeKeys.add(newKey)) {
+ //avoid indexOf() operation if possible
+ if (!newKey.equals(oldKey)) {
+ attr.setKey(newKey);
+ }
} else {
it.remove();
}
}
+ attributeKeys.clear();
String tagName = ((Element)node).tagName().replaceAll("[^-a-zA-Z0-9_:.]", "");
tagName = tagName.substring(tagName.lastIndexOf(':') + 1);
http://git-wip-us.apache.org/repos/asf/any23/blob/4e3011a4/core/src/test/java/org/apache/any23/extractor/rdfa/RDFa11ExtractorTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/any23/extractor/rdfa/RDFa11ExtractorTest.java b/core/src/test/java/org/apache/any23/extractor/rdfa/RDFa11ExtractorTest.java
index f504dc5..c3d7fd5 100644
--- a/core/src/test/java/org/apache/any23/extractor/rdfa/RDFa11ExtractorTest.java
+++ b/core/src/test/java/org/apache/any23/extractor/rdfa/RDFa11ExtractorTest.java
@@ -77,6 +77,12 @@ public class RDFa11ExtractorTest extends AbstractRDFaExtractorTestCase {
}
@Test
+ public void testAttributeAlreadySpecified() {
+ assertExtract("/html/rdfa/attribute-already-specified.html");
+ assertModelNotEmpty();
+ }
+
+ @Test
public void test0087() {
assertExtract("/html/rdfa/0087.xhtml");
assertModelNotEmpty();
http://git-wip-us.apache.org/repos/asf/any23/blob/4e3011a4/test-resources/src/test/resources/html/rdfa/attribute-already-specified.html
----------------------------------------------------------------------
diff --git a/test-resources/src/test/resources/html/rdfa/attribute-already-specified.html b/test-resources/src/test/resources/html/rdfa/attribute-already-specified.html
new file mode 100644
index 0000000..509eeba
--- /dev/null
+++ b/test-resources/src/test/resources/html/rdfa/attribute-already-specified.html
@@ -0,0 +1,567 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- Original page source: https://www.lokalkompass.de/bilder/kirche.html -->
+<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="de-DE">
+<head>
+ <title>Bilder kirche: 554 gut bewertete Fotos der Lokalkompass Bürgerreporter</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <meta http-equiv="language" content="de" />
+ <meta http-equiv="content-language" content="de" />
+ <meta name="author" content="Westdeutsche Verlags- und Werbegesellschaft mbH & Co. KG " />
+ <meta name="publisher" content="Westdeutsche Verlags- und Werbegesellschaft mbH & Co. KG " />
+ <meta name="robots" content="all" />
+ <meta name="language" content="deutsch, de" />
+ <meta name="google-site-verification" content="d0y-aTF74C7fbvTMPOs8y1e2a9L9D-pK1hdqz_nfldg" />
+ <meta name="msvalidate.01" content="1F5E2D50E7AB0B23071EBF91C95B5017" />
+ <meta name="y_key" content="20d7e954309ba50e" />
+ <meta name="description" content="Stöbern Sie durch die von der Lokalkompass Community gut bewerteten Bilder zum Thema kirche und laden Sie eigene Bilder hoch!" />
+ <meta property="og:title" content="Bilder kirche: 554 gut bewertete Fotos der Lokalkompass Bürgerreporter" />
+ <meta property="og:type" content="website" />
+ <meta property="og:image" content="https://www.lokalkompass.de/theme/resources/images/logo_open_graph.png?20180322" />
+ <meta property="og:url" content="https://www.lokalkompass.de/bilder/kirche.html" />
+ <meta property="og:site_name" content="lokalkompass.de" />
+ <meta property="og:description" content="Stöbern Sie durch die von der Lokalkompass Community gut bewerteten Bilder zum Thema kirche und laden Sie eigene Bilder hoch!" />
+
+ <link rel="icon" href="https://www.lokalkompass.de/theme/resources/images/favicon.ico?20100310" type="image/vnd.microsoft.icon" />
+ <link rel="next" href="https://www.lokalkompass.de/bilder/kirche.html/action/page/2/" title="" type="" media="" />
+ <link media="all" href="https://www.lokalkompass.de/tmp/css/default-68e52f90b8165aa4356b57af241b06d0.css" type="text/css" rel="stylesheet" />
+ <script type="text/javascript">
+ var baseURI = "https://www.lokalkompass.de/"; var realmID = 0; var stateID = 0;
+ var ajaxPhpScriptPath = "https://www.lokalkompass.de/ajax/"; var clientId = "";
+ var lokstadt = '';
+ var loktype = '';
+ </script>
+ <!-- Definition von site und zone -->
+ <script>
+ var oms_site = 'oms.lokalkompass.de',
+ oms_zone = 'sonstiges';
+ </script>
+
+ <!-- Integration des container-tags und des google-scriptes -->
+ <script type="text/javascript" src="//www.video.oms.eu/ada/cloud/omsv_container_151.js" charset="UTF-8"></script>
+ <script type="text/javascript">
+ var adlWallPaperLeft = 1010;
+ var googletag = googletag || {};
+ googletag.cmd = googletag.cmd || [];
+ (function() {
+ var gads = document.createElement("script");
+ gads.async = true;
+ gads.type = "text/javascript";
+ var useSSL = "https:" == document.location.protocol;
+ gads.src = (useSSL ? "https:" : "http:") + "//www.googletagservices.com/tag/js/gpt.js";
+ var node = document.getElementsByTagName("script")[0];
+ node.parentNode.insertBefore(gads, node);
+ })();
+ </script>
+ <script>
+ /* Definition der Ad-Positionen */
+ googletag.cmd.push(function() {
+
+ googletag.defineSlot('/5766/'+oms_site+'/'+oms_zone, [[728, 90],[800, 251]], 'oms_superbanner').addService(googletag.pubads());
+googletag.defineSlot('/5766/'+oms_site+'/'+oms_zone, [[120, 600],[160, 600],[200, 600]], 'oms_skyscraper').addService(googletag.pubads());
+googletag.defineSlot('/5766/'+oms_site+'/'+oms_zone, [[960, 150],[800, 250]], 'oms_billboard').addService(googletag.pubads());
+googletag.defineOutOfPageSlot('/5766/'+oms_site+'/'+oms_zone, 'oms_ist').addService(googletag.pubads());
+
+ googletag.pubads().setTargeting('bundesland', 'NW');
+ googletag.pubads().setTargeting('lokstadt', lokstadt);
+ googletag.pubads().setTargeting('lokthema', '');
+ googletag.pubads().setTargeting('loktype', loktype);
+ googletag.pubads().setTargeting('lokrubrik', '');
+ googletag.pubads().setTargeting('lokebene', '0');
+ googletag.pubads().setTargeting('lokid', '');
+ googletag.pubads().collapseEmptyDivs(true, true);
+ googletag.pubads().enableSingleRequest();
+ googletag.enableServices();
+
+ if (typeof googletag != 'undefined' && typeof OMSVad != 'undefined' && OMSVad.WLRCMDGPT != null && !OMSVad.isSetGTarget) {
+ for (var i in OMSVad.WLRCMDGPT) {
+ if (OMSVad.WLRCMDGPT.hasOwnProperty(i)) {
+ googletag.pubads().setTargeting(i, OMSVad.WLRCMDGPT[i]);
+ }
+ }
+ OMSVad.isSetGTarget = true;
+ }
+ });
+ </script>
+
+ <script type="text/javascript">
+ (function() {
+ var s = document.createElement('script');
+ s.type = 'text/javascript';
+ s.async = true;
+ s.src = document.location.protocol + '//cdn.nativendo.de/nativendo.js';
+ var sc = document.getElementsByTagName('script')[0];
+ sc.parentNode.insertBefore(s, sc);
+ })();
+ </script>
+ <script type="text/javascript">
+ window.cookieconsent_options = {"message":"Durch Nutzung dieser Website stimmen Sie der Verwendung von Cookies für Analysen, personalisierte Inhalte und Werbung zu. Weitere Informationen über Cookies finden Sie in unserer ","dismiss":"Akzeptieren","learnMore":"Datenschutzerklärung.","link":"/datenschutz","theme":false};
+ </script>
+ <script type="text/javascript" src="https://www.lokalkompass.de/tmp/js/default-1823b67abe5988e7bcf758610f5b6eca.js"></script>
+ <script type="text/javascript" src="https://www.wvw-ora-anzeigenblaetter.de/permalink/e4d2a06a-cb4c-11e5-929d-005056a1001f.js"></script>
+ <script type="text/javascript" src="https://www.flowformore.de/lkplugins/lokalkompass.js"></script>
+
+ <script type="text/javascript"> var cockpitUrl = "https://statistics.gogol-publishing.de"; var cockpitTrackingEnabled = Boolean("1");</script><script src="https://www.lokalkompass.de/resources/javascript/cockpit/js.cockpit.js"></script>
+ <script src="https://www.lokalkompass.de/resources/javascript/tracking.js"></script>
+
+ <!-- No IVW-Head -->
+</head>
+
+<body>
+<div class="overlayWindow">
+ <div id="overlayWindowWrapper"></div>
+</div>
+<a id="feedback" href="https://www.lokalkompass.de/kontakt/" rel="nofollow"></a>
+<div class="adLeaderboardWrapper">
+ <div id="oms_superbanner" class="adLeaderboard">
+ <script type="text/javascript">
+ googletag.cmd.push(function() { googletag.display('oms_superbanner'); });
+ </script>
+ </div>
+</div>
+<div id="wrap">
+ <div id="header">
+ <div id="oms_skyscraper" class="adSkyscraper">
+ <script type="text/javascript">
+ googletag.cmd.push(function() { googletag.display('oms_skyscraper'); });
+ </script>
+ </div>
+ <div id="logo"><a href="https://www.lokalkompass.de/"> </a></div>
+
+ <div style="position: absolute; top: 5px; left: 193px; height: 54px;">
+
+ <div class="left" id="userReportFrom">
+ <a href="https://www.lokalkompass.de/">Ihre Region</a><a href="https://www.lokalkompass.de/ort-waehlen/"><img src="https://www.lokalkompass.de/theme/resources/images/btnAendern.gif?20091210" alt="ändern" /></a>
+ </div>
+ </div>
+
+ <div id="navigationMeta">
+ <a class="metaMap" href="http://lokalkompass.de/karte">Karte</a>
+ <a class="metaTwitterBird" href="http://twitter.com/#!/lokalkompass_de" onclick="var w=window.open('http://twitter.com/#!/lokalkompass_de'); return false;">Folge uns</a>
+ <a class="metaFacebook" href="http://www.facebook.com/lokalkompass" onclick="var w=window.open('http://www.facebook.com/lokalkompass'); return false;">Fan werden</a>
+ <a href="https://www.lokalkompass.de/topgroups/">Gruppen</a>
+ <a href="https://www.lokalkompass.de/hilfe/">Hilfe</a>
+ <a href="https://www.lokalkompass.de/registrieren/">Registrieren</a>
+ <a class="arrowDownRight pointer" id="linkLogin" href="https://www.lokalkompass.de/login/">Anmelden</a>
+ <div class="spacerM"></div>
+ <a class="socialPluginsInfo right" style="margin-top: 3px;" href="https://www.lokalkompass.de/facebook-open-graph/" target="_blank" title="Informationen zu Facebook Open Graph"></a>
+ <a class="viralFacebookConnect right" href="https://www.facebook.com/v3.0/dialog/oauth?client_id=145822458957734&state=f4f2c6cae9e1be43857dd65550ea4f9a&response_type=code&sdk=php-sdk-5.6.2&redirect_uri=https%3A%2F%2Fwww.lokalkompass.de%2Ffacebook%2Faction%2Fm%2Flogin%2F&scope=public_profile%2Cemail" onclick="popUp('https://www.facebook.com/v3.0/dialog/oauth?client_id=145822458957734&state=f4f2c6cae9e1be43857dd65550ea4f9a&response_type=code&sdk=php-sdk-5.6.2&redirect_uri=https%3A%2F%2Fwww.lokalkompass.de%2Ffacebook%2Faction%2Fm%2Flogin%2F&scope=public_profile%2Cemail', 660, 600); return false;"></a>
+ <div class="clearright"></div>
+ </div>
+
+ <div id="boxLogin">
+ <form class="boxLoginForm" name="formLogin" method="post" action="https://www.lokalkompass.de/bilder/kirche.html">
+ <input type="hidden" name="foe" value="1" />
+ <input type="text" id="loginName" name="scmsession_data[login]" placeholder="E-Mail-Adresse" value="" />
+ <input type="password" id="loginPassword" name="scmsession_data[password]" placeholder="Passwort" value="" />
+ <a class="left" style="padding-top: 12px;" href="https://www.lokalkompass.de/register/resetpassword" rel="nofollow">Passwort vergessen?</a>
+ <button type="submit" name="scmsession_btn[login]" value="1">anmelden</button>
+ <div class="clearboth"></div>
+ </form>
+ </div>
+
+ <div id="navigationPrimary">
+ <ul>
+ <li class="active"><a title="Beiträge" href="https://www.lokalkompass.de/">Startseite</a></li>
+ <li><a title="Anzeigen" href="https://www.lokalkompass.de/anzeigen/">Anzeigen</a></li>
+ <li><a href="https://www.lokalkompass.de/beitrag-erstellen/">Beitrag erstellen</a></li>
+ <li><a href="https://www.lokalkompass.de/meine-seite/" rel="nofollow">Meine Seite</a></li>
+ <li><a href="https://www.lokalkompass.de/specials/">Specials</a></li>
+ </ul>
+ <div id="searchBar">
+ <!-- Google CSE -->
+ <form action="https://www.lokalkompass.de/suche/" id="cse-search-box" enctype="multipart/form-data; charset=UTF-8" accept-charset="UTF-8" method="get" name="Search">
+ <input class="noborderright" type="text" name="q" id="q" autocomplete="off" /><button type="submit" name="sa" class="btnSmall" value="search">Suchen</button>
+ </form>
+ <!-- Ende Google CSE -->
+ </div>
+ </div>
+
+ <div id="navigationSecondary">
+ <ul>
+ <li><a title="Neueste Beiträge" href="https://www.lokalkompass.de/action/m/new/" >Neueste</a></li>
+ <li><a href="https://www.lokalkompass.de/themen/bildergalerie.html">Galerien</a></li>
+ <li><a title="Sport" href="https://www.lokalkompass.de/sport/" >Sport</a></li>
+ <li><a title="Kultur" href="https://www.lokalkompass.de/kultur/" >Kultur</a></li>
+ <li><a title="Politik" href="https://www.lokalkompass.de/politik/" >Politik</a></li>
+ <li><a title="Natur" href="https://www.lokalkompass.de/natur/" >Natur</a></li>
+ <li><a title="Ratgeber" href="https://www.lokalkompass.de/ratgeber/" >Ratgeber</a></li>
+ <li><a title="Leute" href="https://www.lokalkompass.de/leute/" >Leute</a></li>
+ <li><a title="Vereine" href="https://www.lokalkompass.de/vereine/" >Vereine</a></li>
+ <li><a title="Spaß" href="https://www.lokalkompass.de/spass/" >Spaß</a></li>
+ <li><a title="Termine" href="https://www.lokalkompass.de/veranstaltungen/" >Termine</a></li>
+ <li><a title="Termine" href="https://www.lokalkompass.de/marktplatz/" >Marktplatz</a></li>
+ <li><a href="https://www.lokalkompass.de/themen/reisekompass.html" onclick="var w=window.open('https://www.lokalkompass.de/themen/reisekompass.html', 'reisekompass'); return false;">Reise</a></li>
+ </ul>
+ </div>
+ </div>
+
+ <!--Breadcrumb_start-->
+ <div id="breadcrumbs" class="left" style="width: 700px;">
+ <div xmlns:v="http://rdf.data-vocabulary.org/#"><span typeof="v:Breadcrumb"><a href="https://www.lokalkompass.de/" rel="v:url" property="v:title">Ihre Region</a></span><a href="https://www.lokalkompass.de/themen/">Themen</a><a href="https://www.lokalkompass.de/themen/kirche.html">kirche</a>Bilder</div> </div>
+
+ <div class="right" style="width: 260px; padding-top: 0px;">
+ </div>
+ <div class="clearboth"></div>
+ <!--Breadcrumb_end-->
+
+ <div id="oms_billboard" class="adBillboard marginBottomL">
+ <script type="text/javascript">
+ googletag.cmd.push(function() { googletag.display('oms_billboard'); });
+ </script>
+ </div>
+
+ <div>
+ <script type="text/javascript">wbox();</script>
+ </div>
+
+
+ <!-- Template Begin -->
+ <div id="content">
+ <div id="contentArea">
+
+ <h1 class="metaLikeL">Gut bewertete Bilder zum Thema kirche</h1> <div class="spacerM"></div>
+
+ <div class="left" style="margin: 0 0 20px 0px; width: px; word-wrap: break-word;"><div class="mediadbgalleryfloat" style="margin: 0; float: none; display: block;">
+ <div style="width: 405px; height: 260px;" class="mediadbgallery relative">
+ <span class="edge"></span>
+ <div class="container">
+ <div style="overflow: hidden; width: 405px; height: 260px; position: relative;"><a href="https://www.lokalkompass.de/bildergalerie/kirche-m3371115.html" class="pointer" title="...für einen wirklich gelungenen ABEND! Fritz, unser Buchdrucker ... danke, Dir und ALLEN Anderen für einen tollen Abend! LG aus dem Ruhrgebiet!" > <img src="https://d1mquhhbkq1b1r.cloudfront.net/2016/02/19/3371115_web.jpg?1455922477" class="noborder" style="position: absolute; top: -22px; right: 0px; width: 405px; height: 304px; border: 0;" alt="...für einen wirklich gelungenen ABEND! Fritz, unser Buchdrucker ... danke, Dir und ALLEN Anderen für einen tollen Abend! LG aus dem Ruhrgebiet!" title="...für einen wirklich gelungenen ABEND! Fritz, unser Buchdrucker ... danke, Dir und ALLEN Anderen für einen tollen Abend! LG aus dem Ruhrgebiet!" /></a></div></div>
+
+
+
+ <span class="metaEdit"><span class="metaLike recent">28</span></span> </div>
+ </div>
+
+ </div><div class="left" style="width: 220px;"><div class="left" style="margin: 0 0 20px 20px; width: px; word-wrap: break-word;"><div class="mediadbgalleryfloat" style="margin: 0; float: none; display: block;">
+ <div style="width: 200px; height: 120px;" class="mediadbgallery relative">
+ <span class="edge"></span>
+ <div class="container">
+ <div style="overflow: hidden; width: 200px; height: 120px; position: relative;"><a href="https://www.lokalkompass.de/bildergalerie/kirche-m4252885.html" class="pointer" title="ertönten am 21.01.18 in der St. Vincentius-Kirche in Dinslaken aus dieser Konzertharfe Style 23 von Lyon & Healy, Chikago;" > <img src="https://d1mquhhbkq1b1r.cloudfront.net/2018/01/22/4252885_web.jpg?1516611723" class="noborder" style="position: absolute; top: -102px; right: 0px; width: 200px; height: 323px; border: 0;" alt="ertönten am 21.01.18 in der St. Vincentius-Kirche in Dinslaken aus dieser Konzertharfe Style 23 von Lyon & Healy, Chikago;" title="ertönten am 21.01.18 in der St. Vincentius-Kirche in Dinslaken aus dieser Konzertharfe Style 23 von Lyon & Healy, Chikago;" /></a></div></div>
+
+
+
+ <span class="metaEdit"><span class="metaLike recent">27</span></span> </div>
+ </div>
+
+ </div><div class="left" style="margin: 0 0 20px 20px; width: px; word-wrap: break-word;"><div class="mediadbgalleryfloat" style="margin: 0; float: none; display: block;">
+ <div style="width: 200px; height: 120px;" class="mediadbgallery relative">
+ <span class="edge"></span>
+ <div class="container">
+ <div style="overflow: hidden; width: 200px; height: 120px; position: relative;"><a href="https://www.lokalkompass.de/bildergalerie/kirche-m3089904.html" class="pointer" title="Mit einem lieben Gruss von Bruni" > <img src="https://d1mquhhbkq1b1r.cloudfront.net/2015/08/09/3089904_preview.jpg?1439076602" class="noborder" style="position: absolute; top: -90px; right: 0px; width: 200px; height: 299px; border: 0;" alt="Mit einem lieben Gruss von Bruni" title="Mit einem lieben Gruss von Bruni" /></a></div></div>
+
+
+
+ <span class="metaEdit"><span class="metaLike recent">25</span></span> </div>
+ </div>
+
+ </div></div><div class="left" style="width: 220px;"><div class="left" style="margin: 0 0 20px 0px; width: px; word-wrap: break-word;"><div class="mediadbgalleryfloat" style="margin: 0; float: none; display: block;">
+ <div style="width: 200px; height: 120px;" class="mediadbgallery relative">
+ <span class="edge"></span>
+ <div class="container">
+ <div style="overflow: hidden; width: 200px; height: 120px; position: relative;"><a href="https://www.lokalkompass.de/bildergalerie/kirche-m3737573.html" class="pointer" title="Kleiner Blick" > <img src="https://d1mquhhbkq1b1r.cloudfront.net/2016/11/18/3737573_web.jpg?1479470435" class="noborder" style="position: absolute; top: -118px; right: 0px; width: 200px; height: 355px; border: 0;" alt="Kleiner Blick" title="Kleiner Blick" /></a></div></div>
+
+
+
+ <span class="metaEdit"><span class="metaLike recent">22</span></span> </div>
+ </div>
+
+ </div><div class="left" style="margin: 0 0 20px 0px; width: px; word-wrap: break-word;"><div class="mediadbgalleryfloat" style="margin: 0; float: none; display: block;">
+ <div style="width: 200px; height: 120px;" class="mediadbgallery relative">
+ <span class="edge"></span>
+ <div class="container">
+ <div style="overflow: hidden; width: 200px; height: 120px; position: relative;"><a href="https://www.lokalkompass.de/bildergalerie/kirche-m3608147.html" class="pointer" title="Kirche Lippborg" > <img src="https://d1mquhhbkq1b1r.cloudfront.net/2016/08/13/3608147_preview.jpg?1471118606" class="noborder" style="position: absolute; top: -7px; right: 0px; width: 200px; height: 133px; border: 0;" alt="Kirche Lippborg" title="Kirche Lippborg" /></a></div></div>
+
+
+
+ <span class="metaEdit"><span class="metaLike recent">22</span></span> </div>
+ </div>
+
+ </div></div><div class="left" style="margin: 0 0 20px 0px; width: px; word-wrap: break-word;"><div class="mediadbgalleryfloat" style="margin: 0; float: none; display: block;">
+ <div style="width: 405px; height: 260px;" class="mediadbgallery relative">
+ <span class="edge"></span>
+ <div class="container">
+ <div style="overflow: hidden; width: 405px; height: 260px; position: relative;"><a href="https://www.lokalkompass.de/bildergalerie/kirche-m3722838.html" class="pointer" title="Viel erzählt es uns..." > <img src="https://d1mquhhbkq1b1r.cloudfront.net/2016/11/06/3722838_web.jpg?1478425249" class="noborder" style="position: absolute; top: -22px; right: 0px; width: 405px; height: 304px; border: 0;" alt="Viel erzählt es uns..." title="Viel erzählt es uns..." /></a></div></div>
+
+
+
+ <span class="metaEdit"><span class="metaLike recent">21</span></span> </div>
+ </div>
+
+ </div><div class="left" style="margin: 0 0 20px 0px; width: px; word-wrap: break-word;"><div class="mediadbgalleryfloat" style="margin: 0; float: none; display: block;">
+ <div style="width: 405px; height: 260px;" class="mediadbgallery relative">
+ <span class="edge"></span>
+ <div class="container">
+ <div style="overflow: hidden; width: 405px; height: 260px; position: relative;"><a href="https://www.lokalkompass.de/bildergalerie/kirche-m3371138.html" class="pointer" title="...ein Nachtwächter, ein "BUCH-Druck-Gutenberg-Jünger", tolle LK´ler und lecker Essen + Trinken ... ein einfach GLÜCK mit dem Wetter ... in Neukirchen-Vluyn, mit FRITZE und CO. MERCI ... und GUTE NACHT!" > <img src="https://d1mquhhbkq1b1r.cloudfront.net/2016/02/20/3371138_web.jpg?1455924004" class="noborder" style="position: absolute; top: -140px; right: 0px; width: 405px; height: 540px; border: 0;" alt="...ein Nachtwächter, ein 'BUCH-Druck-Gutenberg-Jünger', tolle LK´ler und lecker Essen + Trinken ... ein einfach GLÜCK mit dem Wetter ... in Neukirchen-Vluyn, mit FRITZE und CO. MERCI ... und GUTE NACHT!" title="...ein Nachtwächter, ein 'BUCH-Druck-Gutenberg-Jünger', tolle LK´ler und lecker Essen + Trinken ... ein einfach GLÜCK mit dem Wetter ... in Neukirchen-Vluyn, mit FRIT
ZE und CO. MERCI ... und GUTE NACHT!" /></a></div></div>
+
+
+
+ <span class="metaEdit"><span class="metaLike recent">21</span></span> </div>
+ </div>
+
+ </div><div class="left" style="width: 220px;"><div class="left" style="margin: 0 0 20px 20px; width: px; word-wrap: break-word;"><div class="mediadbgalleryfloat" style="margin: 0; float: none; display: block;">
+ <div style="width: 200px; height: 120px;" class="mediadbgallery relative">
+ <span class="edge"></span>
+ <div class="container">
+ <div style="overflow: hidden; width: 200px; height: 120px; position: relative;"><a href="https://www.lokalkompass.de/bildergalerie/kirche-m4247987.html" class="pointer" title="...die TAGE mal´ in Essen-ALTENESSEN gewesen, in der "ALTEN Kirche" dort...! In dieser "Kulturkirche" finden viele verschiedene TOLLE Dinge statt... die TAGE spielte AEHAM AHMAD dort... ein syrischer Flüchtling, DER "Trümmer-Pianist".... interessant ...!" > <img src="https://d1mquhhbkq1b1r.cloudfront.net/2018/01/17/4247987_preview.jpg?1516222301" class="noborder" style="position: absolute; top: -15px; right: 0px; width: 200px; height: 150px; border: 0;" alt="...die TAGE mal´ in Essen-ALTENESSEN gewesen, in der 'ALTEN Kirche' dort...! In dieser 'Kulturkirche' finden viele verschiedene TOLLE Dinge statt... die TAGE spielte AEHAM AHMAD dort... ein syrischer Flüchtling, DER 'Trümmer-Pianist'.... interessant ...!" title="...die TAGE mal´ in Essen-ALTENESSEN gewesen, in der 'ALTEN Kirche
' dort...! In dieser 'Kulturkirche' finden viele verschiedene TOLLE Dinge statt... die TAGE spielte AEHAM AHMAD dort... ein syrischer Flüchtling, DER 'Trümmer-Pianist'.... interessant ...!" /></a></div></div>
+
+
+
+ <span class="metaEdit"><span class="metaLike recent">20</span></span> </div>
+ </div>
+
+ </div><div class="left" style="margin: 0 0 20px 20px; width: px; word-wrap: break-word;"><div class="mediadbgalleryfloat" style="margin: 0; float: none; display: block;">
+ <div style="width: 200px; height: 120px;" class="mediadbgallery relative">
+ <span class="edge"></span>
+ <div class="container">
+ <div style="overflow: hidden; width: 200px; height: 120px; position: relative;"><a href="https://www.lokalkompass.de/bildergalerie/kirche-m2225670.html" class="pointer" title="Die Kirche in Emmerich-Hoch Elten. Die beiden Steelen markieren eine Sichtachse. Im Rücken kann man bis Kleve schauen." > <img src="https://d1mquhhbkq1b1r.cloudfront.net/2014/03/22/2225670_preview.jpg?1395506696" class="noborder" style="position: absolute; top: -74px; right: 0px; width: 200px; height: 267px; border: 0;" alt="Die Kirche in Emmerich-Hoch Elten. Die beiden Steelen markieren eine Sichtachse. Im Rücken kann man bis Kleve schauen." title="Die Kirche in Emmerich-Hoch Elten. Die beiden Steelen markieren eine Sichtachse. Im Rücken kann man bis Kleve schauen." /></a></div></div>
+
+
+
+ <span class="metaEdit"><span class="metaLike recent">20</span></span> </div>
+ </div>
+
+ </div></div><div class="left" style="width: 220px;"><div class="left" style="margin: 0 0 20px 0px; width: px; word-wrap: break-word;"><div class="mediadbgalleryfloat" style="margin: 0; float: none; display: block;">
+ <div style="width: 200px; height: 120px;" class="mediadbgallery relative">
+ <span class="edge"></span>
+ <div class="container">
+ <div style="overflow: hidden; width: 200px; height: 120px; position: relative;"><a href="https://www.lokalkompass.de/bildergalerie/kirche-m3732275.html" class="pointer" title="Fühle ich hier innere Ruhe." > <img src="https://d1mquhhbkq1b1r.cloudfront.net/2016/11/13/3732275_preview.jpg?1479052420" class="noborder" style="position: absolute; top: -15px; right: 0px; width: 200px; height: 150px; border: 0;" alt="Fühle ich hier innere Ruhe." title="Fühle ich hier innere Ruhe." /></a></div></div>
+
+
+
+ <span class="metaEdit"><span class="metaLike recent">19</span></span> </div>
+ </div>
+
+ </div><div class="left" style="margin: 0 0 20px 0px; width: px; word-wrap: break-word;"><div class="mediadbgalleryfloat" style="margin: 0; float: none; display: block;">
+ <div style="width: 200px; height: 120px;" class="mediadbgallery relative">
+ <span class="edge"></span>
+ <div class="container">
+ <div style="overflow: hidden; width: 200px; height: 120px; position: relative;"><a href="https://www.lokalkompass.de/bildergalerie/kirche-m4068965.html" class="pointer" title="Die Kugel zeigt es uns... es ist die Basilika St. Margareta in Düsseldorf-Gerresheim!" > <img src="https://d1mquhhbkq1b1r.cloudfront.net/2017/08/13/4068965_preview.jpg?1502654426" class="noborder" style="position: absolute; top: -38px; right: 0px; width: 200px; height: 196px; border: 0;" alt="Die Kugel zeigt es uns... es ist die Basilika St. Margareta in Düsseldorf-Gerresheim!" title="Die Kugel zeigt es uns... es ist die Basilika St. Margareta in Düsseldorf-Gerresheim!" /></a></div></div>
+
+
+
+ <span class="metaEdit"><span class="metaLike recent">18</span></span> </div>
+ </div>
+
+ </div></div><div class="left" style="margin: 0 0 20px 0px; width: px; word-wrap: break-word;"><div class="mediadbgalleryfloat" style="margin: 0; float: none; display: block;">
+ <div style="width: 405px; height: 260px;" class="mediadbgallery relative">
+ <span class="edge"></span>
+ <div class="container">
+ <div style="overflow: hidden; width: 405px; height: 260px; position: relative;"><a href="https://www.lokalkompass.de/bildergalerie/kirche-m3084457.html" class="pointer" title="Margaretenkirche Methler" > <img src="https://d1mquhhbkq1b1r.cloudfront.net/2015/08/05/3084457_web.jpg?1438796721" class="noborder" style="position: absolute; top: -5px; right: 0px; width: 405px; height: 270px; border: 0;" alt="Margaretenkirche Methler" title="Margaretenkirche Methler" /></a></div></div>
+
+
+
+ <span class="metaEdit"><span class="metaLike recent">18</span></span> </div>
+ </div>
+
+ </div><div class="clearleft"></div>
+ <div class="spacerM"></div><div class="pagination"><div class="pageContainer"><button class="lowprofile" disabled="disabled" onclick="return false;"><i class="fa fa-lg fa-chevron-left"></i></button><span class="pages"><a class="active" href="https://www.lokalkompass.de/bilder/kirche.html#paginaTop">1</a><a href="https://www.lokalkompass.de/bilder/kirche.html/action/page/2/#paginaTop">2</a><a href="https://www.lokalkompass.de/bilder/kirche.html/action/page/3/#paginaTop">3</a><a href="https://www.lokalkompass.de/bilder/kirche.html/action/page/4/#paginaTop">4</a><a href="https://www.lokalkompass.de/bilder/kirche.html/action/page/5/#paginaTop">5</a><span>...</span><a href="https://www.lokalkompass.de/bilder/kirche.html/action/page/47/#paginaTop">47</a></span><button class="lowprofile" onclick="window.location = 'https://www.lokalkompass.de/bilder/kirche.html/action/page/2/#paginaTop';"><i class="fa fa-lg fa-chevron-right"></i></button></div></div> </div>
+
+ <div id="sidebar">
+ <div class="teaserBox ">
+ <div class="h3 teaser h3_teaser"><span>Bilder zu kirche von:</span></div>
+ <div class="clearboth"></div>
+ <div class="userTeaser">
+ <div class="mediadbgalleryfloat" style="margin: 2px 5px 0 0;">
+ <div style="width: 42px; height: 42px;" class="mediadbgallery relative">
+ <span class="edge"></span>
+ <div class="container">
+ <div style="overflow: hidden; width: 42px; height: 42px; position: relative;"><a href="https://www.lokalkompass.de/duesseldorf/profile/margot-kluetsch-61807.html" class="pointer" > <img src="https://d1mquhhbkq1b1r.cloudfront.net/2018/02/28/4311363_icon.jpg?1519831618" class="noborder" style="position: absolute; top: -7px; right: 0px; width: 42px; height: 56px; border: 0;" alt="Margot Klütsch" title="Margot Klütsch" /></a></div></div>
+
+
+
+ </div>
+ </div>
+
+ <a href="https://www.lokalkompass.de/duesseldorf/profile/margot-kluetsch-61807.html">Margot Klütsch</a>
+ <br />
+ <span class="metaLike"></span>233 Bilder <span class="recent"></span>
+ <div class="clearboth"></div>
+ </div><div class="userTeaser">
+ <div class="mediadbgalleryfloat" style="margin: 2px 5px 0 0;">
+ <div style="width: 42px; height: 42px;" class="mediadbgallery relative">
+ <span class="edge"></span>
+ <div class="container">
+ <div style="overflow: hidden; width: 42px; height: 42px; position: relative;"><a href="https://www.lokalkompass.de/schermbeck/profile/elisabeth-jagusch-42530.html" class="pointer" > <img src="https://d1mquhhbkq1b1r.cloudfront.net/2016/04/27/3453865_icon.jpg?1461751949" class="noborder" style="position: absolute; top: -4px; right: 0px; width: 42px; height: 49px; border: 0;" alt="Elisabeth Jagusch" title="Elisabeth Jagusch" /></a></div></div>
+
+
+
+ </div>
+ </div>
+
+ <a href="https://www.lokalkompass.de/schermbeck/profile/elisabeth-jagusch-42530.html">Elisabeth Jagusch</a>
+ <br />
+ <span class="metaLike"></span>36 Bilder <span class="recent"></span>
+ <div class="clearboth"></div>
+ </div><div class="userTeaser">
+ <div class="mediadbgalleryfloat" style="margin: 2px 5px 0 0;">
+ <div style="width: 42px; height: 42px;" class="mediadbgallery relative">
+ <span class="edge"></span>
+ <div class="container">
+ <div style="overflow: hidden; width: 42px; height: 42px; position: relative;"><a href="https://www.lokalkompass.de/bochum/profile/gudrun-wirbitzky-29748.html" class="pointer" > <img src="https://d1mquhhbkq1b1r.cloudfront.net/2018/05/01/4495935_icon.jpg?1525199904" class="noborder" style="position: absolute; top: -9px; right: 0px; width: 42px; height: 60px; border: 0;" alt="Gudrun Wirbitzky" title="Gudrun Wirbitzky" /></a></div></div>
+
+
+
+ </div>
+ </div>
+
+ <a href="https://www.lokalkompass.de/bochum/profile/gudrun-wirbitzky-29748.html">Gudrun Wirbitzky</a>
+ <br />
+ <span class="metaLike"></span>35 Bilder <span class="recent"></span>
+ <div class="clearboth"></div>
+ </div><div class="userTeaser">
+ <div class="mediadbgalleryfloat" style="margin: 2px 5px 0 0;">
+ <div style="width: 42px; height: 42px;" class="mediadbgallery relative">
+ <span class="edge"></span>
+ <div class="container">
+ <div style="overflow: hidden; width: 42px; height: 42px; position: relative;"><a href="https://www.lokalkompass.de/duesseldorf/profile/bruni-rentzing-25980.html" class="pointer" > <img src="https://d1mquhhbkq1b1r.cloudfront.net/2018/03/14/4329566_icon.jpg?1521050080" class="noborder" style="position: absolute; top: 0px; right: -14px; width: 56px; height: 42px; border: 0;" alt="Bruni Rentzing" title="Bruni Rentzing" /></a></div></div>
+
+
+
+ </div>
+ </div>
+
+ <a href="https://www.lokalkompass.de/duesseldorf/profile/bruni-rentzing-25980.html">Bruni Rentzing</a>
+ <br />
+ <span class="metaLike"></span>24 Bilder <span class="recent"></span>
+ <div class="clearboth"></div>
+ </div><div class="userTeaser">
+ <div class="mediadbgalleryfloat" style="margin: 2px 5px 0 0;">
+ <div style="width: 42px; height: 42px;" class="mediadbgallery relative">
+ <span class="edge"></span>
+ <div class="container">
+ <div style="overflow: hidden; width: 42px; height: 42px; position: relative;"><a href="https://www.lokalkompass.de/menden/profile/peter-gerber-111.html" class="pointer" > <img src="https://d1mquhhbkq1b1r.cloudfront.net/2016/10/12/3694668_icon.jpg?1476280620" class="noborder" style="position: absolute; top: 0px; right: 0px; width: 42px; height: 42px; border: 0;" alt="Peter Gerber" title="Peter Gerber" /></a></div></div>
+
+
+
+ </div>
+ </div>
+
+ <a href="https://www.lokalkompass.de/menden/profile/peter-gerber-111.html">Peter Gerber</a>
+ <br />
+ <span class="metaLike"></span>21 Bilder <span class="recent"></span>
+ <div class="clearboth"></div>
+ </div>und 75 weiteren Bürgerreportern<br /></div><div class="teaserBox">
+ <div class="box coverage">
+ <span class="bold participate">Diese Seite weiterempfehlen:</span><div class="spacerS"></div> <ul class="socialBar">
+ <li><a class="facebook-bg" title="Beitrag auf Facebook teilen" href="https://www.facebook.com/sharer/sharer.php?u=https://www.lokalkompass.de/bilder/kirche.html&t=Auf lokalkompass.de gelesen:" onclick="javascript:window.open(this.href, '', 'menubar=no,toolbar=no,resizable=yes,scrollbars=yes,height=600,width=600');return false;" rel="nofollow"><i class="fa fa-fw fa-lg fa-facebook-official"></i>Teilen</a></li><li><a class="twitter-bg" title="Beitrag auf Twitter weiterempfehlen" href="https://twitter.com/intent/tweet?url=https://www.lokalkompass.de/bilder/kirche.html&text=Bilder+kirche%3A+554+gut+bewertete+Fotos+der+Lokalkompass+B%C3%BCrgerreporter&via=lokalkompass_de" onclick="javascript:window.open(this.href, '', 'menubar=no,toolbar=no,resizable=yes,scrollbars=yes,height=600,width=600');return false;" rel="nofollow"><i class="fa fa-fw fa-lg fa-twitter"></i>Twittern</a></li><li><a class="googleplus-bg" title="Beitrag auf Google+ weiterempfehlen" href="https://plus.goog
le.com/share?url=https://www.lokalkompass.de/bilder/kirche.html" onclick="javascript:window.open(this.href, '', 'menubar=no,toolbar=no,resizable=yes,scrollbars=yes,height=600,width=600');return false;" rel="nofollow"><i class="fa fa-fw fa-lg fa-google-plus"></i>Teilen</a></li> </ul>
+ <div class="clearboth"></div>
+ </div>
+ </div>
+ </div>
+ <div class="clearboth"></div>
+ </div> <!-- Template End -->
+
+ <div id="footer">
+ <div class="linkbox">
+ <div class="label">Unternehmen</div>
+ <span class="link" onclick="var w = window.open('http://www.wvw-ora-anzeigenblaetter.de/unternehmen/aktuelles/', 'wvwpopup');">Was gibts Neues</span><div class="spacerVertical">|</div>
+ <span class="link" onclick="var w = window.open('http://www.wvw-ora-anzeigenblaetter.de/jobs-karriere/arbeiten-mit-uns/', 'wvwpopup');">Jobs & Karriere</span>
+
+ <div class="separator"></div>
+ <div class="label">Informationen</div>
+ <span class="link" onclick="window.location.href = 'https://www.lokalkompass.de/hilfe/';">Hilfe</span><div class="spacerVertical">|</div>
+ <span class="link" onclick="window.location.href = 'https://www.lokalkompass.de/verhaltenskodex/';">Verhaltenskodex</span><div class="spacerVertical">|</div>
+ <span class="link" onclick="window.location.href = 'https://www.lokalkompass.de/datenschutz/';">Datenschutz</span><div class="spacerVertical">|</div>
+ <span class="link" onclick="window.location.href = 'https://www.lokalkompass.de/agb/';">AGB</span><div class="spacerVertical">|</div>
+ <span class="link" onclick="window.location.href = 'https://www.lokalkompass.de/impressum/';">Impressum</span>
+
+ <div class="separator"></div>
+ <div class="label">Kontakt</div>
+ <span class="link" onclick="var w = window.open('http://www.wvw-ora-anzeigenblaetter.de/unternehmen/geschaeftsstellen/', 'wvwpopup');">Anschriften</span>
+
+ <div class="separator"></div>
+ <div class="label">Dienste</div>
+ <span class="link" onclick="jQuery.cookie('responsive', 1, { path: '/' }); jQuery.cookie('responsive-everywhere', 1, { path: '/' }); window.location.href = 'https://www.lokalkompass.de/bilder/kirche.html';">Mobile Webseite</span>
+ </div>
+
+ <div class="separator"></div>
+ <div class="spacerXXL"></div>
+ <div class="small">
+ Powered by Gogol Publishing 2002-2018 – Dieses Onlineportal mit dem integrierten <a rel="nofollow" href="http://www.gogol-publishing.de/informationen-zum-unternehmen-gogol-medien/leserreporter/">Leserreporter-Modul</a> wird mit Gogol Publishing produziert - dem einfachen Redaktionssystem für Anzeigenblätter und Lokalzeitungen. </div>
+ <a class="arrowUpDouble right participate" href="#header">Zum Seitenanfang</a>
+ </div>
+</div>
+<div id="oms_ist">
+ <script type="text/javascript">
+ googletag.cmd.push(function() { googletag.display('oms_ist'); });
+ </script>
+</div>
+<script type="text/javascript" src="https://www.lokalkompass.de/tmp/js/default-603796eceb38b89efa08764ed237d85b.js"></script>
+
+<script type="text/javascript">
+sitecomplete();
+</script>
+<!-- Google Analytics Opt-out -->
+<script type="text/javascript">
+ if (jQuery.cookie('ga-opt-out') === '1') {
+ window['ga-disable-UA-38121643-1'] = true;
+ window['ga-disable-UA-38121643-2'] = true;
+ }
+
+ jQuery(function() {
+ jQuery('[data-ga-optout-enable]').on('click', function() {
+ jQuery.cookie('ga-opt-out', '1', { expires: 365, path: '/' });
+ });
+
+ jQuery('[data-ga-optout-disable]').on('click', function() {
+ jQuery.cookie('ga-opt-out', '0', { expires: 365, path: '/' });
+ });
+ });
+ </script>
+<!-- Google Analytics Opt-out Ende -->
+
+<!-- Google Analytics -->
+<script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-38121643-1']);
+ _gaq.push(['_setDomainName', 'lokalkompass.de']);
+ _gaq.push(['_setCustomVar', 1, 'UserType', '0', 2]);
+ _gaq.push (['_gat._anonymizeIp']);
+ _gaq.push(['_trackPageview']);
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+ })();
+
+ </script>
+<!-- Google Analytics Ende -->
+
+<!-- Google Analytics Universal -->
+<script type="text/javascript">
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+
+ ga('create', 'UA-38121643-2', 'auto');
+ ga('set', 'anonymizeIp', true);
+
+ ga('set', 'dimension1', 'Visitor');
+ ga('set', 'dimension2', 'Sonstige');
+ ga('send', 'pageview');
+ </script>
+<!-- End Google Analytics Universal -->
+<!-- No IVW-Body -->
+
+
+
+
+</body>
+</html>
[2/3] any23 git commit: cleaned up annoying logging/console output
Posted by ha...@apache.org.
cleaned up annoying logging/console output
Project: http://git-wip-us.apache.org/repos/asf/any23/repo
Commit: http://git-wip-us.apache.org/repos/asf/any23/commit/159aeb48
Tree: http://git-wip-us.apache.org/repos/asf/any23/tree/159aeb48
Diff: http://git-wip-us.apache.org/repos/asf/any23/diff/159aeb48
Branch: refs/heads/master
Commit: 159aeb489473f600213142a746d39a49e3d3548b
Parents: 4e3011a
Author: Hans <fi...@gmail.com>
Authored: Thu Aug 2 12:46:44 2018 -0500
Committer: Hans <fi...@gmail.com>
Committed: Thu Aug 2 12:46:44 2018 -0500
----------------------------------------------------------------------
.../java/org/apache/any23/cli/BaseTool.java | 83 ++++++++++++++++++++
.../any23/cli/ExtractorDocumentation.java | 44 +++++++----
.../org/apache/any23/cli/MicrodataParser.java | 17 +++-
.../java/org/apache/any23/cli/MimeDetector.java | 17 +++-
.../org/apache/any23/cli/PluginVerifier.java | 18 ++++-
.../main/java/org/apache/any23/cli/Rover.java | 12 ++-
.../java/org/apache/any23/cli/ToolRunner.java | 13 ++-
.../java/org/apache/any23/cli/VocabPrinter.java | 18 ++++-
.../apache/any23/cli/MicrodataParserTest.java | 2 +-
.../org/apache/any23/cli/MimeDetectorTest.java | 4 +-
.../java/org/apache/any23/cli/RoverTest.java | 2 -
.../org/apache/any23/cli/SimpleRoverTest.java | 38 ++++-----
.../java/org/apache/any23/cli/ToolTestBase.java | 7 +-
.../org/apache/any23/cli/YAMLRoverTest.java | 9 ++-
.../extractor/SingleDocumentExtraction.java | 4 +-
.../html/AbstractExtractorTestCase.java | 11 ++-
.../extractor/rdfa/RDFa11ExtractorTest.java | 4 +-
.../apache/any23/vocab/RDFSchemaUtilsTest.java | 12 +--
.../officescraper/ExcelExtractorTest.java | 2 +-
19 files changed, 245 insertions(+), 72 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/any23/blob/159aeb48/cli/src/main/java/org/apache/any23/cli/BaseTool.java
----------------------------------------------------------------------
diff --git a/cli/src/main/java/org/apache/any23/cli/BaseTool.java b/cli/src/main/java/org/apache/any23/cli/BaseTool.java
new file mode 100644
index 0000000..d9a82f5
--- /dev/null
+++ b/cli/src/main/java/org/apache/any23/cli/BaseTool.java
@@ -0,0 +1,83 @@
+package org.apache.any23.cli;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintStream;
+
+abstract class BaseTool implements Tool {
+
+ abstract PrintStream getOut();
+ abstract void setOut(PrintStream out);
+
+ void run(boolean concise) throws Exception {
+ PrintStream out = concise(getOut(), concise);
+ setOut(out);
+ try {
+ run();
+ } finally {
+ close(out);
+ }
+ }
+
+ private static void close(PrintStream stream) {
+ if (stream != null && stream != System.out && stream != System.err) {
+ try {
+ stream.close();
+ } catch (Throwable th) {
+ //ignore
+ }
+ }
+ }
+
+ private static PrintStream concise(PrintStream out, boolean concise) {
+ return (concise && (out == System.out || out == System.err)) ? new ConcisePrintStream(out)
+ : (out instanceof ConcisePrintStream ? ((ConcisePrintStream) out).out : out);
+ }
+
+ private static final class ConcisePrintStream extends PrintStream {
+
+ private PrintStream out;
+
+ private ConcisePrintStream(PrintStream out) {
+ super(new OutputStream() {
+ StringBuilder sb = new StringBuilder();
+ int lineCount;
+ boolean truncated = false;
+ @Override
+ public void write(int b) throws IOException {
+ if (sb == null) {
+ throw new IOException("stream closed");
+ }
+ if (b == '\n') {
+ lineCount++;
+ }
+ if (lineCount == 0 && sb.length() < 200) {
+ sb.append((char)b);
+ } else if (!Character.isWhitespace(b)) {
+ truncated = true;
+ }
+ }
+
+ @Override
+ public void close() {
+ if (sb == null) {
+ return;
+ }
+ if (truncated) {
+ sb.append("...");
+ }
+ if (lineCount > 1) {
+ sb.append("\n...\n[Suppressed ").append(lineCount).append(" lines of output.]");
+ }
+
+ out.println(sb);
+ sb = null;
+ BaseTool.close(out);
+ }
+ }, true);
+ this.out = out;
+ }
+
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/any23/blob/159aeb48/cli/src/main/java/org/apache/any23/cli/ExtractorDocumentation.java
----------------------------------------------------------------------
diff --git a/cli/src/main/java/org/apache/any23/cli/ExtractorDocumentation.java b/cli/src/main/java/org/apache/any23/cli/ExtractorDocumentation.java
index f0fbeea..d531c2d 100644
--- a/cli/src/main/java/org/apache/any23/cli/ExtractorDocumentation.java
+++ b/cli/src/main/java/org/apache/any23/cli/ExtractorDocumentation.java
@@ -30,13 +30,14 @@ import org.apache.any23.extractor.ExtractorFactory;
import org.apache.any23.extractor.ExtractorRegistry;
import java.io.IOException;
+import java.io.PrintStream;
/**
* This class provides some command-line documentation
* about available extractors and their usage.
*/
@Parameters( commandNames = { "extractor" }, commandDescription= "Utility for obtaining documentation about metadata extractors.")
-public class ExtractorDocumentation implements Tool {
+public class ExtractorDocumentation extends BaseTool {
@Parameter( names = { "-l", "--list" }, description = "shows the names of all available extractors" )
private boolean showList;
@@ -50,6 +51,19 @@ public class ExtractorDocumentation implements Tool {
@Parameter( names = { "-a", "--all" }, description = "shows a report about all available extractors" )
private boolean showAll;
+ private PrintStream out = System.out;
+
+ @Override
+ PrintStream getOut() {
+ return out;
+ }
+
+ @Override
+ void setOut(PrintStream out) {
+ this.out = out;
+ }
+
+ @Override
public void run() throws Exception {
if (showList) {
printExtractorList(ExtractorRegistryImpl.getInstance());
@@ -78,7 +92,7 @@ public class ExtractorDocumentation implements Tool {
*/
public void printExtractorList(ExtractorRegistry registry) {
for (ExtractorFactory factory : registry.getExtractorGroup()) {
- System.out.println( String.format("%25s [%15s]", factory.getExtractorName(), factory.getExtractorLabel()));
+ out.println(String.format("%25s [%15s]", factory.getExtractorName(), factory.getExtractorLabel()));
}
}
@@ -97,7 +111,7 @@ public class ExtractorDocumentation implements Tool {
if (input == null) {
throw new IllegalArgumentException("Extractor " + extractorName + " provides no example input");
}
- System.out.println(input);
+ out.println(input);
}
/**
@@ -116,7 +130,7 @@ public class ExtractorDocumentation implements Tool {
if (output == null) {
throw new IllegalArgumentException("Extractor " + extractorName + " provides no example output");
}
- System.out.println(output);
+ out.println(output);
}
/**
@@ -131,21 +145,21 @@ public class ExtractorDocumentation implements Tool {
for (String extractorName : registry.getAllNames()) {
ExtractorFactory<?> factory = registry.getFactory(extractorName);
ExampleInputOutput example = new ExampleInputOutput(factory);
- System.out.println("Extractor: " + extractorName);
- System.out.println("\ttype: " + getType(factory));
- System.out.println();
+ out.println("Extractor: " + extractorName);
+ out.println("\ttype: " + getType(factory));
+ out.println();
final String exampleInput = example.getExampleInput();
- if(exampleInput == null) {
- System.out.println("(No Example Available)");
+ if (exampleInput == null) {
+ out.println("(No Example Available)");
} else {
- System.out.println("-------- Example Input --------");
- System.out.println(exampleInput);
- System.out.println("-------- Example Output --------");
+ out.println("-------- Example Input --------");
+ out.println(exampleInput);
+ out.println("-------- Example Output --------");
String output = example.getExampleOutput();
- System.out.println(output == null || output.trim().length() == 0 ? "(No Output Generated)" : output);
+ out.println(output == null || output.trim().length() == 0 ? "(No Output Generated)" : output);
}
- System.out.println("================================");
- System.out.println();
+ out.println("================================");
+ out.println();
}
}
http://git-wip-us.apache.org/repos/asf/any23/blob/159aeb48/cli/src/main/java/org/apache/any23/cli/MicrodataParser.java
----------------------------------------------------------------------
diff --git a/cli/src/main/java/org/apache/any23/cli/MicrodataParser.java b/cli/src/main/java/org/apache/any23/cli/MicrodataParser.java
index 19c59bf..8655c5a 100644
--- a/cli/src/main/java/org/apache/any23/cli/MicrodataParser.java
+++ b/cli/src/main/java/org/apache/any23/cli/MicrodataParser.java
@@ -30,6 +30,7 @@ import org.apache.any23.util.StreamUtils;
import java.io.File;
import java.io.InputStream;
+import java.io.PrintStream;
import java.net.URISyntaxException;
import java.util.LinkedList;
import java.util.List;
@@ -44,7 +45,7 @@ import java.util.regex.Pattern;
* @author Michele Mostarda (mostarda@fbk.eu)
*/
@Parameters( commandNames = { "microdata" }, commandDescription = "Commandline Tool for extracting Microdata from file/HTTP source.")
-public class MicrodataParser implements Tool {
+public class MicrodataParser extends BaseTool {
private static final Pattern HTTP_DOCUMENT_PATTERN = Pattern.compile("^https?://.*");
@@ -57,6 +58,18 @@ public class MicrodataParser implements Tool {
)
private List<DocumentSource> document = new LinkedList<DocumentSource>();
+ private PrintStream out = System.out;
+
+ @Override
+ PrintStream getOut() {
+ return out;
+ }
+
+ @Override
+ void setOut(PrintStream out) {
+ this.out = out;
+ }
+
public void run() throws Exception {
if (document.isEmpty()) {
throw new IllegalArgumentException("No input document URL specified");
@@ -69,7 +82,7 @@ public class MicrodataParser implements Tool {
documentInputInputStream,
documentSource.getDocumentIRI()
);
- org.apache.any23.extractor.microdata.MicrodataParser.getMicrodataAsJSON(tagSoupParser.getDOM(), System.out);
+ org.apache.any23.extractor.microdata.MicrodataParser.getMicrodataAsJSON(tagSoupParser.getDOM(), out);
} finally {
if (documentInputInputStream != null) StreamUtils.closeGracefully(documentInputInputStream);
}
http://git-wip-us.apache.org/repos/asf/any23/blob/159aeb48/cli/src/main/java/org/apache/any23/cli/MimeDetector.java
----------------------------------------------------------------------
diff --git a/cli/src/main/java/org/apache/any23/cli/MimeDetector.java b/cli/src/main/java/org/apache/any23/cli/MimeDetector.java
index c9072cb..d4ec916 100644
--- a/cli/src/main/java/org/apache/any23/cli/MimeDetector.java
+++ b/cli/src/main/java/org/apache/any23/cli/MimeDetector.java
@@ -32,6 +32,7 @@ import org.apache.any23.source.HTTPDocumentSource;
import org.apache.any23.source.StringDocumentSource;
import java.io.File;
+import java.io.PrintStream;
import java.net.URISyntaxException;
import java.util.LinkedList;
import java.util.List;
@@ -44,7 +45,7 @@ import java.util.List;
* @author Michele Mostarda (mostarda@fbk.eu)
*/
@Parameters(commandNames = { "mimes" }, commandDescription = "MIME Type Detector Tool.")
-public class MimeDetector implements Tool{
+public class MimeDetector extends BaseTool {
public static final String FILE_DOCUMENT_PREFIX = "file://";
@@ -59,6 +60,18 @@ public class MimeDetector implements Tool{
)
private List<DocumentSource> document = new LinkedList<DocumentSource>();
+ private PrintStream out = System.out;
+
+ @Override
+ PrintStream getOut() {
+ return out;
+ }
+
+ @Override
+ void setOut(PrintStream out) {
+ this.out = out;
+ }
+
public void run() throws Exception {
if (document.isEmpty()) {
throw new IllegalArgumentException("No input document URL specified");
@@ -71,7 +84,7 @@ public class MimeDetector implements Tool{
documentSource.openInputStream(),
MIMEType.parse(documentSource.getContentType())
);
- System.out.println(mimeType);
+ out.println(mimeType);
}
public static final class MimeDetectorDocumentSourceConverter implements IStringConverter<DocumentSource> {
http://git-wip-us.apache.org/repos/asf/any23/blob/159aeb48/cli/src/main/java/org/apache/any23/cli/PluginVerifier.java
----------------------------------------------------------------------
diff --git a/cli/src/main/java/org/apache/any23/cli/PluginVerifier.java b/cli/src/main/java/org/apache/any23/cli/PluginVerifier.java
index a43065d..ae0868b 100644
--- a/cli/src/main/java/org/apache/any23/cli/PluginVerifier.java
+++ b/cli/src/main/java/org/apache/any23/cli/PluginVerifier.java
@@ -38,7 +38,7 @@ import java.util.List;
* @author Michele Mostarda (mostarda@fbk.eu)
*/
@Parameters(commandNames = { "verify" }, commandDescription = "Utility for plugin management verification.")
-public class PluginVerifier implements Tool {
+public class PluginVerifier extends BaseTool {
private Any23PluginManager pluginManager = Any23PluginManager.getInstance();
@@ -48,6 +48,18 @@ public class PluginVerifier implements Tool {
)
private List<File> pluginsDirs = new LinkedList<>();
+ private PrintStream out = System.out;
+
+ @Override
+ PrintStream getOut() {
+ return out;
+ }
+
+ @Override
+ void setOut(PrintStream out) {
+ this.out = out;
+ }
+
public void run() throws Exception {
if (pluginsDirs.isEmpty()) {
throw new IllegalArgumentException("No plugin directory specified.");
@@ -63,8 +75,8 @@ public class PluginVerifier implements Tool {
final Iterator<ExtractorFactory> plugins = pluginManager.getExtractors();
while (plugins.hasNext()) {
- printPluginData(plugins.next(), System.out);
- System.out.println("------------------------------------------------------------------------");
+ printPluginData(plugins.next(), out);
+ out.println("------------------------------------------------------------------------");
}
}
http://git-wip-us.apache.org/repos/asf/any23/blob/159aeb48/cli/src/main/java/org/apache/any23/cli/Rover.java
----------------------------------------------------------------------
diff --git a/cli/src/main/java/org/apache/any23/cli/Rover.java b/cli/src/main/java/org/apache/any23/cli/Rover.java
index 18f0c06..5b49b39 100644
--- a/cli/src/main/java/org/apache/any23/cli/Rover.java
+++ b/cli/src/main/java/org/apache/any23/cli/Rover.java
@@ -59,7 +59,7 @@ import static java.lang.String.format;
* @author Gabriele Renzi
*/
@Parameters(commandNames = { "rover" }, commandDescription = "Any23 Command Line Tool.")
-public class Rover implements Tool {
+public class Rover extends BaseTool {
private static final List<String> FORMATS = WriterFactoryRegistry.getInstance().getIdentifiers();
@@ -117,6 +117,16 @@ public class Rover implements Tool {
private ExtractionParameters extractionParameters;
+ @Override
+ PrintStream getOut() {
+ return outputStream;
+ }
+
+ @Override
+ void setOut(PrintStream out) {
+ outputStream = out;
+ }
+
protected void configure() {
try {
tripleHandler = WriterFactoryRegistry.getInstance().getWriterInstanceByIdentifier(format, outputStream);
http://git-wip-us.apache.org/repos/asf/any23/blob/159aeb48/cli/src/main/java/org/apache/any23/cli/ToolRunner.java
----------------------------------------------------------------------
diff --git a/cli/src/main/java/org/apache/any23/cli/ToolRunner.java b/cli/src/main/java/org/apache/any23/cli/ToolRunner.java
index b875ec7..a19ecf1 100644
--- a/cli/src/main/java/org/apache/any23/cli/ToolRunner.java
+++ b/cli/src/main/java/org/apache/any23/cli/ToolRunner.java
@@ -69,7 +69,11 @@ public final class ToolRunner {
exit( new ToolRunner().execute( args ) );
}
- public int execute(String...args) throws Exception {
+ public int execute(String... args) throws Exception {
+ return execute(false, args);
+ }
+
+ int execute(boolean concise, String... args) throws Exception {
JCommander commander = new JCommander(this);
commander.setProgramName(System.getProperty("app.name"));
@@ -133,7 +137,12 @@ public final class ToolRunner {
infoStream.println();
try {
- Tool.class.cast( commands.get( parsedCommand ).getObjects().get( 0 ) ).run();
+ Tool tool = Tool.class.cast(commands.get(parsedCommand).getObjects().get(0));
+ if (tool instanceof BaseTool) {
+ ((BaseTool) tool).run(concise);
+ } else {
+ tool.run();
+ }
} catch (Throwable t) {
exit = 1;
error = t;
http://git-wip-us.apache.org/repos/asf/any23/blob/159aeb48/cli/src/main/java/org/apache/any23/cli/VocabPrinter.java
----------------------------------------------------------------------
diff --git a/cli/src/main/java/org/apache/any23/cli/VocabPrinter.java b/cli/src/main/java/org/apache/any23/cli/VocabPrinter.java
index 7fde887..f3126af 100644
--- a/cli/src/main/java/org/apache/any23/cli/VocabPrinter.java
+++ b/cli/src/main/java/org/apache/any23/cli/VocabPrinter.java
@@ -26,19 +26,33 @@ import com.beust.jcommander.IStringConverter;
import com.beust.jcommander.Parameter;
import com.beust.jcommander.Parameters;
+import java.io.PrintStream;
+
/**
* Prints out the vocabulary <i>RDFSchema</i> as <i>NQuads</i>.
*
* @author Michele Mostarda (mostarda@fbk.eu)
*/
@Parameters(commandNames = { "vocab" }, commandDescription = "Prints out the RDF Schema of the vocabularies used by Any23.")
-public class VocabPrinter implements Tool {
+public class VocabPrinter extends BaseTool {
@Parameter(names = { "-f", "--format" }, description = "Vocabulary output format", converter = RDFFormatConverter.class)
private RDFFormat format = RDFFormat.NQUADS;
+ private PrintStream out = System.out;
+
+ @Override
+ PrintStream getOut() {
+ return out;
+ }
+
+ @Override
+ void setOut(PrintStream out) {
+ this.out = out;
+ }
+
public void run() throws Exception {
- RDFSchemaUtils.serializeVocabularies(format, System.out);
+ RDFSchemaUtils.serializeVocabularies(format, out);
}
public static final class RDFFormatConverter implements
http://git-wip-us.apache.org/repos/asf/any23/blob/159aeb48/cli/src/test/java/org/apache/any23/cli/MicrodataParserTest.java
----------------------------------------------------------------------
diff --git a/cli/src/test/java/org/apache/any23/cli/MicrodataParserTest.java b/cli/src/test/java/org/apache/any23/cli/MicrodataParserTest.java
index 2f46aaa..e0a1123 100644
--- a/cli/src/test/java/org/apache/any23/cli/MicrodataParserTest.java
+++ b/cli/src/test/java/org/apache/any23/cli/MicrodataParserTest.java
@@ -32,7 +32,7 @@ public class MicrodataParserTest extends ToolTestBase {
@Test
public void testRunOnFile() throws Exception {
- runToolCheckExit0("file:"+copyResourceToTempFile("/microdata/microdata-nested.html").getAbsolutePath());
+ runToolCheckExit0("file:" + copyResourceToTempFile("/microdata/microdata-nested.html").getAbsolutePath());
}
@Test
http://git-wip-us.apache.org/repos/asf/any23/blob/159aeb48/cli/src/test/java/org/apache/any23/cli/MimeDetectorTest.java
----------------------------------------------------------------------
diff --git a/cli/src/test/java/org/apache/any23/cli/MimeDetectorTest.java b/cli/src/test/java/org/apache/any23/cli/MimeDetectorTest.java
index 3894d32..46b65da 100644
--- a/cli/src/test/java/org/apache/any23/cli/MimeDetectorTest.java
+++ b/cli/src/test/java/org/apache/any23/cli/MimeDetectorTest.java
@@ -39,13 +39,13 @@ public class MimeDetectorTest extends ToolTestBase {
@Test
public void testDetectFile() throws Exception {
assumeOnlineAllowed();
- runToolCheckExit0("file://"+copyResourceToTempFile("/application/trix/test1.trx").getAbsolutePath());
+ runToolCheckExit0("file://" + copyResourceToTempFile("/application/trix/test1.trx").getAbsolutePath());
}
@Test
public void testDetectInline() throws Exception {
assumeOnlineAllowed();
- runToolCheckExit0( new String[] {"inline://<http://s> <http://p> <http://o> ."} );
+ runToolCheckExit0("inline://<http://s> <http://p> <http://o> .");
}
}
http://git-wip-us.apache.org/repos/asf/any23/blob/159aeb48/cli/src/test/java/org/apache/any23/cli/RoverTest.java
----------------------------------------------------------------------
diff --git a/cli/src/test/java/org/apache/any23/cli/RoverTest.java b/cli/src/test/java/org/apache/any23/cli/RoverTest.java
index 7bab314..15054e4 100644
--- a/cli/src/test/java/org/apache/any23/cli/RoverTest.java
+++ b/cli/src/test/java/org/apache/any23/cli/RoverTest.java
@@ -28,7 +28,6 @@ import org.eclipse.rdf4j.model.Statement;
import org.eclipse.rdf4j.rio.RDFFormat;
import java.io.File;
-import java.util.Arrays;
/**
* Test case for {@link Rover}.
@@ -130,7 +129,6 @@ public class RoverTest extends ToolTestBase {
final String outNQuads = FileUtils.readFileContent(outFile);
final Statement[] statements = RDFUtils.parseRDF(RDFFormat.NQUADS, outNQuads);
- System.out.println(Arrays.toString(statements));
Assert.assertTrue("Unexpected number of statements.", statements.length > 9);
}
http://git-wip-us.apache.org/repos/asf/any23/blob/159aeb48/cli/src/test/java/org/apache/any23/cli/SimpleRoverTest.java
----------------------------------------------------------------------
diff --git a/cli/src/test/java/org/apache/any23/cli/SimpleRoverTest.java b/cli/src/test/java/org/apache/any23/cli/SimpleRoverTest.java
index ec75022..587dda7 100644
--- a/cli/src/test/java/org/apache/any23/cli/SimpleRoverTest.java
+++ b/cli/src/test/java/org/apache/any23/cli/SimpleRoverTest.java
@@ -16,12 +16,13 @@
*/
package org.apache.any23.cli;
-import com.google.common.io.Files;
import java.io.File;
+import java.lang.invoke.MethodHandles;
+import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.Collection;
-import org.apache.any23.util.FileUtils;
-import org.apache.pdfbox.util.Charsets;
+
+import org.apache.commons.io.FileUtils;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -38,7 +39,7 @@ import org.slf4j.LoggerFactory;
public class SimpleRoverTest extends ToolTestBase {
private static final String baseUri = "urn:test";
- private static final Logger log = LoggerFactory.getLogger(SimpleRoverTest.class);
+ private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
private String filePath;
@@ -57,8 +58,7 @@ public class SimpleRoverTest extends ToolTestBase {
}
/**
- * Ref {@link https://issues.apache.org/jira/browse/ANY23-310} unit test.
- * @throws Exception
+ * Ref <a href="https://issues.apache.org/jira/browse/ANY23-310">ANY23-310</a> unit test.
*/
@Test
public void ref310Test()
@@ -75,20 +75,23 @@ public class SimpleRoverTest extends ToolTestBase {
Assert.assertTrue(logfile.exists());
Assert.assertTrue(outputFile.exists());
// check if output file is longer than 10 chracters
- String outputFileContent = FileUtils.readFileContent(outputFile);
+ String outputFileContent = FileUtils.readFileToString(outputFile, StandardCharsets.UTF_8);
Assert.assertTrue(outputFileContent.length() > 10);
- String[] logFileContent = FileUtils.readFileLines(logfile);
- Assert.assertTrue(logFileContent.length == 2);
+ String[] logFileContent = FileUtils.readLines(logfile, StandardCharsets.UTF_8).toArray(new String[0]);
+ Assert.assertEquals(2, logFileContent.length);
//Assert.assertTrue(logFileContent[1].split("\\W*")[1] == );
int contentSize = Integer.valueOf(logFileContent[1].split("\\t")[1]);
- log.info("Content: '{}'", contentSize);
String extractors = logFileContent[1].split("\\t")[4].replaceAll("[\\[\\]\\s:\\d]", "");
- log.info("Extractors: '{}'", extractors);
-
-
- log.debug("Log file location: {}", logfile.getAbsolutePath());
- log.trace("Log file content: \n{}\n", Files.toString(logfile, Charsets.UTF_8));
+
+ if (log.isDebugEnabled()) {
+ log.debug("Content: '{}'", contentSize);
+ log.debug("Extractors: '{}'", extractors);
+ log.debug("Log file location: {}", logfile.getAbsolutePath());
+ }
+ if (log.isTraceEnabled()) {
+ log.trace("Log file content: \n{}\n", FileUtils.readFileToString(logfile, StandardCharsets.UTF_8));
+ }
Assert.assertTrue("Content size should be greated than 0", contentSize > 0);
Assert.assertFalse(extractors.isEmpty());
@@ -96,12 +99,11 @@ public class SimpleRoverTest extends ToolTestBase {
}
/**
- * Ref {@link https://issues.apache.org/jira/browse/ANY23-310} unit test.
+ * Ref <a href="https://issues.apache.org/jira/browse/ANY23-310">ANY23-310</a> unit test.
*
* Example without the logging file.
*
* By default that test is not active. It might be useful for debugging.
- * @throws Exception
*/
@Test
public void ref310ExtendedTest()
@@ -115,7 +117,7 @@ public class SimpleRoverTest extends ToolTestBase {
Assert.assertTrue(outputFile.exists());
// check if output file is longer than 10 chracters
- String outputFileContent = FileUtils.readFileContent(outputFile);
+ String outputFileContent = FileUtils.readFileToString(outputFile, StandardCharsets.UTF_8);
Assert.assertTrue(outputFileContent.length() > 10);
http://git-wip-us.apache.org/repos/asf/any23/blob/159aeb48/cli/src/test/java/org/apache/any23/cli/ToolTestBase.java
----------------------------------------------------------------------
diff --git a/cli/src/test/java/org/apache/any23/cli/ToolTestBase.java b/cli/src/test/java/org/apache/any23/cli/ToolTestBase.java
index fef49cd..a815315 100644
--- a/cli/src/test/java/org/apache/any23/cli/ToolTestBase.java
+++ b/cli/src/test/java/org/apache/any23/cli/ToolTestBase.java
@@ -21,6 +21,7 @@ import com.beust.jcommander.Parameters;
import org.apache.any23.Any23OnlineTestBase;
import java.util.Arrays;
+import java.util.Objects;
import static java.lang.String.format;
import static org.junit.Assert.assertEquals;
@@ -30,7 +31,6 @@ import static org.junit.Assert.assertEquals;
*
* @author Michele Mostarda (mostarda@fbk.eu)
*/
-// TODO: improve support for Tool testing, intercept i/o streams.
public abstract class ToolTestBase extends Any23OnlineTestBase {
public static final String TOOL_RUN_METHOD = "run";
@@ -38,8 +38,7 @@ public abstract class ToolTestBase extends Any23OnlineTestBase {
private final Class<? extends Tool> toolClazz;
protected ToolTestBase(Class<? extends Tool> tool) {
- if (tool == null) throw new NullPointerException();
- toolClazz = tool;
+ toolClazz = Objects.requireNonNull(tool, "Tool class cannot be null.");
}
/**
@@ -56,7 +55,7 @@ public abstract class ToolTestBase extends Any23OnlineTestBase {
enhancedArgs[0] = commandName;
System.arraycopy( args, 0, enhancedArgs, 1, args.length );
- return new ToolRunner().execute( enhancedArgs );
+ return new ToolRunner().execute(true, enhancedArgs);
}
/**
http://git-wip-us.apache.org/repos/asf/any23/blob/159aeb48/cli/src/test/java/org/apache/any23/cli/YAMLRoverTest.java
----------------------------------------------------------------------
diff --git a/cli/src/test/java/org/apache/any23/cli/YAMLRoverTest.java b/cli/src/test/java/org/apache/any23/cli/YAMLRoverTest.java
index f559f67..6024110 100644
--- a/cli/src/test/java/org/apache/any23/cli/YAMLRoverTest.java
+++ b/cli/src/test/java/org/apache/any23/cli/YAMLRoverTest.java
@@ -16,10 +16,11 @@
*/
package org.apache.any23.cli;
-import com.google.common.io.Files;
import java.io.File;
import java.io.IOException;
-import org.apache.pdfbox.util.Charsets;
+import java.nio.charset.StandardCharsets;
+
+import org.apache.commons.io.FileUtils;
import org.junit.Assert;
import org.junit.Test;
import org.slf4j.Logger;
@@ -56,7 +57,7 @@ public class YAMLRoverTest extends ToolTestBase {
Assert.assertTrue(logfile.exists());
log.debug("Log file location: {}", logfile.getAbsolutePath());
- log.info("Log file content: \n{}\n", Files.toString(logfile, Charsets.UTF_8));
+ log.debug("Log file content: \n{}\n", FileUtils.readFileToString(logfile, StandardCharsets.UTF_8));
Assert.assertEquals("Unexpected exit code.", 0, exitCode);
assertFileContainsString(outputFile, baseUri);
@@ -72,7 +73,7 @@ public class YAMLRoverTest extends ToolTestBase {
* @return
*/
public void assertFileContainsString(File f, String s) throws IOException {
- String fileContent = Files.toString(f, Charsets.UTF_8);
+ String fileContent = FileUtils.readFileToString(f, StandardCharsets.UTF_8);
log.trace("File content: \n{}\n", fileContent);
Assert.assertTrue(fileContent.contains(s));
}
http://git-wip-us.apache.org/repos/asf/any23/blob/159aeb48/core/src/main/java/org/apache/any23/extractor/SingleDocumentExtraction.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/any23/extractor/SingleDocumentExtraction.java b/core/src/main/java/org/apache/any23/extractor/SingleDocumentExtraction.java
index 028b518..77ed28c 100644
--- a/core/src/main/java/org/apache/any23/extractor/SingleDocumentExtraction.java
+++ b/core/src/main/java/org/apache/any23/extractor/SingleDocumentExtraction.java
@@ -218,8 +218,8 @@ public class SingleDocumentExtraction {
} catch (Exception ex) {
throw new IllegalArgumentException("Invalid IRI: " + in.getDocumentIRI(), ex);
}
- if(log.isInfoEnabled()) {
- log.info("Processing " + this.documentIRI);
+ if (log.isDebugEnabled()) {
+ log.debug("Processing " + this.documentIRI);
}
filterExtractorsByMIMEType();
http://git-wip-us.apache.org/repos/asf/any23/blob/159aeb48/core/src/test/java/org/apache/any23/extractor/html/AbstractExtractorTestCase.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/any23/extractor/html/AbstractExtractorTestCase.java b/core/src/test/java/org/apache/any23/extractor/html/AbstractExtractorTestCase.java
index f04d59f..d9e0fe5 100644
--- a/core/src/test/java/org/apache/any23/extractor/html/AbstractExtractorTestCase.java
+++ b/core/src/test/java/org/apache/any23/extractor/html/AbstractExtractorTestCase.java
@@ -48,9 +48,12 @@ import org.eclipse.rdf4j.rio.RDFParseException;
import org.eclipse.rdf4j.rio.Rio;
import org.eclipse.rdf4j.sail.Sail;
import org.eclipse.rdf4j.sail.memory.MemoryStore;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.io.StringWriter;
+import java.lang.invoke.MethodHandles;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@@ -63,6 +66,8 @@ import java.util.Map;
*/
public abstract class AbstractExtractorTestCase extends AbstractAny23TestBase {
+ private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+
/**
* Base test document.
*/
@@ -363,11 +368,11 @@ public abstract class AbstractExtractorTestCase extends AbstractAny23TestBase {
for (Map.Entry<String, Collection<IssueReport.Issue>> entry : report
.getExtractorToIssues().entrySet()) {
if (entry.getValue().size() > 0) {
- System.out.println("Unexpected issue for extractor " + entry.getKey()
+ log.debug("Unexpected issue for extractor " + entry.getKey()
+ " : " + entry.getValue());
}
- for(Issue nextIssue : entry.getValue()) {
- if(nextIssue.getLevel() == IssueLevel.ERROR || nextIssue.getLevel() == IssueLevel.FATAL) {
+ for (Issue nextIssue : entry.getValue()) {
+ if (nextIssue.getLevel() == IssueLevel.ERROR || nextIssue.getLevel() == IssueLevel.FATAL) {
Assert.fail("Unexpected issue for extractor " + entry.getKey()
+ " : " + entry.getValue());
}
http://git-wip-us.apache.org/repos/asf/any23/blob/159aeb48/core/src/test/java/org/apache/any23/extractor/rdfa/RDFa11ExtractorTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/any23/extractor/rdfa/RDFa11ExtractorTest.java b/core/src/test/java/org/apache/any23/extractor/rdfa/RDFa11ExtractorTest.java
index c3d7fd5..1bc63d4 100644
--- a/core/src/test/java/org/apache/any23/extractor/rdfa/RDFa11ExtractorTest.java
+++ b/core/src/test/java/org/apache/any23/extractor/rdfa/RDFa11ExtractorTest.java
@@ -292,7 +292,7 @@ public class RDFa11ExtractorTest extends AbstractRDFaExtractorTestCase {
@Test
public void testOpenGraphStructuredProperties() throws IOException, ExtractionException, RepositoryException {
assertExtract("/html/rdfa/opengraph-structured-properties.html");
- logger.info( dumpHumanReadableTriples() );
+ logger.debug(dumpHumanReadableTriples());
Assert.assertEquals(31, getStatementsSize(null, null, null) );
final OGP vOGP = OGP.getInstance();
@@ -328,7 +328,7 @@ public class RDFa11ExtractorTest extends AbstractRDFaExtractorTestCase {
@Test
public void testOpenGraphAlternateObjectTypes() throws IOException, ExtractionException, RepositoryException {
assertExtract("/html/rdfa/opengraph-music-song-object-type.html");
- logger.info( dumpHumanReadableTriples() );
+ logger.debug(dumpHumanReadableTriples());
Assert.assertEquals(9, getStatementsSize(null, null, null) );
final OGPMusic vOGPMusic = OGPMusic.getInstance();
http://git-wip-us.apache.org/repos/asf/any23/blob/159aeb48/core/src/test/java/org/apache/any23/vocab/RDFSchemaUtilsTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/any23/vocab/RDFSchemaUtilsTest.java b/core/src/test/java/org/apache/any23/vocab/RDFSchemaUtilsTest.java
index c56641a..d8fd8d5 100644
--- a/core/src/test/java/org/apache/any23/vocab/RDFSchemaUtilsTest.java
+++ b/core/src/test/java/org/apache/any23/vocab/RDFSchemaUtilsTest.java
@@ -39,7 +39,7 @@ public class RDFSchemaUtilsTest {
/**
* Test case for
* {@link RDFSchemaUtils#serializeVocabularies(
- * org.apache.any23.vocab.RDFSchemaUtils.VocabularyFormat, java.io.PrintStream)} with <i>NTriples</i> format.
+ * org.eclipse.rdf4j.rio.RDFFormat, java.io.PrintStream)} with <i>NTriples</i> format.
*/
@Test
public void testSerializeVocabulariesNTriples() {
@@ -49,7 +49,7 @@ public class RDFSchemaUtilsTest {
/**
* Test case for
* {@link RDFSchemaUtils#serializeVocabularies(
- * org.apache.any23.vocab.RDFSchemaUtils.VocabularyFormat, java.io.PrintStream)} with <i>RDFXML</i> format.
+ * org.eclipse.rdf4j.rio.RDFFormat, java.io.PrintStream)} with <i>RDFXML</i> format.
*/
@Test
public void testSerializeVocabulariesRDFXML() {
@@ -58,12 +58,12 @@ public class RDFSchemaUtilsTest {
private void serializeVocabularies(RDFFormat format, int expectedLines) {
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
- final PrintStream ps = new PrintStream(baos);
- RDFSchemaUtils.serializeVocabularies(format, ps);
- ps.close();
+ try (PrintStream ps = new PrintStream(baos)) {
+ RDFSchemaUtils.serializeVocabularies(format, ps);
+ }
final String output = baos.toString();
logger.debug(output);
- final int occurrences= StringUtils.countOccurrences(output, "\n");
+ final int occurrences = StringUtils.countOccurrences(output, "\n");
Assert.assertEquals(expectedLines, occurrences);
}
http://git-wip-us.apache.org/repos/asf/any23/blob/159aeb48/plugins/office-scraper/src/test/java/org/apache/any23/plugin/officescraper/ExcelExtractorTest.java
----------------------------------------------------------------------
diff --git a/plugins/office-scraper/src/test/java/org/apache/any23/plugin/officescraper/ExcelExtractorTest.java b/plugins/office-scraper/src/test/java/org/apache/any23/plugin/officescraper/ExcelExtractorTest.java
index 86a16fe..3edebbf 100644
--- a/plugins/office-scraper/src/test/java/org/apache/any23/plugin/officescraper/ExcelExtractorTest.java
+++ b/plugins/office-scraper/src/test/java/org/apache/any23/plugin/officescraper/ExcelExtractorTest.java
@@ -94,7 +94,7 @@ public class ExcelExtractorTest {
);
extractor.run(extractionParameters, extractionContext, is, extractionResult);
compositeTripleHandler.close();
- logger.info(out.toString());
+ logger.debug(out.toString());
verifyPredicateOccurrence(verifierTripleHandler, Excel.getInstance().containsSheet, 2 );
verifyPredicateOccurrence(verifierTripleHandler, Excel.getInstance().containsRow , 6 );
[3/3] any23 git commit: added license and javadoc
Posted by ha...@apache.org.
added license and javadoc
Project: http://git-wip-us.apache.org/repos/asf/any23/repo
Commit: http://git-wip-us.apache.org/repos/asf/any23/commit/0291f588
Tree: http://git-wip-us.apache.org/repos/asf/any23/tree/0291f588
Diff: http://git-wip-us.apache.org/repos/asf/any23/diff/0291f588
Branch: refs/heads/master
Commit: 0291f588d04859053ef4eb8845686bad824b4461
Parents: 159aeb4
Author: Hans <fi...@gmail.com>
Authored: Thu Aug 2 13:01:19 2018 -0500
Committer: Hans <fi...@gmail.com>
Committed: Thu Aug 2 13:01:19 2018 -0500
----------------------------------------------------------------------
.../java/org/apache/any23/cli/BaseTool.java | 24 ++++++++++++++++++++
1 file changed, 24 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/any23/blob/0291f588/cli/src/main/java/org/apache/any23/cli/BaseTool.java
----------------------------------------------------------------------
diff --git a/cli/src/main/java/org/apache/any23/cli/BaseTool.java b/cli/src/main/java/org/apache/any23/cli/BaseTool.java
index d9a82f5..6164158 100644
--- a/cli/src/main/java/org/apache/any23/cli/BaseTool.java
+++ b/cli/src/main/java/org/apache/any23/cli/BaseTool.java
@@ -1,9 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
package org.apache.any23.cli;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
+/**
+ * This class reduces the verbosity of testing command-line
+ * console output by intercepting the underlying {@link PrintStream}
+ * when applicable and replacing it with a more concise version.
+ *
+ * @author Hans Brende (hansbrende@apache.org)
+ */
abstract class BaseTool implements Tool {
abstract PrintStream getOut();