diff --git a/Doc/Common/snippets.xml b/Doc/Common/snippets.xml new file mode 100644 index 0000000000000000000000000000000000000000..905fd413af0d8c7a1efd9c664071aa509802b717 --- /dev/null +++ b/Doc/Common/snippets.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<chapter version="5.1" xml:id="snippets" xmlns="http://docbook.org/ns/docbook" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:xila="http://www.w3.org/2001/XInclude/local-attributes" + xmlns:xi="http://www.w3.org/2001/XInclude" + xmlns:trans="http://docbook.org/ns/transclusion" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:m="http://www.w3.org/1998/Math/MathML" + xmlns:html="http://www.w3.org/1999/xhtml" + xmlns:db="http://docbook.org/ns/docbook"> + <title>Useful snippets</title> + + <informaltable border="1"> + <tr> + <td valign="top"/> + + <td valign="top"/> + </tr> + </informaltable> +</chapter> diff --git a/Doc/Sd1/Ref/ObjectsAndClasses/Stack/ideaDebugStack.png b/Doc/Sd1/Ref/ObjectsAndClasses/Stack/ideaDebugStack.png new file mode 100644 index 0000000000000000000000000000000000000000..8ce00c4546499ed5bbdfbcc28f1d2d9ab9c0209e Binary files /dev/null and b/Doc/Sd1/Ref/ObjectsAndClasses/Stack/ideaDebugStack.png differ diff --git a/Doc/Sd1/Ref/ObjectsAndClasses/Stack/ideaDebugStack.png.marked.svg b/Doc/Sd1/Ref/ObjectsAndClasses/Stack/ideaDebugStack.png.marked.svg new file mode 100644 index 0000000000000000000000000000000000000000..4c363b7635a7fbc9886b73705c12b54beb0f60b9 --- /dev/null +++ b/Doc/Sd1/Ref/ObjectsAndClasses/Stack/ideaDebugStack.png.marked.svg @@ -0,0 +1,1104 @@ +<?xml version='1.0' encoding='UTF-8'?> +<!--CREATED BY XMLMIND IMAGE MAP EDITOR. PLEASE DO NOT EDIT BY HAND! numberPosition="NORTH_WEST" numberTextColor="#FFFFFF" numberBackgroundColor="#000000" numberFontSize="10" shapeLineWidth="THICK" shapeLineColor="#FF0000" shapeDashedLine="false" --> +<svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' version='1.1' width='661px' height='412px' viewBox='0 0 661 412'> +<image width='661' height='412' xlink:href='data:image/png;base64,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 +'/> +<g font-family='sans-serif' font-weight='bold' font-size='8pt' fill='none' stroke='#FF0000' stroke-width='4' stroke-dasharray='none'> +<rect x='374' y='276' width='286' height='133'/> +<g transform='translate(374,276)' stroke='none'> +<circle cx='0.8em' cy='0.8em' r='0.8em' fill='#000000'/> +<text x='0.5em' y='1.1em' fill='#FFFFFF'>2</text> +</g> +<rect x='24' y='330' width='320' height='76'/> +<g transform='translate(24,330)' stroke='none'> +<circle cx='0.8em' cy='0.8em' r='0.8em' fill='#000000'/> +<text x='0.5em' y='1.1em' fill='#FFFFFF'>1</text> +</g> +</g> +</svg> diff --git a/Doc/Sd1/objectsClasses.xml b/Doc/Sd1/objectsClasses.xml index 2dc68f5afc70f982fa129aa43fcd1b8a87f1144a..ac4bc7e52d4f3cc48ec6d9eb0bef4ea4a68cb9be 100644 --- a/Doc/Sd1/objectsClasses.xml +++ b/Doc/Sd1/objectsClasses.xml @@ -8443,6 +8443,49 @@ sin(4 * PI)=4518.2187229323445, difference=4518.2187229323445</screen> </imageobject> </mediaobject> </figure> + + <figure xml:id="sd1_fig_callStackCircleAreaIdea"> + <title><xref linkend="glo_IDE"/> debugger</title> + + <mediaobject> + <imageobjectco> + <areaspec otherunits="imagemap" units="other"> + <area coords="24,330,343,405" + linkends="sd1_fig_callStackCircleAreaIdea-1" + xml:id="sd1_fig_callStackCircleAreaIdea-1-co"/> + + <area coords="374,276,659,408" + linkends="sd1_fig_callStackCircleAreaIdea-2" + xml:id="sd1_fig_callStackCircleAreaIdea-2-co"/> + </areaspec> + + <imageobject> + <imagedata fileref="Ref/ObjectsAndClasses/Stack/ideaDebugStack.png.marked.svg"/> + </imageobject> + </imageobjectco> + </mediaobject> + </figure> + + <calloutlist> + <callout arearefs="sd1_fig_callStackCircleAreaIdea-1-co" + xml:id="sd1_fig_callStackCircleAreaIdea-1"> + <para>Three call stack frames corresponding to + <methodname>main()</methodname> calling + <methodname>circleArea(2)</methodname> calling + <code>square(2)</code>.</para> + </callout> + + <callout arearefs="sd1_fig_callStackCircleAreaIdea-2-co" + xml:id="sd1_fig_callStackCircleAreaIdea-2"> + <para>Local variables corresponding to selected stack frame.</para> + + <tip> + <para>In the above example you may select stack frame + <quote>circleArea</quote> showing its local variables while leaving + your debugger resting at line 3.</para> + </tip> + </callout> + </calloutlist> </section> <section xml:id="sd1_sect_unitTestExample"> diff --git a/Doc/Sda1/dom.xml b/Doc/Sda1/dom.xml index 967f45118883fd36b037e98c11ee97c698b59a23..f7150724b15d43d8e20faf53e9b5f6bb6c547e68 100644 --- a/Doc/Sda1/dom.xml +++ b/Doc/Sda1/dom.xml @@ -15,15 +15,20 @@ <titleabbrev><acronym xlink:href="https://www.w3.org/DOM">DOM</acronym></titleabbrev> - <section xml:id="sda1SectDomPreconditions"> + <figure xml:id="sda1_dom_fig_requiredKnowledge"> <title>Required knowledge</title> <itemizedlist> <listitem> - <para>Functional programming basics in Java.</para> + <para>Functional programming basics in <xref + linkend="glo_Java"/>.</para> + </listitem> + + <listitem> + <para>Dependency management using <xref linkend="glo_Maven"/>.</para> </listitem> </itemizedlist> - </section> + </figure> <section xml:id="domBase"> <title>Language independent specification</title> @@ -352,69 +357,47 @@ public interface Node { <figure xml:id="sda1_fig_exportXml"> <title>Exporting data as XML</title> - <mediaobject> - <imageobject> - <imagedata fileref="???"/> - </imageobject> - </mediaobject> - </figure> - - <orderedlist> - <listitem> - <para>Create a document builder instance.</para> - </listitem> + <orderedlist> + <listitem> + <para>Create a document builder instance.</para> + </listitem> - <listitem> - <para>Create an empty <link - xlink:href="https://docs.oracle.com/javase/8/docs/api/org/w3c/dom/Document.html">Document</link> - instance.</para> - </listitem> + <listitem> + <para>Create an empty <link + xlink:href="https://docs.oracle.com/javase/8/docs/api/org/w3c/dom/Document.html">Document</link> + instance.</para> + </listitem> - <listitem> - <para>Fill in the desired Elements and Attributes.</para> - </listitem> + <listitem> + <para>Fill in the desired Elements and Attributes.</para> + </listitem> - <listitem> - <para>Create a serializer.</para> - </listitem> + <listitem> + <para>Create a serializer.</para> + </listitem> - <listitem> - <para>Serialize the resulting tree to a stream.</para> - </listitem> - </orderedlist> + <listitem> + <para>Serialize the resulting tree to a stream.</para> + </listitem> + </orderedlist> + </figure> - <para>An introductory piece of code illustrates these steps.</para> + <para>The subsequent code illustrates these steps:</para> <figure xml:id="simpleDomCreate"> - <title>Creation of a XML document instance from scratch.</title> - - <programlisting language="java">public class CreateDoc { - public static void main(String[] args) throws Exception { - // Create the root element - <emphasis role="bold">final Element titel = new Element("titel"); -</emphasis> - //Set a date - <emphasis role="bold">titel.setAttribute("date", "23.02.2000");</emphasis> - - // Append a text node as child - <emphasis role="bold">titel.addContent(new Text("Versuch 1"));</emphasis> - - - // Set formatting for the XML output - <emphasis role="bold">final Format outFormat = Format.getPrettyFormat();</emphasis> - - // Serialize to console - <emphasis role="bold">final XMLOutputter printer = new XMLOutputter(outFormat); - printer.output(titel, System.out);</emphasis> - }}</programlisting> - </figure> + <title><xref linkend="glo_XML"/> document creation from scratch.</title> - <para><figure xml:id="sda1_dom_createResult"> - <title>Serializing result</title> + <programlisting language="java">final Element titel = new Element("titel"); // Create the root element +titel.setAttribute("date", "23.02.2000"); //Set a date +titel.addContent(new Text("First try")); // Append a text node as child +final Format outFormat = Format.getPrettyFormat(); // Set output formatting +final XMLOutputter printer = new XMLOutputter(outFormat; +printer.output(titel, System.out); // Serialize to console</programlisting> - <screen language="xml"><?xml version="1.0" encoding="UTF-8"?> -<titel date="23.02.2000">Versuch 1</titel></screen> - </figure></para> + <para>Result:</para> + + <screen language="xml"><titel date="23.02.2000">First try</titel></screen> + </figure> </section> <section xml:id="domCreateExercises"> @@ -480,16 +463,16 @@ public interface Node { instance during <acronym xlink:href="http://www.saxproject.org">SAX</acronym> processing. A <acronym xlink:href="https://www.w3.org/DOM">DOM</acronym> Parser requires - a means to communicate parsing errors in case of trouble. In principle a - <acronym xlink:href="https://www.w3.org/DOM">DOM</acronym> parser - implementor is free to choose his implementation but most implementations - are based on top of a so called <acronym + a means to communicate parsing errors in case of <xref linkend="glo_XML"/> + related errors. A <acronym + xlink:href="https://www.w3.org/DOM">DOM</acronym> parser implementor is + free to choose his implementation but most implementations are based on + top of a so called <acronym xlink:href="http://www.saxproject.org">SAX</acronym> parser. The <acronym xlink:href="http://www.saxproject.org">SAX</acronym> parser in turn defines a standard <classname xlink:href="https://docs.oracle.com/javase/8/docs/api/org/xml/sax/ErrorHandler.html">ErrorHandler</classname> - interface we may use for the sake of conveying parsing errors within our - application:</para> + interface we may use for the sake of conveying parsing errors:</para> <programlisting language="java">public class MySaxErrorHandler implements ErrorHandler { @@ -1298,84 +1281,140 @@ public class Article2Html { <title>Using <acronym xlink:href="https://www.w3.org/DOM">DOM</acronym> with HTML/Javascript</title> - <para>Due to script language support in a variety of browsers we may also - use the <acronym xlink:href="https://www.w3.org/DOM">DOM</acronym> to - implement client side event handling. As an example we <link - xlink:href="/Sda1/Ref/src/tablesort.html">demonstrate</link> a JavaScript - based sortable HTML table. The example code along with the code - description can be found at <uri - xlink:href="http://www.kryogenix.org/code/browser/sorttable">http://www.kryogenix.org/code/browser/sorttable</uri>.</para> + <figure xml:id="sda1_dom_fig_domJavascript"> + <title><xref linkend="glo_DOM"/> and + <productname>Javascript</productname></title> - <para>Few steps are required enriching a simple HTML table with this - functionality:</para> + <itemizedlist> + <listitem> + <para>Widespread <productname>Javascript</productname> + support.</para> + </listitem> - <itemizedlist> - <listitem> - <para>Including an external Javascript library by <code><script - type="text/javascript" src="sorttable.js"></code></para> - </listitem> + <listitem> + <para>Full <xref linkend="glo_DOM"/> support.</para> + </listitem> + </itemizedlist> + </figure> - <listitem> - <para>Each sortable HTML table needs:</para> + <figure xml:id="sda1_dom_fig_domJavascriptExample"> + <title><xref linkend="glo_DOM"/> <productname>Javascript</productname> + example</title> + + <programlisting language="javascript">function sortables_init() { + if (!document.getElementsByTagName) return; + tbls = document.getElementsByTagName("table"); + for (ti=0;ti<tbls.length;ti++) { + thisTbl = tbls[ti]; + if (((' '+thisTbl.className+' ').indexOf("sortable") != -1) + && (thisTbl.id)) { + ts_makeSortable(thisTbl); + } + }}</programlisting> + </figure> - <itemizedlist> - <listitem> - <para>A unique <code>id</code> attribute</para> - </listitem> + <figure xml:id="sda1_dom_fig_domJavascriptDemo"> + <title><xref linkend="glo_DOM"/> <productname>Javascript</productname> + demo</title> - <listitem> - <para>A <code>class="sortable"</code> attribute</para> - </listitem> - </itemizedlist> - </listitem> - </itemizedlist> + <itemizedlist> + <listitem> + <para><uri + xlink:href="https://kryogenix.org/code/browser/sorttable">https://kryogenix.org/code/browser/sorttable</uri> + or <link xlink:href="/Sda1/Ref/src/tablesort.html">local + copy</link></para> + </listitem> + + <listitem> + <para>Add an external <productname>Javascript</productname> library + reference:</para> + + <para><code><script type="text/javascript" + src="sorttable.js"></code></para> + </listitem> + + <listitem> + <para>Each sortable HTML table requires:</para> + + <itemizedlist> + <listitem> + <para>A unique <code>id</code> attribute</para> + </listitem> + + <listitem> + <para>A <code>class="sortable"</code> attribute</para> + </listitem> + </itemizedlist> + </listitem> + </itemizedlist> + </figure> </section> <section xml:id="domXpath"> - <title>Using <acronym + <title><xref linkend="glo_DOM"/> and <acronym xlink:href="https://www.w3.org/TR/xpath">XPath</acronym></title> - <para><xref linkend="domTreeTraversal"/> demonstrated the possibility to - traverse trees solely by using <acronym - xlink:href="https://www.w3.org/DOM">DOM</acronym> Method calls. Though - this approach is possible it will in general not lead to stable - applications. Real world examples are often based on large XML documents - with complex hierarchical structures. Thus using this rather primitive - approach will foster deeply nested method calls being necessary to access - desired node sets. In addition changing the conceptional schema will - require rewriting large code portions..</para> - - <para>As we already know from <abbrev - xlink:href="https://www.w3.org/Style/XSL">XSL</abbrev> transformations - <code>Xpath</code> allows to address node sets inside a XML tree. The role - of <acronym xlink:href="https://www.w3.org/TR/xpath">XPath</acronym> can - be compared to SQL queries when working with relational databases. - <acronym xlink:href="https://www.w3.org/TR/xpath">XPath</acronym> may also - be used within <xref linkend="glo_Java"/> code. As a first example we show - an image filename extracting application operating on XHTML documents. The - following example contains three <tag class="starttag">img</tag> - elements:</para> - - <figure xml:id="htmlGallery"> - <title>A HTML document containing <code>IMG</code> tags.</title> - - <programlisting language="xml"><!DOCTYPE html> -<html xmlns="http://www.w3.org/1999/xhtml"> + <figure xml:id="sda1_dom_fig_whyXpath"> + <title>Why using <xref linkend="glo_XPath"/> ?</title> + + <itemizedlist> + <listitem> + <para><xref linkend="domTreeTraversal"/> effectively limited to + simple hierarchies.</para> + </listitem> + + <listitem> + <para>Unstable with complex documents.</para> + </listitem> + + <listitem> + <para>Susceptible to schema changes.</para> + </listitem> + </itemizedlist> + </figure> + + <figure xml:id="sda1_dom_fig_xpathJava"> + <title><xref linkend="glo_XPath"/> and <xref linkend="glo_Jdom"/> + </title> + + <itemizedlist> + <listitem> + <para>Addressing node sets in <xref linkend="glo_XML"/> + trees.</para> + </listitem> + + <listitem> + <para>Conceptional <xref linkend="glo_SQL"/> similarity.</para> + </listitem> + + <listitem> + <para><link + xlink:href="https://docs.oracle.com/javase/tutorial/collections">Collections</link> + representing result sets.</para> + </listitem> + </itemizedlist> + </figure> + + <figure xml:id="sda1_dom_fig_htmlImg"> + <title><xref linkend="glo_HTML"/> containing <tag + class="starttag">img</tag> tags.</title> + + <programlisting language="xml"><html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Picture gallery</title> </head> <body> <h1>Picture gallery</h1> - <p>Images may appear inline:<emphasis role="bold"><img src="inline.gif" alt="none"/></emphasis></p> + <p>Images may appear inline:<emphasis role="red"><img src="inline.gif" alt="none"/></emphasis></p> <table> <tbody> <tr> <td>Number one:</td> - <td><emphasis role="bold"><img src="one.gif" alt="none"/></emphasis></td> + <td><emphasis role="red"><img src="one.gif" alt="none"/></emphasis></td> </tr> <tr> <td>Number two:</td> - <td><emphasis role="bold"><img src="http://www.hdm-stuttgart.de/favicon.ico" alt="none"/></emphasis></td> + <td><emphasis role="red"><img src="http://www.hdm-stuttgart.de/favicon.ico" alt="none"/></emphasis></td> </tr> </tbody> </table> @@ -1383,29 +1422,51 @@ public class Article2Html { </html></programlisting> </figure> - <para>A given HTML document may contain <tag class="starttag">img</tag> - elements at <emphasis>arbitrary</emphasis> positions. It is sometimes - desirable to check for existence and accessibility of such external - objects being necessary for the page's correct rendering. A simple XSL - script will do first part the job namely extracting the <tag - class="starttag">img</tag> elements:</para> + <figure xml:id="sda1_dom_fig_htmlImgObjective"> + <title>Objective: Find contained images</title> - <figure xml:id="gallery2imagelist"> - <title>A <abbrev xlink:href="https://www.w3.org/Style/XSL">XSL</abbrev> - script for image name extraction.</title> + <itemizedlist> + <listitem> + <para>(Nearly) arbitrary positions.</para> + </listitem> + + <listitem> + <para>Possibly additional restrictions <abbrev>e.g.</abbrev> missing + <varname + xlink:href="https://www.w3schools.com/tags/att_img_alt.asp">alt</varname> + attribute.</para> + </listitem> + </itemizedlist> + </figure> + + <figure xml:id="sda1_dom_fig_xslExtractImg"> + <title><abbrev xlink:href="https://www.w3.org/Style/XSL">XSL</abbrev> + script extracting images.</title> + + <informaltable border="1"> + <colgroup width="64%"/> + + <colgroup width="36%"/> - <programlisting language="xml"><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - xmlns:html="http://www.w3.org/1999/xhtml"> + <tr> + <td valign="top"><programlisting language="xml"><xsl:stylesheet version="1.0" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + <emphasis role="red">xmlns:html="http://www.w3.org/1999/xhtml"</emphasis>> <xsl:output method="text"/> <xsl:template match="/"> - <xsl:for-each select="//html:img"> + <xsl:for-each select="//<emphasis role="red">html:</emphasis>img"> <xsl:value-of select="@src"/> <xsl:text> </xsl:text> </xsl:for-each> </xsl:template> -</xsl:stylesheet></programlisting> +</xsl:stylesheet></programlisting></td> + + <td valign="top"><para>Result acting on <xref + linkend="sda1_dom_fig_htmlImg"/>:</para><screen>inline.gif one.gif two.gif</screen></td> + </tr> + </informaltable> </figure> <para>Note the necessity for <code>html</code> namespace (by prefix) @@ -1421,156 +1482,127 @@ public class Article2Html { want to rewrite the above <xref linkend="glo_XSL"/> as a <xref linkend="glo_Java"/> application. A simple approach may pipe the <abbrev xlink:href="https://www.w3.org/Style/XSL">XSL</abbrev> output to our - application which then executes the readability checks. Instead we want to - incorporate the <acronym - xlink:href="https://www.w3.org/TR/xpath">XPath</acronym> based search into - the application itself. Trying to resemble the <abbrev - xlink:href="https://www.w3.org/Style/XSL">XSL</abbrev> actions as closely - as possible our application will also have to search for <link + application which then executes the readability checks. Instead we + implement an <acronym + xlink:href="https://www.w3.org/TR/xpath">XPath</acronym> based search + within our <xref linkend="glo_Java"/> application. Trying to resemble the + <abbrev xlink:href="https://www.w3.org/Style/XSL">XSL</abbrev> actions as + closely as possible our application will search for <link xlink:href="https://docs.oracle.com/javase/8/docs/api/org/w3c/dom/Element.html">Element</link> - Nodes by using the <acronym + nodes using the <acronym xlink:href="https://www.w3.org/TR/xpath">XPath</acronym> expression - <code>//html:img</code>:</para> + <code>//html:img</code>.</para> - <figure xml:id="domFindImages"> - <title>Extracting <tag class="emptytag">img</tag> element image - references from a HTML document.</title> + <figure xml:id="sda1_dom_fig_domSaxImgParse"> + <title>Setting up the parser</title> <programlisting language="java">public class DomXpath { - private final SAXBuilder builder = new SAXBuilder(); + private final SAXBuilder builder = new SAXBuilder(); - /** - * Creating a list of image URIs. - */ - public DomXpath() {} - /** - * Read an XHTML document and search for images. The image filenames will be - * written to standard out. - * - * @param xhtmlFilename The XHTML's filename to be examined. - * @return A CSV containing all image references separated by ", " - * @throws JDOMException General parsing fault - * @throws IOException file access problem - */ - public Optional<String> process(final String xhtmlFilename) + public List<Element> process(final String xhtmlFilename) throws JDOMException, IOException { - - final Document htmlInput = builder.build(xhtmlFilename); <co - linkends="programlisting_java_searchimg_parse_co" - xml:id="programlisting_java_searchimg_parse"/> - - final XPathExpression<Element> xpath = - XPathFactory.instance(). <co - linkends="programlisting_java_searchimg_pf_co" - xml:id="programlisting_java_searchimg_pf"/> - compile( <co - linkends="programlisting_java_searchimg_newxpath_co" - xml:id="programlisting_java_searchimg_newxpath"/> - "//html:img", // See last argument for prefix definition "html" - new ElementFilter(), - null, - Namespace.getNamespace("html", "http://www.w3.org/1999/xhtml")); <co - linkends="programlisting_java_searchimg_defineprefix_co" - xml:id="programlisting_java_searchimg_defineprefix"/> - - xpath.evaluate(htmlInput). <co - linkends="programlisting_java_searchimg_execquery_co" - xml:id="programlisting_java_searchimg_execquery"/> - stream(). - map(img -> img.getAttributeValue("src")). <co - linkends="programlisting_java_searchimg_loop_co" - xml:id="programlisting_java_searchimg_loop"/> - reduce((l,r) -> l.concat(", ").concat(r)). <co - linkends="programlisting_java_searchimg_reduce_co" - xml:id="programlisting_java_searchimg_reduce"/> + final Document htmlInput = builder.build(xhtmlFilename); + ... } }</programlisting> + + <tip> + <para>Complete code <link + xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/tree/master/P/Sda1/NoCast">available + here</link>.</para> + </tip> </figure> - <calloutlist> - <callout arearefs="programlisting_java_searchimg_parse" - xml:id="programlisting_java_searchimg_parse_co"> - <para>Parsing a <xref linkend="glo_HTML"/> document instance to a - <xref linkend="glo_DOM"/> tree.</para> - </callout> - - <callout arearefs="programlisting_java_searchimg_pf" - xml:id="programlisting_java_searchimg_pf_co"> - <para>Retrieving an <acronym - xlink:href="https://www.w3.org/TR/xpath">XPath</acronym> factory - instance.</para> - </callout> - - <callout arearefs="programlisting_java_searchimg_newxpath" - xml:id="programlisting_java_searchimg_newxpath_co"> - <para>Creating a <acronym - xlink:href="https://www.w3.org/TR/xpath">XPath</acronym> query - instance. This may be used to search for a set of nodes starting from - a context node. Notice the <varname>htmlNamespace</varname> instance - which binds the prefix <quote>h</quote> to the <xref - linkend="glo_HTML"/> namespace.</para> - </callout> - - <callout arearefs="programlisting_java_searchimg_execquery" - xml:id="programlisting_java_searchimg_defineprefix_co"> - <para>Define the mapping of the <xref linkend="glo_HTML"/> namespace - <code>"http://www.w3.org/1999/xhtml"</code> to the - (<quote>placeholder</quote>) prefix <code>"html"</code>.</para> - </callout> - - <callout arearefs="programlisting_java_searchimg_execquery" - xml:id="programlisting_java_searchimg_execquery_co"> - <para>Using the document's root node as the context node to start - searching for <tag class="emptytag">img ...</tag> elements appearing - at arbitrary positions in our document. This results in a (possibly - empty) <classname - xlink:href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html">List</classname><<classname - xlink:href="http://www.jdom.org/docs/apidocs/org/jdom2/Element.html">Element</classname>>.</para> - </callout> - - <callout arearefs="programlisting_java_searchimg_loop" - xml:id="programlisting_java_searchimg_loop_co"> - <para>Mapping <tag class="emptytag">img</tag> <classname - xlink:href="http://www.jdom.org/docs/apidocs/org/jdom2/Element.html">Element</classname> - instances to their (mandatory!) <property>src</property> attribute - values.</para> - </callout> - - <callout arearefs="programlisting_java_searchimg_reduce" - xml:id="programlisting_java_searchimg_reduce_co"> - <para>Reducing a <classname - xlink:href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html">List</classname><<classname - xlink:href="http://www.jdom.org/docs/apidocs/org/jdom2/Element.html">Element</classname>> - to a <xref linkend="glo_CSV"/> <classname - xlink:href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html">Optional</classname><<classname - xlink:href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html">String</classname>>.</para> - </callout> - </calloutlist> - - <para>The result is a list of image filename references:</para> - - <screen>inline.gif, one.gif, http://www.hdm-stuttgart.de/favicon.ico</screen> - - <para>Complete Maven project code:</para> + <figure xml:id="sda1_dom_fig_domXpathImgSearch"> + <title>Search using <xref linkend="glo_XPath"/> + <code>//html:img</code></title> + + <programlisting language="java">final Namespace htmlNamespace <co + linkends="sda1_dom_fig_domXpathImgSearch-1" + xml:id="sda1_dom_fig_domXpathImgSearch-1-co"/> = + Namespace.getNamespace("html", "http://www.w3.org/1999/xhtml"); + +final XPathExpression<Element> xpath = + XPathFactory.instance().compile( + "//html:img" <co linkends="sda1_dom_fig_domXpathImgSearch-2" + xml:id="sda1_dom_fig_domXpathImgSearch-2-co"/>, + new ElementFilter()<co linkends="sda1_dom_fig_domXpathImgSearch-3" + xml:id="sda1_dom_fig_domXpathImgSearch-3-co"/>, + null <co linkends="sda1_dom_fig_domXpathImgSearch-4" + xml:id="sda1_dom_fig_domXpathImgSearch-4-co"/>, + htmlNamespace <co linkends="sda1_dom_fig_domXpathImgSearch-5" + xml:id="sda1_dom_fig_domXpathImgSearch-5-co"/>);</programlisting> + + <calloutlist> + <callout arearefs="sda1_dom_fig_domXpathImgSearch-1-co" + xml:id="sda1_dom_fig_domXpathImgSearch-1"> + <para>Associating prefix <code>html</code> and <xref + linkend="glo_HTML"/> namespace + <code>http://www.w3.org/1999/xhtml</code>.</para> + </callout> + + <callout arearefs="sda1_dom_fig_domXpathImgSearch-2-co" + xml:id="sda1_dom_fig_domXpathImgSearch-2"> + <para>Searching <tag class="starttag">img</tag> elements belonging + to the namespace <code>http://www.w3.org/1999/xhtml</code> linked by + the <code>html</code> prefix.</para> + </callout> + + <callout arearefs="sda1_dom_fig_domXpathImgSearch-3-co" + xml:id="sda1_dom_fig_domXpathImgSearch-3"> + <para>Selecting only <classname + xlink:href="http://www.jdom.org/docs/apidocs/org/jdom2/Element.html">Element</classname> + instances rather than other sub classed objects below <link + xlink:href="http://www.jdom.org/docs/apidocs/org/jdom2/Content.html">Content</link>.</para> + </callout> + + <callout arearefs="sda1_dom_fig_domXpathImgSearch-4-co" + xml:id="sda1_dom_fig_domXpathImgSearch-4"> + <para>Using no parameters. See <link + xlink:href="http://www.jdom.org/pipermail/jdom-interest/2012-May/016850.html">[jdom-interest] + XPath examples</link> for parameterized queries.</para> + </callout> + + <callout arearefs="sda1_dom_fig_domXpathImgSearch-5-co" + xml:id="sda1_dom_fig_domXpathImgSearch-5"> + <para>Using previously defined namespace. The ellipsis in + <methodname + xlink:href="http://www.jdom.org/docs/apidocs/org/jdom2/xpath/XPathFactory.html#compile(java.lang.String,%20org.jdom2.filter.Filter,%20java.util.Map,%20org.jdom2.Namespace...)">compile</methodname> + supports multiple definitions.</para> + </callout> + </calloutlist> + </figure> - <annotation role="make"> - <para role="eclipse">Sda1/nocast</para> - </annotation> + <figure xml:id="domFindImages"> + <title>Searching for images</title> - <section xml:id="sda1SectVerifyImgReadable"> + <programlisting language="java">public List<Element> process(final String xhtmlFilename)... { + final Document htmlInput = builder.build(xhtmlFilename); + final XPathExpression<Element> xpath =...; + return xpath.evaluate(htmlInput); +}</programlisting> + + <programlisting language="java">final DomXpath imgSearch = new DomXpath(); +imgSearch.process("src/main/resources/gallery.html").stream(). + map(img -> img.getAttributeValue("src")). + reduce((l, r) -> l.concat(", ").concat(r)). + ifPresent(System.out::println);</programlisting> + + <screen>inline.gif, one.gif, http://www.hdm-stuttgart.de/favicon.ico</screen> + </figure> + + <qandaset defaultlabel="qanda" xml:id="sda1QandaVerifyImgReadable"> <title>Verification of referenced images readability</title> - <qandaset defaultlabel="qanda" xml:id="sda1QandaVerifyImgReadable"> - <qandadiv> - <qandaentry> - <question> - <para>We want to extend the example given in <xref - linkend="domFindImages"/> by testing the existence and checking - for readability of referenced images. The following HTML - document contains <quote>dead</quote> image references:</para> + <qandadiv> + <qandaentry> + <question> + <para>We want to extend the example given in <xref + linkend="domFindImages"/> by testing the existence and checking + for readability of referenced images. The following HTML document + contains <quote>dead</quote> image references:</para> - <programlisting language="xml" - xml:id="domCheckImageAccessibility"><!DOCTYPE html> + <programlisting language="xml" xml:id="domCheckImageAccessibility"><!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>External Pictures</title> @@ -1598,132 +1630,257 @@ public class Article2Html { </body> </html></programlisting> - <para>Write an application which checks for readability of - <abbrev - xlink:href="https://www.ietf.org/rfc/rfc1738.txt">URL</abbrev> - image references to <emphasis>external</emphasis> Servers - starting either with <code>http://</code> or - <code>https://</code> ignoring other protocol types. Internal - image references referring to the <quote>current</quote> server - typically look like <code><img src="/images/test.gif"</code>. - So in order to distinguish these two types of references we may - use the XSL built in function <link - xlink:href="http://www.cafeconleche.org/books/bible2/chapters/ch17.html">starts-with()</link> - testing for the <code>http</code> or <code>https</code> protocol - definition part of an <abbrev - xlink:href="https://www.ietf.org/rfc/rfc1738.txt">URL</abbrev>. - A possible output for the above example reads:</para> - - <screen>xpath.CheckUrl (CheckUrl.java:51) - Protocol 'ftp' not yet implemented -ftp://inexistent.com/q.png, HTTP Status: null -https://www.hdm-stuttgart.de/bilder_navigation/laptop.gif, HTTP Status: OK -http://www.hdm-stuttgart.de/rotfl.gif, HTTP Status: Found</screen> - - <caution> - <para>Notice the response code for - <uri>http://www.hdm-stuttgart.de/rotfl.gif</uri>: This - resource is actually unavailable! But the web server tries to - recover by redirecting to an error page. Moreover a web server - may return misleading response codes if deciding your user - agent is unable to handle the current resource's content type - in question. You may catch a glimpse of related problems by - reading <link - xlink:href="https://stackoverflow.com/questions/1378199/how-to-check-if-a-url-exists-or-returns-404-with-java">How - to check if a URL exists or returns 404 with Java?</link>. For - the current exercise we will not dig deeper into the - subject.</para> - </caution> - - <para>Do not forget to provide unit tests at least for the image - network accessibility part.</para> - - <tip> - <para>Using XPath expressions in conjunction with namespaces - requires appropriate definitions. The following two pages are - helpful:</para> - - <itemizedlist> - <listitem> - <para><link - xlink:href="http://www.studytrails.com/java/xml/jdom2/java-xml-jdom2-namespaces.jsp">Java - XML - JDOM2 - Namespaces</link></para> - </listitem> - - <listitem> - <para><link - xlink:href="http://www.jdom.org/pipermail/jdom-interest/2012-May/016850.html">XPath - examples</link></para> - </listitem> - - <listitem> - <para>For analyzing the accessibility of referenced <xref - linkend="glo_HTTP"/> / <acronym>HTTPS</acronym> resources - see the previously mentioned discussion in <link - xlink:href="https://stackoverflow.com/questions/1378199/how-to-check-if-a-url-exists-or-returns-404-with-java">How - to check if a URL exists or returns 404 with - Java?</link>.</para> - </listitem> - </itemizedlist> - </tip> - </question> - - <answer> - <para>We are interested in the set of images within a given HTML - document containing an <link - xlink:href="https://www.w3.org/Addressing">URL</link> reference - starting with either of:</para> + <para>Write an application which checks for readability of <abbrev + xlink:href="https://www.ietf.org/rfc/rfc1738.txt">URL</abbrev> + image references to <emphasis>external</emphasis> Servers starting + either with <code>http://</code> or <code>https://</code> ignoring + other protocol types. Internal image references referring to the + <quote>current</quote> server typically look like <code><img + src="/images/test.gif"</code>. So in order to distinguish these + two types of references we may use the XSL built in function <link + xlink:href="http://www.cafeconleche.org/books/bible2/chapters/ch17.html">starts-with()</link> + testing for the <code>http</code> or <code>https</code> protocol + definition part of an <abbrev + xlink:href="https://www.ietf.org/rfc/rfc1738.txt">URL</abbrev>. + <code>ftp</code> addresses shall be ignored completely. A possible + output corresponding to the above example reads:</para> + + <screen>xpath.CheckUrl (CheckUrl.java:48) - Protocol 'ftp' not yet implemented +ftp://inexistent.com/q.png, HTTP Status: false +https://www.hdm-stuttgart.de/bilder_navigation/laptop.gif, HTTP Status: true +http://www.hdm-stuttgart.de/rotfl.gif, HTTP Status: false</screen> + + <caution> + <para>Handling <code>http</code> response codes is tricky. + Accessing <uri>http://www.hdm-stuttgart.de/rotfl.gif</uri> + actually yields a 302 (found) status code redirecting to an + error page. The resource is actually unavailable. </para> + + <para>Moreover a web server may return misleading response codes + if deciding your user agent is unable to handle the current + resource's content type in question. You may catch a glimpse of + related problems by reading <link + xlink:href="https://stackoverflow.com/questions/1378199/how-to-check-if-a-url-exists-or-returns-404-with-java">How + to check if a URL exists or returns 404 with + Java?</link>.</para> + + <para>For the current exercise we will refrain from digging + deeper into the subject: Your application shall regard all non - + 200 responses as unsuccessful ignoring the possibility of + successful redirects completely.</para> + </caution> + + <para>Do not forget to provide unit tests.</para> + + <tip> + <para>Using XPath expressions in conjunction with namespaces + requires appropriate definitions. The following two pages are + helpful:</para> <itemizedlist> <listitem> - <para>http://</para> + <para><link + xlink:href="http://www.studytrails.com/java/xml/jdom2/java-xml-jdom2-namespaces.jsp">Java + XML - JDOM2 - Namespaces</link></para> </listitem> <listitem> - <para>https://</para> + <para><link + xlink:href="http://www.jdom.org/pipermail/jdom-interest/2012-May/016850.html">XPath + examples</link></para> </listitem> <listitem> - <para>ftp://</para> + <para>For analyzing the accessibility of referenced <xref + linkend="glo_HTTP"/> / <acronym>HTTPS</acronym> resources + see the previously mentioned discussion in <link + xlink:href="https://stackoverflow.com/questions/1378199/how-to-check-if-a-url-exists-or-returns-404-with-java">How + to check if a URL exists or returns 404 with + Java?</link>.</para> </listitem> </itemizedlist> + </tip> + </question> + + <answer> + <para>We are interested in the set of images within a given HTML + document containing an <link + xlink:href="https://www.w3.org/Addressing">URL</link> reference + starting with either of:</para> + + <itemizedlist> + <listitem> + <para>http://</para> + </listitem> + + <listitem> + <para>https://</para> + </listitem> + + <listitem> + <para>ftp://</para> + </listitem> + </itemizedlist> - <para>This may be achieved by the following <acronym - xlink:href="https://www.w3.org/TR/xpath">XPath</acronym> - expression:</para> + <para>This may be achieved by the following <acronym + xlink:href="https://www.w3.org/TR/xpath">XPath</acronym> + expression:</para> - <programlisting language="xpath">//xhtml:img[starts-with(@src, 'http://') or + <programlisting language="xpath">//xhtml:img[starts-with(@src, 'http://') or starts-with(@src, 'https://') or starts-with(@src, 'ftp://')]</programlisting> - <para>Notice the prefix <quote>xhtml</quote> in the above - <acronym - xlink:href="https://www.w3.org/TR/xpath">XPath</acronym>. - Namespace handling is essential since our elements belong to the - <xref linkend="glo_XHTML"/> namespace. We thus create a - corresponding <classname - xlink:href="http://www.jdom.org/docs/apidocs/org/jdom2/Namespace.html">Namespace</classname> - instance handling the desired one to one correspondence between - the <code>"xhtml"</code> prefix and our target namespace - <uri>http://www.w3.org/1999/xhtml</uri>:</para> - - <programlisting language="java">final Namespace htmlNamespace = // This will allow for XPath - Namespace.getNamespace("xhtml", // expressions like xhtml:img - "http://www.w3.org/1999/xhtml"); - - final XPathExpression<Element> xpath = XPathFactory.instance().compile ( - "//xhtml:img[starts-with(@src, 'http://') or starts-with(@src, - 'https://') or starts-with(@src, 'ftp://')]", - new ElementFilter(), null, htmlNamespace);</programlisting> + <para>Checking for reachability happens in:</para> + + <programlisting language="java">case "http": +case "https": + try { + final HttpURLConnection huc = (HttpURLConnection) url.openConnection(); + huc.setRequestMethod("GET"); + huc.setInstanceFollowRedirects(false); + huc.connect(); + return 200 == huc.getResponseCode(); // ignore redirects + } catch (final IOException e) { + log.error("Unable to connect to " + urlRef, e); +} +break;</programlisting> + + <annotation role="make"> + <para role="eclipse">Sda1/VerifyImgAccess</para> + </annotation> + </answer> + </qandaentry> + </qandadiv> + </qandaset> - <para>Complete solution available at:</para> + <figure xml:id="sda1_dom_fig_domXpathVariables"> + <title>Parameterized search expressions</title> - <annotation role="make"> - <para role="eclipse">Sda1/VerifyImgAccess</para> - </annotation> - </answer> - </qandaentry> - </qandadiv> - </qandaset> - </section> + <programlisting language="java">Map<String, Object> varsNamespacePrefix = new HashMap<>(); +xpathVarsNamespacePrefix.put("cssClass", null); + +XPathExpression<Element> searchCssClass = XPathFactory.instance().compile( + "//h:*[starts-with(@class, $cssClass)]", + new ElementFilter(), null, htmlNamespace); + +searchCssClass.setVariable("cssClass", "header"); +searchCssClass.evaluate(htmlInput) ... + +// Reuse by changing $cssClass +searchCssClass.setVariable("cssClass", "footer"); +searchCssClass.evaluate(htmlInput) ...</programlisting> + </figure> + + <qandaset defaultlabel="qanda" xml:id="sda1QandaVerifyInternalReferences"> + <title><xref linkend="glo_HTML"/> internal reference + verification</title> + + <qandadiv> + <qandaentry> + <question> + <para>Consider the the following sample document:</para> + + <programlisting language="xml" xml:id="domCheckImageAccessibility"><html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>Internal references sample</title> + </head> + + <body><h1 <emphasis role="red">id="start"</emphasis>>Introduction</h1><p>We categorize for <a + <emphasis role="red">href="#nativeExec"</emphasis>>native</a> and <a <emphasis + role="red">href="#vmBased"</emphasis>>VM based</a> <a + href="https://en.wikipedia.org/wiki/Runtime_system">runtimes</a>.</p><h1 + <emphasis role="red">id="languages"</emphasis>>Languages</h1><dl> + <dt <emphasis role="red">id="nativeExec"</emphasis>>Native execution code</dt> + + <dd><ul> + <li>C</li> + + <li>C++</li> + + <li>FORTRAN, see <a <emphasis role="red">href="#noexist"</emphasis>>new section</a>.</li> + </ul></dd> + + <dt <emphasis role="red">id="vmBased"</emphasis>>Virtual machine based</dt> + + <dd><ul> + <li>Java</li> + + <li>Python, see <a <emphasis role="red">href="#newSection"</emphasis>>second new section</a>.</li> + + <li>C#</li> + </ul></dd> + </dl></body> +</html></programlisting> + + <para>This document defines both anchor (target) elements like + <tag class="starttag">h1 id="start"</tag> and local references + like <tag class="starttag">a href="#vmBased"</tag>.</para> + + <para>Notice <tag class="starttag">a + href="https://en.wikipedia.org/wiki/Runtime_system"</tag> not + being highlighted: It does not start with a hash # and is thus not + a document local but an external address.</para> + + <para>Some of these local references like <tag class="starttag">a + href="#noExist"</tag> are ill-defined: There is no matching target + element <tag class="starttag">... id="#vmBased"</tag>. Write an + application which allows for identifying <quote>dead</quote> local + references:</para> + + <screen>matching target id 'nativeExec' found +matching target id 'vmBased' found +Error: matching target id 'noexist' not found +Error: matching target id 'newSection' not found</screen> + + <para>One possible strategy is:</para> + + <orderedlist> + <listitem> + <para>Search for all local <tag class="starttag">a + href="#..."</tag> references.</para> + </listitem> + + <listitem> + <para>For each reference search for a corresponding + anchor.</para> + </listitem> + </orderedlist> + + <para>Both parts may be implemented using <xref + linkend="glo_XPath"/> expressions. For the second task you are + asked to reuse your <classname + xlink:href="http://www.jdom.org/docs/apidocs/org/jdom2/xpath/XPathExpression.html">XPathExpression</classname> + using the technique being described in <xref + linkend="sda1_dom_fig_domXpathVariables"/>.</para> + </question> + + <answer> + <annotation role="make"> + <para role="eclipse">Sda1/VerifyInternalReferences</para> + </annotation> + + <para><code>h</code> denoting the <xref linkend="glo_HTML"/> + namespace prefix we search for local references using:</para> + + <programlisting language="xpath">//h:*[starts-with(@href, '#')]</programlisting> + + <para>This task is quite similar to <xref + linkend="sda1QandaVerifyImgReadable"/>. We create a reusable <xref + linkend="glo_XPath"/> expression searching for targets:</para> + + <programlisting language="xpath">//h:*[starts-with(@id, $" + ID_VAR_KEY + ")]</programlisting> + + <para>Resolving the variable <varname>ID_VAR_KEY</varname> this + actually contains <code>//h:*[starts-with(@id, $targetId)]</code>. + This latter query parameter <varname>$targetId</varname> will be + set each time prior to executing the path expression in <classname + xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/blob/master/P/Sda1/VerifyInternalReferences/src/main/java/dom/xpath/CheckLocalReferences.java">CheckLocalReferences</classname>:</para> + + <programlisting language="java">searchTargetId.setVariable(ID_VAR_KEY, id); +final int targetCount = searchTargetId.evaluate(htmlInput).size();</programlisting> + </answer> + </qandaentry> + </qandadiv> + </qandaset> </section> <section xml:id="domXsl">