diff options
Diffstat (limited to 'RELEASE.html')
-rw-r--r-- | RELEASE.html | 4873 |
1 files changed, 4873 insertions, 0 deletions
diff --git a/RELEASE.html b/RELEASE.html new file mode 100644 index 0000000..8f95e8f --- /dev/null +++ b/RELEASE.html @@ -0,0 +1,4873 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="https://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> +<head> + <title>Raptor RDF Syntax Library - Release Notes</title> +</head> +<body> + +<h1 style="text-align:center">Raptor RDF Syntax Library - Release Notes</h1> + + +<h2 id="rel2_0_16"><a name="rel2_0_16">Raptor2 2.0.16 changes</a></h2> + +<p>Release because ... it's been a while</p> + +<p><a href="https://nvd.nist.gov/vuln/detail/CVE-2017-18926">CVE-2017-18926</a> +fixed in commit 590681e546cd9aa18d57dc2ea1858cb734a3863f</p> + +<p><a href="https://nvd.nist.gov/vuln/detail/CVE-2020-25713">CVE-2020-25713</a> +fixed in commit 4f5dbbffcc1c6cf0398bd03450453289a0979dea</p> + +<p>Issues Fixed:</p> +<ul> +<li><a href="https://bugs.librdf.org/mantis/view.php?id=600">0000600</a>: Can't compile on Cygwin: sort_r.h "Cannot detect operating system"</li> +<li><a href="https://bugs.librdf.org/mantis/view.php?id=606">0000606</a>: "JSON" format outputs invalid Unicode escapes</li> +<li><a href="https://bugs.librdf.org/mantis/view.php?id=617">0000617</a>: heap buffer overflow in raptor_qname_format_as_xml</li> +<li><a href="https://bugs.librdf.org/mantis/view.php?id=618">0000618</a>: heap buffer overflow in raptor_xml_writer_start_element_common</li> +<li><a href="https://bugs.librdf.org/mantis/view.php?id=650">0000650</a>: Out of bounds read leads to segfault in raptor_xml_writer_start_element_common</li> +<li><a href="https://bugs.librdf.org/mantis/view.php?id=652">0000652</a>: Manpage for the rapper utility describes the wrong Atom version</li> +</ul> + + +<h3>Parser changes</h3> + +<p>The Turtle parser was improved to process input in chunks, rather +than all in one step (with a large memory buffer). This allows +Turtle to read and parse files much larger than the system memory; it +splits the inputs after the end of a turtle "sentence" that ends in a +<code>.</code>. Includes memory usage minimizing with AVLTree +pruning during serializing and addition of turtle serializer flush +implementation. + +This improvment across multiple patches was contributed by +<a href="https://github.com/hroptatyr">Sebastian Freundt</a>. Thanks +<a href="https://github.com/dajobe/raptor/pull/37">Pull Request #37</a> +<a href="https://github.com/dajobe/raptor/pull/38">Pull Request #38</a> +</p> + +<p>Turtle parser improvements for Bison 3+ and removing deprecated or +older style directives. +Thanks to fix from <a href="https://github.com/akimd">Akim Demaille</a> +<a href="https://github.com/dajobe/raptor/pull/43">Pull Request #43</a> +</p> + +<p>Turtle parser fixes for cleaning up va_arg on failure paths. +[coverity CID 343351] +</p> + +<p>grddl parser: fix leak on failure paths of WWW model methods +[coverity CID 343353] +</p> + + +<h3>Serializer changes</h3> + +<p>Added a serializer for the +<a href="http://contextknowledgesystems.org/CKS.html">mKR (my Knowledge Representation)</a> +language with the name <code>mkr</code> Patch developed by Richard +H. McCullough based on the Turtle serializer. Thanks. +<a href="https://github.com/dajobe/raptor/pull/25">Pull Request #25</a> +</p> + +<p>XML writer calculate max nspace declarations correctly. +Fixes Issues +<a href="https://bugs.librdf.org/mantis/view.php?id=617">#0000617</a> +and +<a href="https://bugs.librdf.org/mantis/view.php?id=618">#0000618</a> +</p> + +<p>JSON writer changed to write UTF-8 for JSON literals +Add <code>RAPTOR_ESCAPED_WRITE_BITFLAG_UTF8</code> to +<code>RAPTOR_ESCAPED_WRITE_JSON_LITERAL</code> +Fixes Issue +<a href="https://bugs.librdf.org/mantis/view.php?id=606">#0000606</a> +</p> + +<p>rdfxmla serializer was fixed to handle leak of iter object on some +failure pathes. [coverity CID 343354] [coverity CID 343358] +</p> + +<p>Fix for RSS 1.0 serializing default namespaces.</p> + +<h3>Writer changes</h3> + +<p>XML Writer: compare namespace declarations correctly. Applied a patch from +0001-CVE-2020-25713-raptor2-malformed-input-file-can-lead.patch.1 +that fixes +Issue <a href="https://bugs.librdf.org/mantis/view.php?id=650">#0000650</a> +which overwrote heap during XML writing in parse type literal +content. This was detected with clang asan. Thanks to fix from Michael Stahl +/ mst2. +</p> + +<h3>Build and portability fixes</h3> + +<p>CMake fixes</p> +<ul> +<li>Fix cmake builds for time.h check change, generated pc file. +Thanks to fix from <a href="https://github.com/Artturin">Artturin</a>. +<a href="https://github.com/dajobe/raptor/pull/52">Pull Request #52</a> +</li> + +<li>Multiple cmake build fixes. Thanks to multiple changes from +<a href="https://github.com/mathvich">mathvich</a>. +<a href="https://github.com/dajobe/raptor/pull/50">Pull Request #50</a> +</li> + +<li>Multiple fixes for Appveyor's Windows build using CMake +Thanks to fix from <a href="https://github.com/0u812">0u812</a>. +</li> + +<li>Multiple fixes for Cmake build system to allow building from +source including running flex, bison and running the tests. +Thanks to fix from <a href="https://github.com/0u812">0u812</a>. +</li> + +<li>Made Raptor build again with CMake under Windows via CI as a +service Appveyor. The resulting binaries and libraries were not +tested.</li> +</ul> + +<p>Remove and fix obsolete autoconf: AC_PROG_LEX AC_HEADER_TIME AC_HEADER_STDC. +</p> + +<p>Update bison check to find first new enough GNU bison</p> + +<p>Fix configure.ac <code>-Wimplicit-function-declaration</code> in +<code>HAVE___FUNCTION__</code> test to provide Clang 16 support. Fix +from Sam James, thanks. +</p> + +<p>Support newer ICU UC version (>=56) for newer NFC check +interface <code>unorm2_quickCheck()</code>..</p> + +<p>Several minor fixes and workarounds for clang ASAN warnings or +false warnings - not able to understand raptor's reference model.</p> + +<p>Updated fix-flex.pl script for newer flex naming conventions.</p> + +<p>Portability fixes found with GCC 10 and newer compilers for wrong +error message callbacks in turtle and grddl parsers +</p> + +<p>Later, updated to make bison 3.4 the minimum.</p> + +<p>Update turtle parser and support scripts to work with Bison 3.0.5 +Patch contributed by Adam Novak. Thanks. +<a href="https://github.com/dajobe/raptor/pull/39">Pull Request #39</a> +</p> + +<p>Fix GNUInstallDirs for install paths to be able to install +libraptor2.a and raptor2.pc to a specific directory when +cross-compiling. Thanks to fix from +<a href="https://github.com/ariadnext">Eric Le Lay</a>. +<a href="https://github.com/dajobe/raptor/pull/36">Pull Request #36</a> +</p> + +<p>Made some code changes to quiet GCC extra warnings.</p> + +<p>Portability fixes for OpenBSD</p> + +<p>Some portability for building under cygwin by Richard +H. McCullough while developing the mkr serializer. +</p> + +<p>Portability fixes in the <code>raptor2.spec</code> file. +Thanks to fix by <a href="https://github.com/philjohn">philjohn</a> +</p> + +<p>Enable <code>pkg-config</code> to work when cross-building such as +with yocto. Thanks to fix by Andreas Müller. +</p> + +<p>Use only pkgconfig for libxslt and ICU UC. Patches from Hugh +McMaster. Thanks. +</p> + +<p>Updated Travis configuration to try builds across a wider range of +compilers and with clang ASAN enabled.</p> + + + +<h3>Other changes</h3> + +<p>Handle deleting empty avltree. Fixes invalid pointer reference +reported by Li Qiang via email. Thanks. +</p> + +<p>Change <code>rapper(1)</code> utility to count in longs instead of +ints. Because: billions and billions of triples. Thanks to patch +from <a href="https://github.com/JervenBolleman">Jerven Bolleman</a>. +</p> + +<p>Accept cygwin as a Linux-like. +Fixes Issue <a href="https://bugs.librdf.org/mantis/view.php?id=600">#0000600</a>. +</p> + +<p>Mention Atom 0.3 in docs and manual page +Fixes Issue <a href="https://bugs.librdf.org/mantis/view.php?id=652">#0000652</a>. +</p> + +<p>Check <code>curl_easy_setopt()</code> return values for errors In +several places check for <code>curl_easy_setopt()</code> erorr +returns and fail. [coverity CID 343360] +</p> + +<p>Fixed internal ICU string NFC check to convert to UTF-16 first +before trying to do a NFC normalization check. This allows returning +an error response. +</p> + +<p><code>raptor_uri_counted_filename_to_uri_string()</code> fix to +copy NUL when copying the <code>file://</code>code prefix. Coverity +false positive since the following lines of code always add more +characters and a NUL. "Fixes" [Coverity CID 353858] +</p> + + +<h2 id="rel2_0_15"><a name="rel2_0_15">Raptor2 2.0.15 changes</a></h2> + + +<p>This release mainly made general bug fixes as well as several +fixes to the Turtle / N-Triples family of parsers and serializers. It +added utility functions for re-entrant sorting of objects and +sequences and a few other useful methods.<br /> +</p> + + +<p>Issues Fixed:</p> +<ul> +<li><a href="https://bugs.librdf.org/mantis/view.php?id=574">0000574</a>: Language tags with underscore</li> +<li><a href="https://bugs.librdf.org/mantis/view.php?id=575">0000575</a>: Wrong API or wrong API documentation</li> +<li><a href="https://bugs.librdf.org/mantis/view.php?id=576">0000576</a>: Wrong assert for a counted string being nul terminated</li> +<li><a href="https://bugs.librdf.org/mantis/view.php?id=577">0000577</a>: iri parsing does not conform to REC-n-quads-20140225</li> +<li><a href="https://bugs.librdf.org/mantis/view.php?id=579">0000579</a>: raptor_world_generate_bnodeid accepts world not parser</li> +<li><a href="https://bugs.librdf.org/mantis/view.php?id=581">0000581</a>: My patch for parser and serializers count</li> +<li><a href="https://bugs.librdf.org/mantis/view.php?id=584">0000584</a>: raptor fails to parse trig files with dos line endings</li> +</ul> + + +<h3>Parser changes</h3> + +<p>Fixed <code>raptor_grddl_filter_triples()</code> check for three +URIs which has been broken since 2007 but just did more work. Found +via gcc5 warning.</p> + +<p>The TRiG parser now accepts \r newlines between the graph name and +the following '{'. +Fixes <a href="https://bugs.librdf.org/mantis/view.php?id=584">Issue #0000584</a> +</p> + +<p>Turtle, TRiG, N-Triples and N-Quads parsers now check escapes +correctly for URI strings. \t \b \n \r \f are forbidden. Check that +raw ' ' or \u0020, \u003C or \u003E are also not accepted. +Fixes <a href="https://bugs.librdf.org/mantis/view.php?id=577">Issue #0000577</a> +</p> + +<p>N-Triples / N-Quads parsers nwo accept '_' as an alias for '-' in +lang strings. '_' is not legal. +Fixes <a href="https://bugs.librdf.org/mantis/view.php?id=574">Issue #0000574</a> +</p> + +<p>Updated RDFa parser (librdfa) to support full URLs for +<code>typeof</code> from upstream. Re-checked several tests which +have been passing for some time but the expected output was not a +correct conversion from the testsuite sparql.</p> + +<h3>Serializer changes</h3> + +<p>Turtle serializer now writes <code>()</code> instead of +<code>rdf:nil</code> via +<a href="https://github.com/dajobe/raptor/pull/16">Pull Request #16</a> +from Richard H. McCullough. Thanks! +</p> + +<h3>I/O-stream class changes</h3> + +<p><code>raptor_iostream_decimal_write()</code> and +<code>raptor_iostream_hexadecimal_write</code> now return non-0 if +they do not succeed in writing successfully. +Fixes <a href="https://bugs.librdf.org/mantis/view.php?id=575">Issue #0000575</a> +</p> + +<h3>Term class changes</h3> + +<p><code>raptor_new_term_from_blank()</code> now also accepts "" as +the same as a NULL blank node ID argument.</p> + +<h3>URI class changes</h3> + +<p>Fixed <code>raptor_uri_counted_filename_to_uri_string()</code> to +use the passed in len, not look for end NUL char and count lengths. +Fixes <a href="https://bugs.librdf.org/mantis/view.php?id=576">Issue #0000576</a>. +</p> + +<p><code>raptor_new_uri_from_counted_string()</code> no longer +assumes a NUL terminated string. Remove a debug assert and use +<code>fwrite()</code> to emit the counted URI string to the debug +file handler.</p> + +<p>Fixed <code>raptor_uri_normalize_path()</code> to check the size of +output buffer is big enough.</p> + +<h3>Writer class changes</h3> +<p>Fixed <code>raptor_turtle_writer_quoted_counted_string()</code> to +use the passed in length, drop the <code>strlen()</code> call and use +the length internally. +Fixes <a href="https://bugs.librdf.org/mantis/view.php?id=576">Issue #0000576</a>. +</p> + +<h3>World class changes</h3> + +<p>Added <code>raptor_world_get_parsers_count()</code> +and <code>raptor_world_get_serializers_count()</code> +with patch from Victor Porton. Thanks! +Fixes <a href="https://bugs.librdf.org/mantis/view.php?id=581">Issue #0000581</a>.</p> + +<h3>Other Changes</h3> + +<p>Made raptor work with Travis CI again; have to download and +install Bison 3.</p> + +<p>Added <code>raptor_sort_r()</code> and +<code>raptor_sequence_sort_r()</code> re-entrant sort utility methods +based on the public domain <a +href="https://github.com/noporpoise/sort_r">sort_r</a> code by Isaac +Turner. +</p> + +<p>Ensure <code>raptor_locator_format()</code> always adds a NUL to +terminate the output string.</p> + +<p>Fix a -99 <= var <= 99 timezone interval check. Thanks to +Richard Trieu for the report.</p> + +<p>Improve configure warning check using AC_LANG_WERROR</p> + +<p>Use C99 <code>__FUNCTION__</code> replacing <code>__func__</code> +from C90.</p> + +<p>Improve build-time flex and bison output to be more silent.</p> + +<p>Added Intel C compiler (icc) support from Sebastian Freundt +(hroptatyr on GitHub) - Thanks.</p> + + +<h2 id="rel2_0_14"><a name="rel2_0_14">Raptor2 2.0.14 changes</a></h2> + +<p>Many code quality fixes from clang and coverity primarily in error +path cleanups (out of memory cases) and dead code.</p> + +<h3>Parser changes</h3> + +<p>Turtle 1.1 parser: fixes about triple quoting alignment with +SPARQL from the www-rdf-comments list post REC +<a href="http://lists.w3.org/Archives/Public/public-rdf-comments/2014Feb/0018.html">report of problem</a> +and +<a href="http://lists.w3.org/Archives/Public/public-rdf-comments/2014Feb/0021.html">expected answer</a>. +</p> + +<h3>Other changes</h3> + +<p>Fixed RDFa 1.0 and RDFa 1.1 test suites to properly report +failures.</p> + +<p>Updated the fix-flex and fix-bison scripts to remove dead +code that clang and coverity complain about.</p> + + +<h2 id="rel2_0_13"><a name="rel2_0_13">Raptor2 2.0.13 changes</a></h2> + +<p>Issues Fixed:</p> +<ul> +<li><a href="https://bugs.librdf.org/mantis/view.php?id=562">0000562</a>: N-Quads parsing of URIs with ' fails</li> +</ul> + +<h3>Parser changes</h3> + +<p>The N-Triples / N-Quads parser was updated to allow ' in URIs. +Fixes <a href="https://bugs.librdf.org/mantis/view.php?id=562">Issue #0000562</a>. +</p> + +<h3>Configuration changes</h3> + +<p>Use the discovery of the <code>xml2-config(1)</code> / +<code>curl-config(1)</code> programs as test for presence of the +libraries. This fixes the issue where that after configuring, curl +was present but was not used for WWW fetching. This is seen when +the output of <code>curl-config --cflags</code> is empty / whitespace. +</p> + +<p>Updated to use the <code>AC_CHECK_PROGS</code> macro to find jing +since <code>AC_CHECK_PROG</code> doesn't default to setting it as +found when present! +</p> + +<h3>Internal changes</h3> + +<p>The Turtle and parsedate parsers and the turtle lexer were updated +to use and require Bison 3.0.0. +</p> + +<p>The JSON and turtle writers were updated to save several expensive +<code>strlen()</code> calls.</p> + + +<h2 id="rel2_0_12"><a name="rel2_0_12">Raptor2 2.0.12 changes</a></h2> + +<h3>Parser changes</h3> + +<p>The N-Triples / N-Quads parser was updated to pass all the two test +suites for the updated specifications: +</p> +<ul> +<li><a href="https://www.w3.org/TR/2013/CR-n-triples-20131105/">RDF 1.1 N-Triples - A line-based syntax for an RDF graph</a>, W3C Candidate Recommendation, 05 November 2013 (aka N-Triples 2013)</li> +<li><a href="https://www.w3.org/TR/2013/CR-n-quads-20131105/">RDF 1.1 N-Quads - A line-based syntax for an RDF datasets</a>, W3C Candidate Recommendation, 05 November 2013</li> +</ul> +<p>The main fixes were:</p> +<ul> +<li>allow <code>\b</code> and <code>\f</code> escapes (from Turtle, SPARQL)</li> +<li>fix the allowed blank node identifier characters</li> +<li>require all URIs to be absolute</li> +<li>handle a single short document with no end of line</li> +<li>support NULs inside literals</li> +<li>handle unescaped newlines inside literals</li> +</ul> + +<h3>Term class changes</h3> + +<p>Added <code>raptor_new_term_from_counted_string()</code> to +create a term from a Turtle or N-Triples string syntax. This is +the opposite of <code>raptor_term_to_turtle_counted_string()</code> +and <code>raptor_term_to_turtle_string()</code> and also reads the +strings created by <code>raptor_term_to_counted_string()</code> and +<code>raptor_term_to_string()</code>. +</p> + + +<h2 id="rel2_0_11"><a name="rel2_0_11">Raptor2 2.0.11 changes</a></h2> + +<p>Issues Fixed:</p> +<ul> +<li><a href="https://bugs.librdf.org/mantis/view.php?id=556">0000556</a>: Problem with relative URI in rdf:about, rdf:resource etc.</li> +<li><a href="https://bugs.librdf.org/mantis/view.php?id=554">0000554</a>: RDF/XML serializer does not canonicalize attribute order in XMLLiterals</li> +</ul> + +<h3>Parser changes</h3> + +<p>N-Triples parser was updated to support all of +<a href="https://www.w3.org/TR/2013/CR-n-triples-20131105/">RDF 1.1 +N-Triples - A line-based syntax for an RDF graph</a> (aka N-Triples 2013) +It now supports <code># comments</code> after the end of +lines, checks for illegal unicode escapes, checks for bad URIs and +checks language tags. +Also removed support for legacy N-Triples +<code>"foo"-LANGTOKEN</code>. +Many internal changes were also made. +</p> + +<p>RDF/XML parser fixed the XML Canonicalization so that it writes +the XML attributes in sorted order. +Fixes +<a href="https://bugs.librdf.org/mantis/view.php?id=554">Issue #0000554</a>. +</p> + +<h3>URI class changes</h3> +<p>Added <code>raptor_uri_uri_string_is_absolute()</code> to +check if a URI is absolute.</p> + +<h3>QName class changes</h3> + +<p>Added <code>raptor_qname_format_as_xml()</code> to turn a qname +into an XML declaration. +</p> + +<h3>Configuration and build changes</h3> + +<p>Restructured code to build an internal librdfa convenience library +(never installed) so that newer automake will stop moaning about +subdir-objects. +</p> + +<p><code>configure</code> now checks for clang to correctly find +supported warnings.</p> + +<p>Various portability and build fixes (Daniel Richard G)</p> + +<p>Build fixes: <code>make check</code> will now work if jing is not +installed (for feed XML generation validation). +</p> + +<h3>Other changes</h3> + +<p>Fixed a few issues found with LLVM 3.4 (SVN) run with address +sanitizing.</p> + + +<h2 id="rel2_0_10"><a name="rel2_0_10">Raptor2 2.0.10 changes</a></h2> + +<p>Issues Fixed:</p> +<ul> +<li><a href="https://bugs.librdf.org/mantis/view.php?id=532">0000532</a>: configure.ac: required file `src/raptor_config.h.in' not found</li> +<li><a href="https://bugs.librdf.org/mantis/view.php?id=535">0000535</a>: configure accepts bogus values for --with-xml2-config</li> +<li><a href="https://bugs.librdf.org/mantis/view.php?id=545">0000545</a>: Reopen issue 503</li> +<li><a href="https://bugs.librdf.org/mantis/view.php?id=548">0000548</a>: xml:lang inside rdf:parseType="Literal" are removed in parsed output</li> +</ul> + +<h3>Parser changes</h3> + +<p>Turtle parser was updated to handle +<a href="https://www.w3.org/TR/2013/CR-turtle-20130219/">Turtle Terse RDF Triple Language</a> W3C Candidate Recommendation 19 February 2013 +(Turtle 2013) +The main changes were to align with SPARQL-style blank node names, +prefixes and local names. +</p> + +<p>N-Triples parser was updated to handle +<a href="https://www.w3.org/TR/2013/NOTE-n-triples-20130409/">N-Triples - A line-based syntax for an RDF graph</a> W3C Working Group Note 09 April 2013 (N-Triples 2013) +The main changes were to allow \b \f, UTF-8 in strings and +URIs and the SPARQL-style blank node names.</p> + +<p>RDF/XML parser updated to understand the new RDF 1.1 datatypes: +rdf:HTML and rdf:langString</p> + + +<h3>Serializer changes</h3> + +<p>Updated N-Triples and Turtle serializers (via writers) for 2013 +versions based on SPARQL 1.1 definitions. These new formats +have incompatible changes. +</p> + +<p>Added functions for writing escaped Turtle / N-Triples terms:</p> +<pre> +int raptor_string_escaped_write(const unsigned char *string, + size_t len, const char delim, unsigned int flags, raptor_iostream *iostr); + +int raptor_term_escaped_write(const raptor_term *term, unsigned int flags, + raptor_iostream* iostr); + +int raptor_uri_escaped_write(raptor_uri* uri, raptor_uri* base_uri, + unsigned int flags, raptor_iostream *iostr); +</pre> +<p>These uses the new new <code>raptor_escaped_write_bitflags</code> +enum bitflag values for the <code>flags</code> argument.</p> + +<p>Deprecated <code>raptor_string_python_write()</code> for +<code>raptor_string_escaped_write()</code> with flags.</p> + + +<h3>Configuration and build changes</h3> + +<p><code>configure</code> now recommends flex 2.5.36</p> + +<p><code>configure</code> was updated to switch configuring libxml +and libcurl to use the <code>PKG_PROG_PKG_CONFIG</code> and +<code>PKG_CHECK_MODULES</code> macros. The preference remains to +prefer looking for the xml2-config and curl-config programs before +trying pkg-config unless <code>--with-curl-config=no</code> +<code>--with-xml2-config=no</code> are used. +</p> + +<p><code>configure</code> now dies if xml2-config or xslt-config +point at non executable files. Patch from Michael Stahl - thanks. +Fixes <a href="https://bugs.librdf.org/mantis/view.php?id=535">Issue #0000534</a> +</p> + +<p><code>configure</code> now adds curl or libxml pkg-config requires +only if they were found via pkg-config; this prevents unnecessary +dependency on pkg-config files if they are not needed.</p> + +<p>Updated autogen.sh and code to handle variations of header +macro. +Fixes <a href="https://bugs.librdf.org/mantis/view.php?id=532">Issue #0000532</a> +</p> + + + +<h2 id="rel2_0_9"><a name="rel2_0_9">Raptor2 2.0.9 changes</a></h2> + +<p>Issues Fixed:</p> +<ul> +<li><a href="https://bugs.librdf.org/mantis/view.php?id=499">0000499</a>: Turtle parser fails to correctly parse valid syntax</li> +<li><a href="https://bugs.librdf.org/mantis/view.php?id=508">0000508</a>: Raptor objects to possibly valid Turtle syntax</li> +<li><a href="https://bugs.librdf.org/mantis/view.php?id=520">0000520</a>: compilation failure</li> +<li><a href="https://bugs.librdf.org/mantis/view.php?id=521">0000521</a>: Python RDF 1.0.14.1 segfault when one tries to parse xhtml+rdf using the RDFa parser</li> +<li><a href="https://bugs.librdf.org/mantis/view.php?id=526">0000526</a>: Document how to find gtkdocize in INSTALL.html</li> +</ul> + + +<h3>Parser Changes</h3> + +<p>RDFa parser: +Handle non-namespaced elements without crash in RDFa. +Fixes <a href="https://bugs.librdf.org/mantis/view.php?id=521">Issue #0000521</a> +</p> + +<p>Turtle Parser: Added full support for +<a href="https://www.w3.org/TR/2013/CR-turtle-20130219/">Turtle Terse RDF Triple Language</a> W3C Candidate Recommendation 19 February 2013 +</p> + +<p>This includes accepting new keywords from SPARQL +(<code>BASE</code> and <code>PREFIX</code>), triples forms and +details of the characters allowed in URIs, Literals, Prefix Names, +Local Names and Blank Node identifiers. Some existing documents that +used <code>\</code>-escapes in URIs to encode characters not allowed +in URIs, are now forbidden. For example ASCII 32 (0x20) - space, +which should be written as <code>%20</code>. +</p> + + +<h3>Serializer changes</h3> + +<p>Turtle Serializer: Added full support for +<a href="https://www.w3.org/TR/2013/CR-turtle-20130219/">Turtle Terse RDF Triple Language</a> W3C Candidate Recommendation 19 February 2013 +which particular effects the encoding of URIs in the serializer. +</p> + + +<h3>Configuration and build changes</h3> + +<p>Added CMake build framework for building Raptor on Microsoft +Windows. Removed the old <code>win32/</code> area and +<code>win32_raptor_config.h</code> references. Contributed by Daniel +Richard G. for Teragram Inc. +</p> + +<p>Ensure that a small system BUFSIZ does not affect parser guessing +Patch from Daniel Richard G for Teragram Inc.</p> + +<p>Added a compile-time check for +<code>raptor_world_guess_parser_name()</code> to ensure that +<code>RAPTOR_READ_BUFFER_SIZE</code> is at least as large as +<code>FIRSTN</code>, because otherwise the guesser sees fewer than +<code>FIRSTN</code> bytes from the document. Patch from Daniel +Richard G for Teragram Inc. +</p> + +<p>Update <code>configure</code> to allow xml2-config and curl-config +to work for libxml and libcurl. It now report on the source of xml, curl +libraries in the configuration status.</p> + +<p><code>autogen.sh</code> updates to abort the run if a configuring +program fails, Generate NEWS with old timestamp if missing so +automake can run.</p> + +<p>Handle the libxml2 <code>ret->checked</code> field not being +present in older libxml2 versions. The entities checked field was +added 2006-10-10 in <a href="http://git.gnome.org/browse/libxml2/commit/?id=a37a6ad91a61d168ecc4b29263def3363fff4da6and">libxml2 GIT commit a37a6ad91a61d168ecc4b29263def3363fff4da6and</a> +released in libxml2 2.6.27 on 2006-10-25. +Fixes <a href="https://bugs.librdf.org/mantis/view.php?id=520">Issue #0000520</a> +</p> + + +<h3>Other changes</h3> + +<p><code>raptor_www_set_ssl_verify_options()</code> now supports the +Curl 7.28.1 removal of <code>CURLOPT_SSL_VERIFYHOST</code> with a +value of 2. Now <code>verify_host</code> non-0 means to verify CN, 0 +means to not verify.</p> + +<p>Remove <code>-m MODE</code> from the <code>rapper(1)</code> help +message which was removed in commit +f94fa561db05b21132b14a2b72f05b77e666c252 on Wed Apr 28 21:31:54 2010 +-0700 as part of the Raptor V2 work. +</p> + + +<h2 id="rel2_0_8"><a name="rel2_0_8">Raptor2 2.0.8 changes</a></h2> + +<p>Issues Fixed:</p> +<ul> +<li><a href="https://bugs.librdf.org/mantis/view.php?id=381">0000381</a>: Raptor incorrectly serializes turtle lists when list nodes are URIs.</li> +<li><a href="https://bugs.librdf.org/mantis/view.php?id=487">0000487</a>: Does raptor_world_guess_parser_name [librdf_parser_guess_name2] ever return NULL?</li> +<li><a href="https://bugs.librdf.org/mantis/view.php?id=505">0000505</a>: Parsing certain escaped unicode strings in Turtle cases an error</li> +<li><a href="https://bugs.librdf.org/mantis/view.php?id=507">0000507</a>: Turtle parse error causes fatal error</li> +</ul> + +<h3>Parser class changes</h3> + +<p>Guessing a parser with +<code>raptor_world_guess_parser_name()</code> now returns NULL failure +when the guess is very poor, rather just return the first bad result. +Fixes +<a href="https://bugs.librdf.org/mantis/view.php?id=487">Issue #0000487</a> +which was reported in <a href="https://librdf.org/">Redland librdf</a> but +is implemented here. +</p> + +<p>Guess parser: now returns error file and line location information +from the guessed parser.</p> + +<p>RDFa parser: Updated <a href="https://github.com/rdfa/librdfa">librdfa</a> +to the latest GIT supporting +<a href="https://www.w3.org/TR/2012/REC-rdfa-core-20120607/">RDFa 1.1</a> +with 30 tests still not passing - mostly issues in the core librdfa. +Made several resilience and crash fixes. Updated the RDFa 1.0 test +suite to latest tests and made fixes. The RDFa parser now accepts +aliases 'rdfa10', 'rdfa11' and the default 'rdfa' is RDFa 1.1 +</p> + +<p>RSS tag soup parser: Use <code>time()</code> when +<code>gettimeofday()</code> is not available. Fix several reference +leaks. +</p> + +<p>RDF/XML parser: The range of RDF/XML entity recognizing heuristic was +broadened to allow recognition of documents produced by Stanford's +Protege software (and possibly others). Fixed some parser memory +leaks / double frees. +</p> + +<p>Turtle parser: Do not report multiple errors for Turtle string decoding +problems. When a Turtle qname cannot be found, a fatal error is no +longer generated but a regular error message giving information on +the qname that failed (usually due to unknown prefix). +Fixes <a href="https://bugs.librdf.org/mantis/view.php?id=507">Issue #0000507</a> +</p> + + +<h3>SAX2 API changes</h3> + +<p><code>raptor_sax2_inscope_xml_language()</code> will now return "" +for explicit no language (<code>xml:lang=""</code>) as well as NULL +for undefined language (no <code>xml:lang</code> present). +</p> + + +<h3>Serializer class changes</h3> + +<p>Turtle: Do not emit a Turtle <code>(...)</code> collection if the +list item is a URI. This fixes +<a href="https://bugs.librdf.org/mantis/view.php?id=381">Issue #0000381</a>. +</p> + + +<h3>Term class changes</h3> + +<p>Added <code>raptor_term_to_turtle_counted_string()</code> counted +string form of <code>raptor_term_to_turtle_string</code>. +</p> + + +<h3>Unicode class changes</h3> + +<p><code>raptor_unicode_utf8_string_put_char()</code> and +<code>raptor_unicode_utf8_string_get_char()</code> +now allow reading / writing U+D800 to U+DFFF (UTF-16 surrogates). +rather than returning failure. BOMs remain forbidden - definitely not UTF-8. +Fixes <a href="https://bugs.librdf.org/mantis/view.php?id=505">Issue #0000505</a> +</p> + + +<h3>URI class changes</h3> + +<p>Fixed URI resolving with reference (relative) URIs that are bare +queries like '?y' with no path. Now matches the specification +RFC3986 section 5.4.1 Normal Examples. +</p> + +<p>Added <code>raptor_new_uri_relative_to_base_counted()</code> +to construct URI relative to current base. +</p> + +<p>Added <code>raptor_uri_to_turtle_counted_string()</code> counted +string form of <code>raptor_uri_to_turtle_string</code>. +</p> + + +<h3>WWW class changes</h3> + +<p>The Curl WWW implementation now interprets +<code>Content-Location</code>code> header as absolute or relative URI. +</p> + + +<h3>Configuration and build changes</h3> + +<p>All configure --with-foo options now handle --without-foo (and +--with-foo=no) to disable attempting to find the value in the PATH. +This can be used with --with-xml2-config, --with-xslt-config, +--with-curl-config, --with-icu-config and --with-libwww-config where +the value 'no' or --without-foo can be used to disable it and prevent +automatic searches for the config script in the PATH. +</p> + +<p>The <code>-DRAPTOR_DEBUG</code> and <code>-DMAINTAINER_MODE</code> +flags are now written to the config header instead of added to +CPPFLAGS. +</p> + +<p>The <code>-g</code> flag is no longer added to CFLAGS or CPPFLAGS +with <code>--enable-debug</code>.</p> + +<p>The existing <code>--disable-release</code> (default) now +correctly removes -O options in flag variables for the maintainer. +</p> + +<p><code>autogen.sh</code> now looks for the environment variable +<code>NOCONFIGURE</code> to prevent it running configure at the end +of the auto generation run. +</p> + +<p>The <code>configure</code> vsnprintf() check was made more +comprehensive. +</p> + + +<h3>Other changes</h3> + +<p>Multiple portability improvements to vsnprintf code and macros. +Also fixed uninitialized variable problems in non-c99 variant of +raptor_vsnprintf2(). Thanks to John Emmas for reporting. +</p> + +<p>Multiple portability fixes for building out of the source tree. +Out of source tree 'make check' and 'make dist' should both work. +Thanks to Daniel Richard G. for the patches. +</p> + +<p>Multiple portability fixes for building on old Solaris versions. +Thanks to Daniel Richard G. for the patches. +</p> + +<p>Multiple portability fixes for building on Windows including +strcasecmp(), windows headers, configuration fixes, parsedate code, +URI test builds, vsnprintf building. Thanks to Daniel Richard G. +for the patches. +</p> + +<p>Updated the example <code>rdfguess</code> to accept a file called +or no arguments to read from stdin.</p> + + +<h2 id="rel2_0_7"><a name="rel2_0_7">Raptor2 2.0.7 changes</a></h2> + +<p>CVE-2012-0037 fixed</p> + +<p>Issues Fixed:</p> +<ul> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=448">0000448</a>: Turtle parser does not return error status from turtle_parse_chunk()</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=469">0000469</a>: Allow rapper to bypass server SSL certs checks in libcurl</li> +</ul> + +<p>Removed Expat support since expat has not had a release in years +and libxml2 works well. This allows some code simplification. +Updated <code>configure</code> so that if Raptor is configured with +no parser that requires an XML parser, libxml2 will not be required. +</p> + +<p>Removed internal Unicode NFC checking code used for checking +RDF/XML literals conformance which was expensive to check and a large +of compiled-in static dataset that was rather out of date. Replaced +with optional compiled use of <a href=https://icu.unicode.org">ICU</a>. +If ICU is not explicitly configured, no literal checking is done.</p> + +<h3>Options changes</h3> + +<p>Added new options:</p> +<dl> + <dt><code>RAPTOR_OPTION_NO_FILE</code><br/></dt> + <dd>Deny file requests during parsing. Enabled by default.</dd> + + <dt><code>RAPTOR_OPTION_LOAD_EXTERNAL_ENTITIES</code><br/></dt> + <dd>Allow loading of XML external entity loading. Disabled by + default.</dd> + + <dt><code>RAPTOR_OPTION_WWW_SSL_VERIFY_PEER</code><br/></dt> + <dd>Controls verifying an SSL peer during parsing / WWW. Takes an + integer value: non-0 to verify peer SSL certificate (default + 1).</dd> + + <dt><code>RAPTOR_OPTION_WWW_SSL_VERIFY_HOST</code><br/></dt> + <dd>Controls verifying an SSL host during parsing / WWW. Takes an + integer value: 0 none, 1 CN match, 2 host match (default). Other + values are ignored.</dd> +</dl> + + +<h3>Parser class changes</h3> + +<p>The RDF/XML, RSS Tag Soup and RDFa parsers now pass on network, +file and entity loading parser options to the internal SAX2 to enable +enforcing of network, file and entity loading policy.</p> + +<p>RDF/JSON parser handles an API change between YAJL V1 and V2. +</p> + +<p>Turtle parser now returns parser errors to +<code>raptor_parse_chunk()</code>. +Fixes <a href="https://bugs.librdf.org/mantis/view.php?id=488">Issue #0000488</a> +</p> + + +<h3>SAX2 class changes</h3> + +<p>Added <code>raptor_sax2_set_uri_filter()</code> to set a URI +filter for any SAX2 calls that do internal lookups of URIs. +</p> + +<p>Control file and network loading inside SAX2. Option +<code>RAPTOR_OPTION_LOAD_EXTERNAL_ENTITIES</code> now enforces +loading external XML entities and is by default enabled. If enabled, +<code>RAPTOR_OPTION_NO_FILE</code> and +<code>RAPTOR_OPTION_NO_NET</code> are also checked. All URIs loaded +are also passed through any URI filter, if set by +<code>raptor_sax2_set_uri_filter()</code>. +</p> + +<h3>URI class changes</h3> + +<p>Added new URI constructor +<code>raptor_new_uri_from_uri_or_file_string()</code> +to build a URI from a URI string or a filename string, normalizing +the result to a <code>file:</code> URI. +</p> + +<p>Added +<code>raptor_uri_uri_string_to_counted_filename_fragment()</code> to +turn a URI string to a filename and URI fragment along with string +output string counts. +</p> + +<p>Added utility methods for checking if a file: URI or filename is a +file that exists: +<code>raptor_uri_file_exists()</code> and +<code>raptor_uri_filename_exists()</code> +</p> + + +<h3>WWW class changes</h3> + +<p>Added <code>raptor_www_set_ssl_verify_options()</code> to set SSL +verify options. +Fixes <a href="https://bugs.librdf.org/mantis/view.php?id=469">Issue# 0000469</a>. +</p> + +<p>The <code>raptor_www_fetch()</code> call now returns the status +from any URI filter that returns a non-0 response. +</p> + + +<h3>Build changes</h3> + +<p>Added <code>--with-icu-config=</code><em>PATH</em> option +to enable use of ICU for NFC checking.</p> + +<p>Requires automake 1.11.2+ for <code>-Wextra-portability</code></p> + +<p><code>configure</code> uses <code>AM_PROG_AR</code> to make +automake <code>-Wextra-portability</code> happy. +</p> + + +<h2 id="rel2_0_6"><a name="rel2_0_6">Raptor2 2.0.6 changes</a></h2> + +<p>Fixed expat support which was broken in 2.0.5</p> + +<p>Handle libCurl SSL options before 7.16.4 (that's 2007) since old +libcurl is still around on Enterprise (that means old) linux systems. +</p> + +<h3>Sequence Changes</h3> + +<p>Added utility functions to swap elements, reverse the sequence and +generate permuations:</p> +<pre> + int raptor_sequence_swap(raptor_sequence* seq, + int i, int j); + + int raptor_sequence_reverse(raptor_sequence* seq, + int start_index, int length); + + int raptor_sequence_next_permutation(raptor_sequence *seq, + raptor_data_compare_handler compare); +</pre> + + +<h2 id="rel2_0_5"><a name="rel2_0_5">Raptor2 2.0.5 changes</a></h2> + +<p>Issues Fixed:</p> +<ul> +<li><a href="https://bugs.librdf.org/mantis/view.php?id=465">0000465</a>: c99 snprintf usage</li> +<li><a href="https://bugs.librdf.org/mantis/view.php?id=476">0000476</a>: Add Format URIs to raptor_syntax_descriptions</li> +<li><a href="https://bugs.librdf.org/mantis/view.php?id=479">0000479</a>: raptor 2.0.4 : -i nquads fails to treat the context term as optional bugs.librdf.org</li> +<li><a href="https://bugs.librdf.org/mantis/view.php?id=481">0000481</a>: Invalid unicode characters cause raptor to emit infinite output while converting n-quads to n-triples</li> +</ul> + + +<h3>Parser class changes</h3> + +<p>Updated all parser URIs to use the +<a href="https://www.w3.org/ns/formats/">W3C Format URIs</a> +as the primary URIs. Existing URIs become aliases. (Nicholas J Humfrey) +</p> + +<p>GRDDL parser: Correctly set the base_uri when resolving the +sheet URI.</p> + +<p>N-Quads parser: Make context optional. (Lauri Aalto) +Fixes +<a href="https://bugs.librdf.org/mantis/view.php?id=479">Issue #0000479</a>. +<br /> +When guessing formats, make N-Quads always beat N-Triples since +since now all ntriples parse fine with the nquads parser. (Lauri Aalto) +</p> + +<p>RDFA parser: fix when building with 64-bit systems to prevent +value truncation.</p> + +<p>Turtle parser: now uses the official <em>text/turtle</em> mime +type in the syntax recognizing code. +</p> + + +<h3>Serializer class changes</h3> + +<p>Updated all serializer URIs to use the +<a href="https://www.w3.org/ns/formats/">W3C Format URIs</a> +as the primary URIs. Existing URIs become aliases. (Nicholas J Humfrey) +</p> + +<p>Turtle serializer now uses the official <em>text/turtle</em> mime +type in the syntax recognizing code. + +Do not generate infinite output when the input Unicode UTF-8 encoding +is bad. +Fixes <a href="https://bugs.librdf.org/mantis/view.php?id=481">Issue #000481</a>. +</p> + +<h3>Unicode class changes</h3> + +<p>Added new utility functions for calculating number of Unicode +characters in a UTF-8 +string <code>raptor_unicode_utf8_strlen()</code> and getting a subset +of a UTF-8 string <code>raptor_unicode_utf8_substr()</code>: +</p> +<pre> + int raptor_unicode_utf8_strlen(const unsigned char *string, + size_t length); + + size_t raptor_unicode_utf8_substr( + unsigned char* dest, size_t* dest_length_p, + const unsigned char* src, size_t src_length, + int startingLoc, int length); +</pre> + + +<h3>URI class changes</h3> + +<p><code>raptor_uri_string_to_relative_uri_string()</code> now +compares URI paths not files. (Joe Presbrey) +Fixes <a href="https://bugs.librdf.org/mantis/view.php?id=472">Issue #0000472</a> +</p> + + +<h3>Build changes</h3> + +<p>The library no longer needs <code>trunc()</code>, +<code>lround()</code>, <code>round()</code> or anything else from +libm. Removed the checks for these functions from +<code>configure</code>. +</p> + +<p><code>configure</code> no longer enables debug messages by default +for <code>--enable-maintainer-mode</code> but now requires the +<code>--enable-debug</code> option to be given. +</p> + +<h3>Other changes</h3> + +<p>Records GIT version in the version string when building from GIT +sources with <code>--enable-maintainer-mode</code>. This makes it +clearer when an non-released version is being used. +</p> + +<p>Added internal <code>raptor_format_integer()</code> which enabled +the removal of all internal use of <code>snprintf()</code>. +</p> + +<p>Added <code>raptor_vsnprintf2()</code> deprecating +<code>raptor_vsnprintf()</code> which does not actually have the +vsnprintf() calling contention. Added <code>raptor_snprintf()</code> +with snprintf() calling convention. Added +<code>raptor_vasprintf()</code> with vasprintf() (GNU) calling +convention. +</p> +<pre> + int raptor_vsnprintf2(char *buffer, size_t size, + const char *format, va_list arguments); + int raptor_snprintf(char *buffer, size_t size, const char *format, ...); + + int raptor_vasprintf(char **ret, const char *format, va_list arguments); +</pre> + +<p><code>raptor_locator_format()</code> now picks a large enough +buffer size if <code>snprintf()</code> is likely not portable, when +HAVE_C99_VSNPRINTF is not defined. +Fixes <a href="https://bugs.librdf.org/mantis/view.php?id=465">Issue #0000465</a> +</p> + +<p>Internal code style changes for how allocation is done and casting +with new macros.</p> +<blockquote> + <p>RAPTOR_GOOD_CAST: code checks or logic ensures cast will not + truncate</p> + + <p>RAPTOR_BAD_CAST: value may be truncated; may require API + change/break. Might be unrealistic e.g. a >4G error message, + qname prefix.</p> + + <p>Some good uses:</p> + <ul> + <li>narrowing a known, checked unicode char to a U16</li> + </ul> + + <p>Some 'bad' uses:</p> + <ul> + <li>only handing error messages, literal language, qname prefixes of + a max len constrained by int</li> + <li>passing in data to libxml constrained by int max len</li> + <li>locator column field constrained to int size</li> + </ul> + + <p>Some bad uses:</p> + <ul> + <li>iostream read_bytes and write-bytes methods return int but could + easily return a lot more in the size_t range (compare to fread). + API change needed.</li> + <li>locator byte field constrained to int size. should be size_t</li> + <li>raptor_nfc_check returns int offset into a buffer that could + be larger</li> + <li>raptor_ntriples_parser_context changed line_length and offset + to size_t</li> + <li>raptor_turtle_parser changed buffer_length to size_t</li> + </ul> +</blockquote> + +<p>Updated code to use <code>size_t</code> for sizes such as those +from <code>strlen()</code> and <code>ptrdiff_t</code> for pointer +differences so that on 64-bit architectures, values are not +potentially truncated to size of int. +</p> + + +<h2 id="rel2_0_4"><a name="rel2_0_4">Raptor2 2.0.4 changes</a></h2> + +<p>Issues Fixed:</p> +<ul> +<li><a href="https://bugs.librdf.org/mantis/view.php?id=308">0000308</a>: undefined reference to round and trunc while cross compiling for mipsel</li> +<li><a href="https://bugs.librdf.org/mantis/view.php?id=449">0000449</a>: ntriples serializer and parser inconsistent w.r.t. _ in name tokens</li> +<li><a href="https://bugs.librdf.org/mantis/view.php?id=451">0000451</a>: Incorrect qname definition in TRiG parser</li> +<li><a href="https://bugs.librdf.org/mantis/view.php?id=455">0000455</a>: Incorrect AVL tree operations. [ with fix ]</li> +<li><a href="https://bugs.librdf.org/mantis/view.php?id=456">0000456</a>: raptor-2.0.3 fails to build against yajl-2.0.2 API</li> +<li><a href="https://bugs.librdf.org/mantis/view.php?id=457">0000457</a>: raptor-2.0.3 fails to build with curl-7.21.7</li> +</ul> + +<h3>Parser class changes</h3> + +<p>The <code>raptor_option</code> enumeration gains values for +setting SSL client side certificates: +<code>RAPTOR_OPTION_WWW_CERT_FILENAME</code> for the certificate +filename, <code>RAPTOR_OPTION_WWW_CERT_TYPE</code> for the +certificate type and <code>RAPTOR_OPTION_WWW_CERT_PASSPHRASE</code> +for the certificate passphrase. +</p> + +<p><code>raptor_parser_parse_uri_with_connection()</code> (which is +called by <code>raptor_parse_uri()</code>) now uses +<code>raptor_www_set_ssl_cert_options()</code> to turn the parser +options above into settings on the WWW object. +</p> + +<p>RDF/JSON parser: Gains support for building with +<a href="http://lloyd.github.com/yajl/">YAJL</a> V2. Note that YAJL +V1 and V2 both install the same library name 'libyajl' even though +they have different ABI and APIs.</p> + +<p>TRiG parser: Fixed to support the legal <em>uri</em> <code>: +{</code> ... <code>}</code> syntax naming a graph where the +'<code>:</code>' is optional. +</p> + +<p>Turtle parser: Modified to not include the internal +<code>input()</code> function in the lexer which is never needed. +</p> + +<h3>Serializer class changes</h3> + +<p>N-Triples and Turtle serializers: Now +use <code>raptor_bnodeid_ntriples_write()</code> to always write +legal blank node IDs. +</p> + +<h3>WWW class changes</h3> + +<p>Added support for <code>raptor_www</code> to handle setting SSL +client certificate options during WWW retrieval. +</p> + +<p>Added <code>raptor_www_set_ssl_cert_options()</code> method to set +the SSL client certificates on a WWW object. +</p> + +<h3>Other changes</h3> + +<p>Make Raptor build against Curl 7.21.7 which removed a header file +that was made an empty file in the libcurl source code on April 26 +2004 around version 7.12.0 which is now the minimum version Raptor +supports.. +</p> + +<p>Fixed an AVL Tree issue during deletion that messes up some pointers. +Patch from 'v-for-vandal'. Thanks. +</p> + +<p>Added a utility function +<code>raptor_bnodeid_ntriples_write()</code> to write a N-Triples +blank node ID in legal form, replacing any letters not in the allowed +set.</p> + +<p>Expanded GCC warnings and corrected a few internal uses +of <code>int</code> when <code>size_t</code> was meant. Others +remain. +</p> + +<p>Reduced stack use of <code>raptor_www_file_handle_fetch()</code> +and <code>raptor_parser_parse_iostream()</code> by moving I/O buffer +to the www or parser objects respectively. +</p> + + +<h2 id="rel2_0_3"><a name="rel2_0_3">Raptor2 2.0.3 changes</a></h2> + +<p>The main change is to add the new main header file +<code>raptor2.h</code>. The new header has been added to allow +applications to be sure they have got the raptor V2 header +(with <code>#include <raptor2.h></code> and not the raptor V1 +header file (<code>#include <raptor.h></code>). +The <code>raptor.h</code> header will NOT be removed until the next +major raptor release (V3). +</p> + + +<h3>Turtle / TRiG parser changes</h3> + +<p>Alter the parser to not use a large token stack when parsing TRiG +graphs, enabling the parser to handle much larger files. The parser +still gathers all input into a single memory segment so the maximum +amount of input is probably memory size/3. +</p> + +<p>TRiG parser now allows a QName for the graph name. +</p> + +<p>Attempted to make the parser handle streaming lexing and parsing +but only partially successful; bison could be made to stream parse +but flex could not be made to stream lex. This meant it could not +be convinced to return a "need more input" response at the end of a +chunk of data and continue lexing later. +</p> + +<p>Fix value ownership fix graph name. +Fixes <a href="https://bugs.librdf.org/mantis/view.php?id=437">Issue #0000437</a> +</p> + +<h3>Other Changes</h3> + +<p>Raptor was ran through the +LLVM <a href="http://clang-analyzer.llvm.org/">clang</a> static code +analyzer and several issues fixed, mostly in unused variables and in +unlikely error recovery conditions. Some actual potential crash bugs +were found:</p> +<ol> + <li>The workaround for + ancient <a href="https://gitlab.gnome.org/GNOME/libxml2/-/wikis/home">libxml2</a> error handling + in <code>raptor_libxml_xmlStructuredError_handler_parsing()</code> + was broken for some time, so that probably means nobody uses old + libxml2.</li> + <li><a href="https://github.com/msporny/librdfa/">librdfa</a> URI + resolving in <code>rdfa_resolve_uri()</code> used unallocated + memory in some relative URI cases.</li> +</ol> + +<p>Bison 2.4 is required to build Raptor from GIT source with +no pregenerated files. +</p> + + +<h2 id="rel2_0_2"><a name="rel2_0_2">Raptor2 2.0.2 changes</a></h2> + +<p>Fixed a too strict version checking bug in <code>raptor_new_world()</code> +</p> + + +<h2 id="rel2_0_1"><a name="rel2_0_1">Raptor 2.0.1 Changes</a></h2> + +<p><b>DO NOT USE</b>. Use 2.0.2 which fixes a too strict version +checking bug in <code>raptor_new_world()</code> +</p> + +<h3>Parser class changes</h3> + +<p>The internal librdfa parser that uses Raptor internals now exports +symbols prefixed with raptor_librdfa so that Raptor can be linked +with the standard librdfa in applications without symbol clashes. +Fixes <a href="https://bugs.librdf.org/mantis/view.php?id=416">Issue #0000416</a> +</p> + +<h3>Serializer class changes</h3> + +<p>The N-Quads serializer was fixed to output the graph name in the +fourth column, instead of repeating the object. +</p> + +<h3>Internal changes</h3> + +<p>Replaced all internal fatal errors that went to +an <code>abort()</code> with regular logged error. +</p> + + +<h2 id="rel2_0_0"><a name="rel2_0_0">Raptor 2.0.0 Changes</a></h2> + +<p>Raptor V2 final release. See the release notes for 1.9.0 and +1.9.1 for the major changes in Raptor V2.</p> + +<h3>API changes since 1.9.1 beta</h3> + +<p>Added <code>raptor_syntax_description_validate()</code> to public +API to validate and compute counts for syntax descriptions. +Primarily this is for use by Rasqal. +</p> + +<p>The <code>raptor_syntax_description</code> now has an array of URI +strings instead of a single one, to allow URI aliasing. This is +primarily for use by Rasqal.</p> + +<p>Fixed guessing by URI in +<code>raptor_world_guess_parser_name()</code> which was not +working.</p> + +<p>Fixed Issues:</p> +<ul> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=405">0000405</a>: RDFa parser does not handle base href with single quoted value</li> +</ul> + + +<h2 id="rel1_9_1"><a name="rel1_9_1">Raptor 1.9.1 Changes</a></h2> + +<p>1.9.1 is the second beta release of Raptor 2 and intended to be +the last release before 2.0.0. +</p> + +<h3>Raptor V1 to V2 upgrading changes</h3> + +<p>Improved the <code>upgrade-script.pl</code> raptor V1 to V2 +upgrade script to handle changes to enums and macros as well as +handle statement field renaming. Updated the generated documentation +to also include enum and macro changes. +</p> + +<p>Added defensive code in each constructor to check the passed-in +raptor world object is a valid Raptor V2 world rather than V1. It +generates a warning once per run of the program. +</p> + +<p>The <code>raptor_new_world()</code> function is now a macro that +calls an internal function <code>raptor_check_world_internal()</code> +with a version macro argument to detect when Raptor V2 is invoked with +an inconsistent header and library. +</p> + + +<h3>AVLTree class changes</h3> + +<p>Free the iterator at the end of debug method +<code>raptor_avltree_print()</code>. +</p> + + +<h3>I/O Stream class changes</h3> + +<p>Fix major copying too much error in the internal +<code>raptor_read_string_iostream_read_bytes()</code> memcpy that +could cause crashes - the function always copied the maximum amount +the user requested in the read method even if the string was +smaller.</p> + + +<h3>Parser class changes</h3> +<p>JSON parser: Made relative URIs option work. +</p> + +<p>N-Quads parser: Added. The serializer already existed.</p> + +<p>librdfa parser: Updated to latest librdfa GIT +1a1a08c790b7649a7f6c12fb9e40c0d3dbe70481</p> + + +<h3>Serializer class changes</h3> + +<p>Fix <code>raptor_serializer_start_to_iostream()</code> to prevent +crash when this method is used more than once on the same +serializer.</p> + +<p>RSS/Atom serializer: Fix crashes with feeds containing entries +with blank node items. +</p> + + +<h3>Stringbuffer class changes</h3> + +<p>Added utility methods +<code>raptor_stringbuffer_append_uri_escaped_counted_string()</code> +and <code>raptor_stringbuffer_append_hexadecimal()</code>. +</p> + + +<h3>Term class changes</h3> + +<p>Deleted <code>raptor_term_as_counted_string()</code> and +<code>raptor_term_as_string()</code>. Since 1.9.0 was an unstable +API, this is allowed. +</p> + +<p>Added <code>raptor_term_to_counted_string()</code> replacing +deleted <code>raptor_term_as_counted_string()</code>.</p> + +<p>Added <code>raptor_term_to_string()</code> replacing +deleted <code>raptor_term_as_string()</code>.</p> + + + +<h3>URI class changes</h3> + +<p>Added convenience methods for constructing URI terms from strings: +<code>raptor_new_term_from_counted_uri_string()</code> and +<code>raptor_new_term_from_uri_string()</code>. +</p> + +<p>Use string lengths in equals and comparisons for faster checking. +Use <code>memcmp()</code> instead of <code>strncmp()</code> when +lengths are known and the same. +</p> + + +<h3>WWW class changes</h3> + +<p>The CURL WWW module now looks for and uses the HTTP response +<code>Content-Location:</code> header to get the base URI for content +retrievals. This allows these base URIs to be used in parsing +content retrived from URIs. +Fixes <a href="https://bugs.librdf.org/mantis/view.php?id=402">Issue #0000402</a> +</p> + + +<h2 id="rel1_9_0"><a name="rel1_9_0">Raptor 1.9.0 Changes</a></h2> + +<p>1.9.0 is the first beta release of Raptor 2. There may be changes +and additional releases before version 2.0.0 with the final stable API. +</p> + +<p>This is a major update and cleanup to the Raptor API and ABI with +additions, removals and changes. There are also major restructurings +of the internal code and cleanups. There are also some new features +in the form of additional APIs, new serializers and parsers. +</p> + +<p>The details of the additions, removals and changes of functions, +structures, typedefs and enums are listed in the +<a href="https://librdf.org/raptor/api/">Raptor 2 API reference manual</a> +section on +<a href="https://librdf.org/raptor/api/raptor-changes.html">Changes between raptor 1.4.21 and 1.9.0</a>. +The <a href="UPGRADING.html">upgrading document</a> +explains how to upgrade existing code that uses the V1 APIs to use +the new APIs. +</p> + +<p>The major changes in this release are:</p> +<ul> +<li>Removed all deprecated functions and typedefs.</li> +<li>Renamed all functions to the standard <code>raptor_</code><em>class</em><code>_</code><em>method</em> form.</li> +<li>All constructors take a <code>raptor_world</code> argument.</li> +<li>URIs are interned and there is no longer a swappable implementation.</li> +<li>Statement is now an array of 3-4 RDF Terms to support triples and quads.</li> +<li>World object owns logging, blank node ID generation and describing syntaxes.</li> +<li>Features are now called options and have typed values.</li> +<li>GRDDL parser now saves and restores shared libxslt state.</li> +<li>Added serializers for HTML 'html' and N-Quads 'nquads'.</li> +<li>Added parser 'json' for JSON-Resource centric and JSON-Triples.</li> +<li>Switched to GIT version control <a href="https://github.com/dajobe/raptor">hosted by GitHub</a>.</li> +<li>Added memory-based AVL-Tree to the public API.</li> +</ul> + + +<p>Fixed Issues:</p> +<ul> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=357">0000357</a>: raptor_term_as_string does not return N-Triples escaped string, although API says so</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=361">0000361</a>: HTML Table serializer</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=369">0000369</a>: Unescaped quotes in long literals (Turtle/N3) cause parser failure if at the end of the literal</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=370">0000370</a>: Odd behaviour regarding the parsing of Trig files</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=373">0000373</a>: Remove deprecated GTK symbols</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=379">0000379</a>: raptor libxslt security policy conflicts with apps that also use libxslt and set security policy</li> +</ul> + + +<!-- updated to 2010-08-15 ChangeLog changes --> + +<h3>General changes</h3> + +<p>Renamed the library name and package tarball name to a new +separate names (libraptor2, raptor2-X.tar.gz) so they can be +distinguished and installed into the same system as raptor 1 without +file clashes. Note: This does not apply to the +<code>rapper(1)</code> utility and it's manual page which are in both +packages. Packagers should stop packaging the <code>rapper(1)</code> +binary and the rapper manual page from raptor 1, in preference to the +raptor 2 version. +</p> + +<p>Nicholas J Humfrey is a new committer. +</p> + +<p>A utility script <code>docs/upgrade-script.pl</code> is +automatically generated from the changes data to aid migrating from +Raptor 1 to Raptor 2 APIs. If it is not a simple rename, the script +annotates the change as a comment near the code. +</p> + +<p>Raptor's Statement, Term and URI classes can fully replace +librdf's <code>librdf_statement</code>, <code>librdf_node</code> and +<code>librdf_uri</code> classes. This has been tested with GIT +versions when both Rasqal and librdf are configured with +<code>--with-raptor2</code>. When raptor 2 is stable, Rasqal and +librdf will default to use these.. +</p> + + +<h3>Documentation changes</h3> + +<p>The API reference manual now includes an automatically generated +reference section on the +<a href="https://librdf.org/raptor/api/raptor-formats.html">functions and types that were added, removed and changed between raptor 1 and raptor 2 APIs</a>. + +It also includes an automatically generated section on the +<a href="https://librdf.org/raptor/api/raptor-formats.html">parser and serializers with their names, mime types and Q values.</a> +</p> + +<p>The tutorial examples were updated to the Raptor 2 APIs. +</p> + +<p>NOTE: At this time, the descriptive parts of the tutorial have NOT +been updated to use the Raptor 2 API. +</p> + + +<h3>World class changes</h3> + +<p>A log handler function for receiving warnings and errors (fatal or +other) are now all sent to a single log handler of type +<code>raptor_log_handler</code> registered to the world class with +<code>raptor_world_set_log_handler()</code>, rather than handlers set +for each parser, sax2, serializer or www instance. Several +constructors lose error handler and error data parameters +consequently. +</p> + +<p>The enumerating approach for listing the known parsers and +serializers and writing into variables passed in, was replaced with +methods that return pointers to static +<code>raptor_syntax_description</code> objects to allow more +parameters to be returned. This allowed the removal of multiple +older calls that kept having to gain new return arguments. +The description also returns a list of (mime type, qname) pairs +using a new typedef <code>raptor_type_q</code>. It includes a set +of bitflags for some simple information such as +<code>RAPTOR_SYNTAX_NEED_BASE_URI</code> to describe when +a syntax requires a base URI passed in, otherwise is not needed +or optional. +</p> + +<p><code>raptor_world_set_libxml_flags()</code> is replaced with +<code>raptor_world_set_flag()</code> which are simple flags that +require no initialisation of the world since they are used before it +is opened. This means that it cannot use the Options module for +world flags. New flag +<code>RAPTOR_WORLD_FLAGS_URI_INTERNING</code> allows disabling of +the URI interning using an AVL-Tree which can use up memory. +</p> + +<p><code>raptor_world_set_libxslt_security_preferences()</code> and +<code>raptor_world_set_log_handler()</code> gains an int return value +to report failure if world is already opened. +</p> + +<p>Moved the generation of blank node IDs from the parsers (many +objects) to the world class (1 object). Cannot think of good reasons +why the blank node ID generation policy needs to be different +per-parser. Enumeration <code>raptor_genid_type</code> was deleted +since only the blank node type was ever used. +</p> + + +<h3>AVL Tree changes</h3> + +<p>The internal memory-based AVL Tree implementation is exposed as a +public API. +</p> + + +<h3>Features changes</h3> + +<p>Replaced with <code>raptor_options</code></p> + + +<h3>Identifier class changes</h3> + +<p>Replaced with Term class. +</p> + +<p><code>raptor_identifier_type</code> enum was removed and replaced +with enum <code>raptor_term_type</code> and a smaller set of 3 +possible term types. The enum values match the int values used +in <code>librdf_node_type</code>. +</p> + + +<h3>I/O Stream class changes</h3> + +<p>Constructors all gain a world argument. +</p> + +<p>Some methods now return an int error status such as +<code>raptor_iostream_write_end()</code> +</p> + +<p>Many classes iostream writing methods and methods of the iostream +class itself were changed to follow the standard +<code>raptor_</code><em>CLASS</em><code>_write</code> naming +convention and to put the iostream argument at the end. +</p> + +<p>Deprecated typedef <code>raptor_iostream_handler</code> was removed</p> + +<p>Deprecated functions were removed: +<code>raptor_new_iostream_from_handler()</code>, +<code>raptor_iostream_get_bytes_written_count()</code> and +<code>raptor_iostream_write_string_turtle()</code> +</p> + + +<h3>Locator changes</h3> + +<p>Renamed some methods to follow the +<code>raptor_locator_</code><em>method</em> standard. +</p> + + +<h3>Namespaces and namespace stack classes changes</h3> + +<p>Constructors all gain a world argument and lose error handler, +error data arguments. +</p> + + +<h3>Options</h3> + +<p>A new name for what were called features in Raptor 1 and this was +expanded to allow use of values types string, integer and boolean. +Options can be set on multiple classes such as parser, serializer but +are centrally described using the new +<code>raptor_option_description</code> structure. +</p> + +<p>The option get / set operations were reduced from multiple methods +per class for getting / setting an int, int / string to just one get +and one set, with optional parameters. It can also handle adding new +types later, which will be passed in as strings and converted +internally. +</p> + +<p>The options code +introduces a new enum <code>raptor_domain</code> which essentially is +for describing a class such as parser. +For example options listed +for domain <code>RAPTOR_DOMAIN_PARSER</code> will be usable with the +parser option get and set methods +<code>raptor_parser_get_option(parser, ...)</code> and +<code>raptor_parser_set_option(parser, ...)</code>. +</p> + + +<h3>Parser class changes</h3> + +<p><code>raptor_parser_set_strict()</code> was removed and replaced +with a new parser option <code>RAPTOR_OPTION_STRICT</code>. +</p> + +<p>Parser object methods to return information about the parser class +were removed since they can be done instead via fields of the static +object returned from +<code>raptor_world_get_parser_description()</code>. Deleted +functions include <code>raptor_parser_get_label()</code>, +<code>raptor_parser_get_mime_type()</code>, and +<code>raptor_parser_get_need_base_uri()</code>. +</p> + +<p>Parsing may generate start graph and end graph events for syntaxes +that return graph names such as TRiG. These are returned by the handler +of typedef <code>raptor_graph_mark_handler</code> +set by new function <code>raptor_parser_set_graph_mark_handler()</code> +which returns a start or end event of type enum +<code>raptor_graph_mark_flags</code>. +</p> + +<p><code>raptor_parser_get_accept_header()</code> fixed length of +static string to ensure NUL is copied. +</p> + +<p>Many functions were renamed to match the +<code>raptor_parser_</code><em>method</em> naming standard. Some of +these get a long longer, but are at least consistent. For example +<code>raptor_parse_uri()</code> becomes +<code>raptor_parser_parse_uri()</code>. +</p> + +<p>Deprecated typedef <code>raptor_ntriples_parser</code> was removed. +</p> + +<p>Deprecated functions were removed: +<code>raptor_ntriples_term_as_string()</code>, and +<code>raptor_ntriples_string_as_utf8_string()</code> +</p> + +<p>The librdfa parser was updated with the latest updates to the RDFa +syntax (first, rel/rev, whitespace, xml:lang) and fixes issues with +non-terminated strings. +</p> + + +<p>The GRDDL parser now saves and restores the libxslt global state +(handlers, security preferences) so that it does not affect other +applications in the same memory space. Part of this can be +overridden with +<code>raptor_world_set_libxslt_security_preferences()</code> which +allows user code to disable raptor touching the security preferences +entirely. +Fixes +<a href="https://bugs.librdf.org/mantis/view.php?id=379">Issue #0000379</a> +</p> + + +<p>The RDF/XML parser never generated special names for bag IDs +(bagidNNN), so all support for that has been removed. +</p> + +<p>The RDF/XML parser uses the new reference-counted URIs and raptor +terms to prevent a lot of malloc/free for temporary uses. +</p> + +<p>Removed RDF/XML parser feature +<code>RAPTOR_FEATURE_ASSUME_IS_RDF</code> since it did nothing since +at least 2003, maybe earlier. +</p> + +<p>Added a JSON parser (name 'json') that can read both the +resource-centric and triples JSON RDF formats. Requires the YAJL +JSON parser library. Contributed by Nicholas J Humfrey. +</p> + +<p>Moved the generation of blank node IDs from the parsers (many +objects) to the world class (1 object). Cannot think of good reasons +why the blank node ID generation policy needs to be different +per-parser. +</p> + + +<h3>QName class changes</h3> + +<p>Constructors all gain a world argument and lose error handler, +error data arguments. +</p> + + +<h3>Sequence changes</h3> + +<p>Use new generic <code>raptor_data_free_handler</code>, +<code>raptor_data_print_handler</code>, +<code>raptor_data_context_free_handler</code>, +<code>raptor_data_context_print_handler</code> +data-focused handlers which are shared with the AVL Tree. +</p> + + +<h3>Serializer class changes</h3> + +<p>Added <code>raptor_serializer_flush()</code> for user code to +indicate to a serializer to flush state since the application knows a +block has been ended, or it needs to save memory. No serializer +currently implements this, but it is expected the abbreviated +serializers that use a lot of state - Turtle, RDF/XML-Abbrev - would +benefit from this. +</p> + +<p>Added an HTML Table serializer with name 'table' contributed by +Nicholas J Humfrey. +</p> + +<p>Removed the obsolete 'simple' serializer from the source code. +N-Triples is an appropriate simple (and well-defined) replacement +syntax. +</p> + + +<h3>Statement class changes</h3> + +<p>This was made a more regular class that can be created, copied and +freed using reference counting. The structure changed to be an +array of 4 raptor terms rather than a complex union focused on +the allowed RDF Statements. This change allows representing +non-RDF triples as well as triples with named graphs (also known as +quads). +</p> + +<p><code>raptor_statement_part_as_counted_string()</code> turns into +a method of the new Term class, as a "statement part" is now +represented as a Term. +</p> + + +<h3>Term class changes</h3> + +<p>This new class with an open structure replaces +<code>raptor_identifier</code> and was created to represent an RDF +Term: literal, URI or blank node and is reference counted and +dynamic. It is a union of fields for three types. +</p> + +<p>This class can fully replace librdf's librdf_node when both Rasqal +and librdf are built with <code>--with-raptor2</code>. The +semantics of comparison (ordering) and equality are the same. +</p> + + +<h3>Unicode changes</h3> + +<p>Several utility functions were renamed to match their +functionality more accurately and be associated with the Unicode +module set of functions. For example <code>raptor_utf8_check()</code> +was renamed to <code>raptor_unicode_check_utf8_string()</code> +</p> + + +<h3>URI class changes</h3> + +<p>The whole concept of URI handlers was removed, there is no longer +a way to replace the implementation of the URI class. The +implementation built in now interns URIs string so that a single URIs +for a string is only ever in memory once, but reference counted. This +is what Redland librdf has done for many years, and librdf can fully +use this. +</p> + +<p>Deprecated functions were removed: +<code>raptor_uri_is_file_uri()</code>. +</p> + +<p>The <code>raptor_uri_resolve_uri_reference()</code> now returns the +length of the URI written into the buffer. +</p> + + +<h3>WWW class changes</h3> + +<p>Rename several of the functions to the standard constructor, +destructor and method naming format. +</p> + + +<h3>XML Writer class changes</h3> + +<p>Constructors all gain a world argument and lose error handler, +error data arguments. +</p> + + +<h3>Configuration changes</h3> + +<p>Added configure argument <code>--with-yajl=DIR</code> (or 'no') to +set the prefix where YAJL libraries and headers are installed. +</p> + +<p>Raptor headers are now installed in a sub-directory of +<em>PREFIX</em><code>/include</code>. +</p> + +<p><code>raptor-config</code> was removed. Building against raptor 2 +should be done only using <code>pkg-config</code> with either +<code>--cflags</code> or <code>--libs</code> arguments like this:</p> +<pre> + cc -o prog prog.c `pkg-config raptor2 --cflags` `pkg-config raptor2 --libs` +</pre> + + +<h3>Internal changes</h3> + +<p>Code style: lots of changes mostly adding lots more whitespace +such as to show control change (if, while) or early function exit +(return). +</p> + +<p>All <code>strcpy()</code> with known lengths and +<code>strncpy()</code> were replaced with <code>memcpy()</code> which +is quicker and compilers optimize better. +</p> + +<p>Code style: +use <code>TYPE* var_name = RAPTOR_CALLOC(TYPE, 1, sizeof(*var_name))</code> +rather than repeat the type name which can be error-prone. +</p> + +<p>Code style: put whitespace round assignment and operators i.e. +use <code>c = a + b</code> rather than <code>c=a+b</code>. +</p> + +<p>Code style: removed some <code>strdup()</code>s. +</p> + +<p>Code style: try to remove un-necessary <code>strlen()</code> by +tending to pass around a string with it's length, a counted string. +This meant adding a few new constructors such as for the URI and Term +classes. +</p> + +<p>Code style: methods called with a NULL object return failure +and destructors called with a NULL object return silently rather than +the former mix of crashing or <code>abort()</code>ing. +</p> + +<p>Code style: copy constructor is now called +<code>raptor_</code><em>class</em><code>_copy()</code> rather than +<code>raptor_new_</code><em>class</em><code>_from_</code><em>class</em><code>()</code> +for brevity. +</p> + +<p>Code style: print methods return an int return status indicating +success. +</p> + + +<h3>rapper Utility changes</h3> + +<p>Print out the option types next to the description in the <code>-f +help</code> usage message. +</p> + +<p>Removed unused <code>-a</code> flag from code. +</p> + +<p>Did NOT rename <code>-f</code> option to match the renaming of +features to options in the API. Not needed. +</p> + +<p>Removed long deprecated <code>-n</code> flag which was shortcut for +selecting the N-Triples parser and can be done with <code>-i ntriples</code> +</p> + +<p>Removed <code>-s/--scan</code> flag since it is an option of a +single parser (RDF/XML) which can be done with <code>-f/--feature +scanForRDF</code>. +</p> + + +<h3>Other changes</h3> + +<p>Removed support for building raptor with dmalloc debugging +(removing <code>--with-dmalloc</code> configure argument). Valgrind +wins. +</p> + +<p>The example 'grapper' GNOME GUI utility for raptor was updated +to the latest GTK APIs (2.5.0+ but still quite old) so that it +builds with all the GTK 'disable deprecated' flags set. The +UI is not quite correct though - the preferences menu is broken. +</p> + +<p>Switched to GIT version control, hosted by GitHub. The latest +raptor 1 code is available on branch 'raptor1' as well as from the +release tags for specific versions. +</p> + + + +<!-- *************** 1.4.X Series ******************************** --> + + +<h2 id="rel1_4_21"><a name="rel1_4_21">Raptor 1.4.21 Changes</a></h2> + +<p>This is a bug fix only release with no new features. New +development has moved to raptor 2 where a planned ABI and API break +is underway. +</p> + +<p>Fixed Issues:</p> +<ul> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=318">0000318</a>: Cannot end a Turtle literal with \\ inside triple-quotes</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=319">0000319</a>: ntriples parser does not register that it accepts ntriples mime type - text/plain</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=326">0000326</a>: Turtle parser allows '.' in qnames which is not-to-spec</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=331">0000331</a>: Turtle long literals with raw newlines do not count line numbers correctly</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=332">0000332</a>: RDFXML parser finds duplicates and misbehaves (when it shouldn't)</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=337">0000337</a>: raptor/turtle outputs invalid qnames which cause syntax errors on parsing</li> +</ul> + +<h3>Parser changes</h3> + +<p>N-Triples parser: Declare acceptance of text/plain mime type with +q=0.1 +</p> + +<p>RDFA parser (via librdfa): Updated to fix some buffer management +problems when it was passed large blocks (4096 bytes or more), a few +memory leaks and some other minor bugs. +</p> + +<p>RDF/XML parser: Properly reset the ID-checking set at the start of +each parse. +</p> + +<p>Turtle parser: Allow \\ at the end of triple-quoted literals. +Forbid '.'s in prefixes and qnames (follow specification). +Properly count newlines inside the literals for error reporting. +</p> + +<h3>Serializer changes</h3> + +<p>Turtle serializer: Forbid '.'s in prefixes and qnames (follow +specification). +</p> + +<h3>Other Changes</h3> + +<p>Updated <code>configure</code> and the build system to use silent +rules for the maintainer (by default), or when +<code>--enable-silent-rules</code> is passed to +<code>configure</code>. This feature requires building with automake +1.11 which requires autoconf 2.62 or newer when building from GIT. +</p> + +<p><code>autogen.sh</code> script was updated to enforce the +autotools versions above. +</p> + + + +<h2 id="rel1_4_20"><a name="rel1_4_20">Raptor 1.4.20 Changes</a></h2> + +<p>This is a bug fix only release with no new features. New +development has moved to raptor 2 where a planned ABI and API break +will happen. There may be preview releases of raptor 2 with 1.9.x +numbering. +</p> + +<p>Fixed Issues:</p> +<ul> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=306">0000306</a>: rapper doesn't handle datatype=""and xml:lang="" properly with RDFa</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=307">0000307</a>: configure fails at vnsprintf test when cross compiling</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=310">0000310</a>: Raptor does not like single character namespaces with RDFa</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=312">0000312</a>: Ununitialized pointer in example rdfserialize.c causes crash</li> +</ul> + +<h3>Parser Changes</h3> + +<p> +GRDDL parser: Fix XML parser context resource leak if +<code>raptor_grddl_fetch_uri()</code> fails. Save and restore error +handlers properly to prevent crashes when an error is reported during +parsing. +</p> + +<p> +RDFA parser (via librdfa): Update to latest librdfa GIT sources with head +a438ce68a40e04b399ec2b2c613d0c867d9315c7 <br /> +now moved to +<a href="https://github.com/msporny/librdfa">https://github.com/msporny/librdfa</a> +to fix handling single character namespaces +(<a href="https://bugs.librdf.org/mantis/view.php?id=310">Issue #0000310</a>), +empty datatype attribute and empty xml:lang attributes +(<a href="https://bugs.librdf.org/mantis/view.php?id=306">Issue #0000306</a>) +</p> + +<p>Added three unapproved RDFa tests 0172, 0173 and 0174 to cover the +fixes above. +</p> + +<h3>Serializer Changes</h3> + +<p> +Turtle serializer: +Applied scalability patch from Chris Cannam. +This switches the serializer to use a <code>raptor_avltree</code> +instead of a <code>raptor_sequence</code> for the subject and blanks +used with <code>raptor_abbrev_node_lookup()</code>. This fixes a +performance problem in the serializing and moves lookups from O(N) to +O(log N) - from list to balanced tree. +</p> + +<h3>Other Changes</h3> + +<p>If cross compiling, check for <code>vsnprintf()</code> C99 compatible at +runtime by setting define <code>CHECK_VSNPRINTF_RUNTIME</code> during +configuration. +Fixes <a href="https://bugs.librdf.org/mantis/view.php?id=307">Issue #0000307</a> +</p> + +<p>Use <code>calloc()</code> for allocating a <code>raptor_statement</code> in +rdfserializer.c example code to properly initialise state. +Fixes <a href="https://bugs.librdf.org/mantis/view.php?id=312">Issue #0000312</a> +</p> + +<p>Use <code>AC_SYS_LARGEFILE</code> to get large file IO checks which +allows 32-bit systems to read multi-gigabyte files. +</p> + +<p><code>autogen.sh</code> script fix for if test when uname is not in +standard OSX dir. +</p> + + + +<h2 id="rel1_4_19"><a name="rel1_4_19">Raptor 1.4.19 Changes</a></h2> + +<blockquote> +<p><strong>WARNING: FUTURE ABI and API CHANGES.</strong> The next +release of raptor 1.4.x will include bug fixes only and no new +features. New development will move to raptor 2 where a planned ABI +and API break will happen. There may be preview releases of raptor 2 +with 1.9.x numbering.</p> +</blockquote> + +<p>Fixed Issues:</p> +<ul> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=259">0000259</a>: Fix NFC check for legal combiner sequence</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=262">0000262</a>: Error when <code>raptor_new_uri()</code> fails in Turtle parser</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=263">0000263</a>: Invalid turtle output syntax on empty integer/double/decimal literals </li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=266">0000266</a>: Default/atom namespace in atom serializer output</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=269">0000269</a>: strstr is called in <code>raptor_parse_chunk()</code> on a buffer string, where it should be called on a null-terminating string.</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=270">0000270</a>: RSS serializer fixes for g++</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=276">0000276</a>: Fix <code>raptor_sequence_set_at()</code> when setting beyond end</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=277">0000277</a>: broken collection abbreviation in turtle serialization</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=287">0000287</a>: Fix <code>raptor_sax2_parse_chunk()</code> calling <code>raptor_log_error_to_handlers()</code> with expat</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=288">0000288</a>: raptor_get_feature function does not return feature value</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=289">0000289</a>: Fix RDFa parser problem when there is a subject and predicate specified on an element, but no child nodes for the object literal</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=290">0000290</a>: Fix performance problems when turtle parsing with lots of namespaces</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=293">0000293</a>: Fix RDF/XML Parser problem with legacy ordinal predicates</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=296">0000296</a>: Avoid calling <code>xsltSetDefaultSecurityPrefs()</code></li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=299">0000299</a>: Avoid calling <code>xmlSetStructuredErrorFunc()</code> and <code>xmlSetGenericErrorFunc()</code></li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=303">0000303</a>: rdfa parser does not parse content as RDFa which librdfa+expat alone handles</li> +</ul> + + +<h3>Parser Changes</h3> + +<p><code>raptor_get_feature()</code> now returns the integer value rather than +just 1 or 0.<br /> +<a href="https://bugs.librdf.org/mantis/view.php?id=288">Issue #0000288</a> +</p> + +<p>Guess parser: return name of guessed parser not 'guess'. +</p> + +<p>N-Triples parser: +Produce error messages when raptor_new_uri() fails. <br /> +<a href="https://bugs.librdf.org/mantis/view.php?id=262">Issue #0000262</a> +</p> + +<p>RDFa parser: +Fix problem when there is a subject and predicate specified on an +element, but no child nodes for the object literal using +latest librdfa GIT source with head +2ddcb3f9e010d0b3d9ee546e807539be5da1b14a <br /> +<a href="https://bugs.librdf.org/mantis/view.php?id=289">Issue #0000289</a> +</p> + +<p>RSS tag soup parser: +Huge internal changes:<br /> +Recording more atom core structures in triples (such as author, contributor - +person) rather than only channels and items<br /> +Introduced a new 'blocks' concept to record single element structured +items such as atom category, link and rss enclosure<br /> +Added itunes namespace and container.<br /> +</p> + +<p>RDF/XML Parser: +Adjust predicate_type when removing ordinal identifier type from predicate. <br /> +<a href="https://bugs.librdf.org/mantis/view.php?id=293">Issue #0000293</a> +</p> + + +<h3>Serializer Changes</h3> + +<p>Atom 1.0 serializer: +Now tested and takes more care to try to generate valid Atom 1.0 +</p> + +<p>Turtle serializer: +Validate XSD integer, decimal and double literal +output. Emit special short forms only if the whole literal value is +consumed by <code>strtol()</code> (for integers) or +<code>strtod()</code> (for decimals and doubles). Otherwise produce a +warning and emit literal in the normal +<code>"value"^^<datatype_uri></code> format. <br /> +<a href="https://bugs.librdf.org/mantis/view.php?id=263">Issue #0000263</a><br /> +Fix broken collection abbreviation<br /> +<a href="https://bugs.librdf.org/mantis/view.php?id=277">Issue #0000277</a><br /> +</p> + +<p>RSS serializer: +Fixes for g++ <br /> +<a href="https://bugs.librdf.org/mantis/view.php?id=270 ">Issue #0000270</a> +<br /> +Added a new serializer feature +<code>RAPTOR_FEATURE_PREFIX_ELEMENTS</code> (short name +prefixElements) for atom and rss 1.0 serializers to decide whether +core elements in the default namespace are declared with the prefix +or without a prefix.<br /> +Removed generation of deprecated predicate ordinals of type +<code>RAPTOR_IDENTIFIER_TYPE_ORDINAL</code> and replace with resource type URIs +</p> + + +<h3>XML Support Changes</h3> + +<p>Removed generic calls to <code>xmlSetStructuredErrorFunc()</code> +and <code>xmlSetGenericErrorFunc()</code> which can be a problem when +libxml is shared with other code in memory. They may be called +optionally but will do a save/restore of the existing functions. +This protection is enabled by the new API call +<code>raptor_set_libxml_flags()</code> to set the flags from values +in enum <code>raptor_libxml_flags</code>. <br /> +<a href="https://bugs.librdf.org/mantis/view.php?id=299">Issue #0000299</a> +</p> + +<p>Use context-specific libslt security configuration to avoid +calling generic call <code>xsltSetDefaultSecurityPrefs()</code> which +can be a problem when libxslt is shared with other code in memory. +Allow the user to set the policy for raptor globally with new API +function <code>raptor_set_libxslt_security_preferences()</code>. <br /> +<a href="https://bugs.librdf.org/mantis/view.php?id=296">Issue #0000296</a> +</p> + +<p>Make libxml SAX2 structured errors register parser-specific +handler function <code>raptor_libxml_xmlStructuredErrorFunc()</code> +instead of libxml global structured error handler. The libxml flag +method above can still enable registerding the global error handlers. +</p> + +<p>In <code>raptor_sax2_parse_chunk()</code> fixed calls to +<code>raptor_log_error_to_handlers()</code> when built with expat. <br /> +<a href="https://bugs.librdf.org/mantis/view.php?id=287">Issue #0000287</a> +</p> + + +<h3>Other Changes</h3> + +<p>Win32 portability fixes from Lou Sakey:</p> +<ul> + <li>Handle absence of <code>gettimeofday()</code></li> + <li>Call <code>xmlCleanupParser()</code> libxml call last to avoid an access +violation on windows.</li> + <li>Windows <code>vsnprintf()</code> portability patch</li> + <li><code>raptor_sequence_set_at()</code> fixed to maintain the design +contract: provide "size" consecutive items in "sequence" starting from +"start" even when setting items more than +1 offset beyond the end of +sequence. <br /> +<a href="https://bugs.librdf.org/mantis/view.php?id=276">Issue #0000276</a> + </li> +</ul> + +<p><code>rapper(1)</code> utility changes: if counting, do not use a +serializer at all. +</p> + + +<h3>Internal Changes</h3> + +<p>More internal changes to be more resiliant after allocation failure +(Lauri Aalto) +</p> + +<p>Reorganised tests in source tree to pull out specific directories +for RDF/XML, Turtle, etc. +</p> + +<p>Use a DJ Bernstein hash to replace a linked list for storing a +stack of namespaces. This makes turtle parsing with lots of +namespaces (100s) much faster. Based on the initial patch in the bug. <br /> +<a href="https://bugs.librdf.org/mantis/view.php?id=290">Issue #0000290</a> +</p> + +<p>Use new internal <code>raptor_memstr()</code> function to compare +a string against a buffer that may not be NUL terminated. <br /> +<a href="https://bugs.librdf.org/mantis/view.php?id=269">Issue #0000269</a> +</p> + +<p><code>raptor_error_handlers</code>: API structure gains world +field. BINARY COMPATIBILITY BREAK: sizeof(raptor_error_handlers) +changed. Source compatibility not broken. +</p> + +<p><code>raptor_identifier</code>: API structure gains world +field. BINARY COMPATIBILITY BREAK: sizeof(raptor_identifier) +changed. Source compatibility not broken. +</p> + +<p>More fixes for compiling with C++ +</p> + +<p>Move some more static data as constant to enable more efficient +compilation - moves to data segment of object binary.</p> + +<p>Use memmove for overlapping copy, not memcpy when doing relative +URI resolving. +</p> + + +<h3>Raptor V2 Preparation Changes</h3> + +<p>Lots of internal changes were made by Lauri Aalto preparing for +Raptor V2 to fully attach all static data and config to a new +<code>raptor_world</code> object. A new static instance of this +class is now used internally behind the existing V1 API and will be +required to be constructed by the library user for the V2 API with a +new constructor/destructor.</p> + +<p><b>NOTE:</b> The method names here are illustrative of the final +V2 names but are not confirmed - <strong>These functions are not +supported in the 1.4.x series</strong>. Some methods will still be +altered for fields and (<code>raptor_world</code>) parameters. All constructors +should have it as a parameter. All methods will not have them (so +for example, all the URI methods named _v2 will lose the world +parameter and just have the URI parameter - but that is also because +the URI handler/context part will go into raptor_world in V2)</p> + +<p>To use the <strong>unsupported and experimental</strong> V2 +functions, define <code>-DRAPTOR_V2_EXPERIMENTAL=1</code> when +building with raptor. +</p> + +<p>Added <code>raptor_world</code> typedef.</p> + +<p>Added raptor world class constructor +<code>raptor_world* raptor_new_world(void)</code> and initializer: +<code>int raptor_world_open(raptor_world* world)</code> +</p> + +<p>Added world class destructor: +<code>void raptor_free_world(raptor_world* world)</code> +</p> + +<p>Added new V2 methods:</p> +<pre> + void raptor_world_set_libxslt_security_preferences(raptor_world *world, + void *security_preferences) + + void raptor_world_set_libxml_flags(raptor_world *world, int flags) + + void raptor_error_handlers_init_v2(raptor_world* world, + raptor_error_handlers* error_handlers); +</pre> + + +<p>Added V2 methods that are versions of existing methods, named with +_v2 suffix:</p> +<pre> + int raptor_parsers_enumerate_v2(raptor_world* world, + const unsigned int counter, const char **name, const char **label) + + int raptor_syntax_name_check_v2(raptor_world* world, const char *name); + + void raptor_print_locator_v2(raptor_world* world, FILE *stream, + raptor_locator* locator); + + const char *raptor_locator_uri_v2(raptor_world* world, + raptor_locator *locator); + + int raptor_features_enumerate_v2(raptor_world* world, + const raptor_feature feature, const char **name, + raptor_uri **uri, const char **label); + + int raptor_serializers_enumerate_v2(raptor_world* world, + const unsigned int counter, const char **name, const char **label, + const char **mime_type, const unsigned char **uri_string); + + int raptor_serializer_syntax_name_check_v2(raptor_world* world, + const char *name); + + int raptor_serializer_features_enumerate_v2(raptor_world* world, + const raptor_feature feature, const char **name, raptor_uri **uri, + const char **label); +</pre> + +<p>Added world pointer to raptor_identifier object</p> + +<p>Added V2 identifier class constructor:</p> +<pre> + raptor_identifier* raptor_new_identifier_v2(raptor_world* world, + raptor_identifier_type type, raptor_uri *uri, + raptor_uri_source uri_source, const unsigned char *id, + const unsigned char *literal, raptor_uri *literal_datatype, + const unsigned char *literal_language); +</pre> + +<p>Added V2 parser class method:</p> +<pre> + raptor_parser* raptor_new_parser_for_content_v2(raptor_world* world, + raptor_uri *uri, const char *mime_type, const unsigned char *buffer, + size_t len, const unsigned char *identifier) + raptor_world* raptor_parser_get_world(raptor_parser* rdf_parser); +</pre> + +<p>Added V2 serializer class constructor and method:</p> +<pre> + raptor_serializer* raptor_new_serializer_v2(raptor_world* world, + const char *name) + raptor_world* raptor_serializer_get_world(raptor_serializer* rdf_serializer) +</pre> + +<p>Added V2 statement class <code>raptor_statement_v2</code> typdef +for future replacing of <code>raptor_statement</code></p> + +<p>Added V2 statement class methods:</p> +<pre> + void raptor_print_statement_v2(const raptor_statement_v2 * statement, + FILE *stream); + + unsigned char* raptor_statement_part_as_counted_string_v2(raptor_world* world, + const void *term, raptor_identifier_type type, + raptor_uri* literal_datatype, const unsigned char *literal_language, + size_t* len_p); + + unsigned char* raptor_statement_part_as_string_v2(raptor_world* world, + const void *term, raptor_identifier_type type, + raptor_uri* literal_datatype, const unsigned char *literal_language); + + int raptor_statement_compare_v2(const raptor_statement_v2 *s1, + const raptor_statement_v2 *s2); +</pre> + +<p>Added V2 uri class methods:</p> +<pre> + unsigned char* raptor_uri_as_counted_string(raptor_uri *uri, size_t* len_p); + + raptor_uri* raptor_new_uri_v2(raptor_world* world, + const unsigned char *uri_string); + + raptor_uri* raptor_new_uri_from_uri_local_name_v2(raptor_world* world, + raptor_uri *uri, const unsigned char *local_name); + + raptor_uri* raptor_new_uri_relative_to_base_v2(raptor_world* world, + raptor_uri *base_uri, const unsigned char *uri_string); + + raptor_uri* raptor_new_uri_from_id_v2(raptor_world* world, + raptor_uri *base_uri, const unsigned char *id); + + raptor_uri* raptor_new_uri_for_rdf_concept_v2(raptor_world* world, + const char *name); + + void raptor_free_uri_v2(raptor_world* world, raptor_uri *uri); + + int raptor_uri_equals_v2(raptor_world* world, raptor_uri* uri1, + raptor_uri* uri2); + + int raptor_uri_compare_v2(raptor_world* world, raptor_uri* uri1, + raptor_uri* uri2); + + raptor_uri* raptor_uri_copy_v2(raptor_world* world, raptor_uri *uri); + + unsigned char* raptor_uri_as_string_v2(raptor_world* world, raptor_uri *uri); + + unsigned char* raptor_uri_as_counted_string_v2(raptor_world* world, + raptor_uri *uri, size_t* len_p); + + raptor_uri* raptor_new_uri_for_xmlbase_v2(raptor_world* world, + raptor_uri* old_uri); + + raptor_uri* raptor_new_uri_for_retrieval(raptor_uri* old_uri); + + raptor_uri* raptor_new_uri_for_retrieval_v2(raptor_world* world, + raptor_uri* old_uri); + + raptor_uri* raptor_new_uri_for_xmlbase_v2(raptor_world* world, + raptor_uri* old_uri); + + raptor_uri* raptor_new_uri_for_retrieval_v2(raptor_world* world, + raptor_uri* old_uri); + + unsigned char* raptor_uri_to_relative_counted_uri_string_v2(raptor_world* world, + raptor_uri *base_uri, raptor_uri *reference_uri, size_t *length_p); + + unsigned char* raptor_uri_to_relative_uri_string_v2(raptor_world* world, + raptor_uri *base_uri, raptor_uri *reference_uri); + + void raptor_uri_print_v2(raptor_world* world, + const raptor_uri* uri, FILE *stream); + + unsigned char* raptor_uri_to_counted_string_v2(raptor_world* world, + raptor_uri *uri, size_t *len_p); + + void raptor_uri_set_handler_v2(raptor_world* world, + const raptor_uri_handler *handler, void *context); + + void raptor_uri_get_handler_v2(raptor_world* world, + const raptor_uri_handler **handler, void **context); +</pre> + +<p>Added V2 www class methods:</p> +<pre> + raptor_www *raptor_www_new_with_connection_v2(raptor_world* world, + void* connection); +</pre> + +<p>Added V2 qname class methods:</p> +<pre> + raptor_qname* raptor_new_qname_from_namespace_local_name_v2(raptor_world* world, + raptor_namespace *ns, const unsigned char *local_name, + const unsigned char *value); +</pre> + +<p>Added V2 namespace class methods:</p> +<pre> + raptor_namespace_stack* raptor_new_namespaces_v2(raptor_world* world, + raptor_simple_message_handler error_handler, void *error_data, int defaults); + + int raptor_namespaces_init_v2(raptor_world* world, + raptor_namespace_stack *nstack, + raptor_simple_message_handler error_handler, void *error_data, + int defaults); +</pre> + +<p>Added V2 sequence class typedefs and methods:</p> +<pre> + typedef void (raptor_sequence_free_handler_v2(void* context, void* object)); + + typedef void (raptor_sequence_print_handler_v2(void *context, void *object, + FILE *fh)); + + raptor_sequence* raptor_new_sequence_v2(raptor_sequence_free_handler_v2* free_handler, + raptor_sequence_print_handler_v2* print_handler, void* handler_context); + + void raptor_sequence_set_print_handler_v2(raptor_sequence *seq, + raptor_sequence_print_handler_v2 *print_handler); +</pre> + +<p>Added V2 iostream class methods:</p> +<pre> + int raptor_iostream_write_uri_v2(raptor_world* world, + raptor_iostream *iostr, raptor_uri *uri); + + void raptor_iostream_write_statement_ntriples_v2(raptor_world* world, + raptor_iostream* iostr, const raptor_statement *statement); +</pre> + +<p>Added V2 xml writer class methods:</p> +<pre> + raptor_xml_writer* raptor_new_xml_writer_v2(raptor_world* world, + raptor_namespace_stack *nstack, raptor_iostream* iostr, + raptor_simple_message_handler error_handler, void *error_data, + int canonicalize); + + int raptor_xml_writer_features_enumerate_v2(raptor_world* world, + const raptor_feature feature, const char **name, raptor_uri **uri, + const char **label); +</pre> + + +<h2 id="rel1_4_18"><a name="rel1_4_18">Raptor 1.4.18 Changes</a></h2> + +<p>Fixed Issues:</p> +<ul> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=186">0000186</a>: Add RDFa support to Raptor</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=255">0000255</a>: rss-tag-soup serializer does not generate namespaces so re-serializing in rdf/xml looks wierd for atom</li> +</ul> + + +<h3>Parser Changes</h3> + +<p>A new +<a href="https://www.w3.org/TR/2008/CR-rdfa-syntax-20080620/">RDFa</a> +parser was added (name <code>rdfa</code>) using +<a href="http://rdfa.digitalbazaar.com/librdfa/">librdfa</a> to +implement it. librdfa is linked as part of Raptor and +written by Manu Sporny of Digital Bazaar, licensed with the +same license as Raptor.</p> + +<p>The RDFa +<a href="https://www.w3.org/2006/07/SWD/RDFa/testsuite/xhtml1-testcases/">test suite</a> +was added to the test and (via librdfa) Raptor passes all but 4 tests +which fail due to different output xmlns attribute ordering (which +does not matter to XML parsers).</p> + + +<h3>Serializer Changes</h3> + +<p>Added new function +<code>raptor_serialize_start_to_iostream()</code> to have the new +semantics of not owning and destroying the passed-in iostream. This +allows the caller to serialize to an existing iostream and then +to continue to write to it. <code>raptor_serialize_start()</code> +owns and then closes the iostream that is passed in. +</p> + +<p>A new Atom Syndication Format 1.0 (<a href="http://www.ietf.org/rfc/rfc4287.txt">RFC 4287</a>) serializer was added (name <code>atom</code>) +using the RSS 1.0 RDF triple model with mapping to atom terms +and consideration of atom output format conditions. +</p> + +<p>RSS 1.0 serializer</p> +<ul> +<li>Allow setting output namespaces for the serializer</li> +<li>Allow writing extra RDF triples as RDF/XML attached to RSS items.</li> +<li>Recognize predicates with XML Literal and emit as +<code>parseType="Literal"</code> or when <code>content:encoded</code>, +as a CDATA block, by RSS 1.0 convention.</li> +<li>Removed code assumptions about triples appearing in a certain order.</li> +<li>Free namespaces and stack in correct order</li> +</ul> + +<p>Turtle serializer now respects the <code>writeBaseURI</code> +feature to control generating the <code>@base</code> directive. +</p> + +<p>Abbreviated serializers (RDF/XML Abbrev and Turtle) now remove +duplicate triples. +</p> + +<p>Added feature <code>RAPTOR_FEATURE_RSS_TRIPLES</code> to add RDF +triples to RSS 1.0 or Atom serializer output with values 'rdfxml' or +'atom-triples'. Atom triples writes <code>at:map</code> sections for +the <code>atom:entry</code> elements and at:feedmap and +<code>at:entrymap</code> sections to the <code>atom:feed</code> +elements. <code>at:contentType</code> is used to provide a +<code>type</code> attribute value for an <code>atom:content</code> +that has a URI value. +</p> + +<p>Added <code>RAPTOR_FEATURE_ATOM_ENTRY_URI</code> for the Atom +serializer to set the URI of an atom entry. If the URI matches the +URI of an entry item in the RDF mode of the channel, then an Atom +Entry document is generated rather than an Atom Feed document. +</p> + + +<h3>QName Class Changes</h3> + +<p>Added <code>raptor_qname_to_counted_name()</code> to get +a formatted qname for a name. +</p> + +<p><code>raptor_new_qname_from_namespace_local_name()</code> will +accept a NULL namespace to construct a namespace-less qname. +</p> + +<h3>Sequence Class Changes</h3> + +<p><code>raptor_sequence_set_at()</code> now handles +setting an item at an index in the sequence beyond capacity+1 +to automatically extend. +</p> + +<p>Added <code>raptor_sequence_delete_at()</code> to delete an item +at a position in a sequence and return it. +</p> + +<h3>URI Class Changes</h3> + +<p><code>raptor_uri_to_relative_counted_uri_string()</code> now +has support for a base URI with scheme and authority but no path, +so the result can be a relative URI starting with '/'. +</p> + +<h3>XML Writer Class Changes</h3> + +<p>XML Writer allows adding newlines via +<code>raptor_xml_writer_newline()</code> which +requires use of <code>raptor_xml_writer_flush()</code> to indicate +when XML writer output is finished. +</p> + +<p>Added <code>raptor_xml_writer_get_depth()</code> to get the current +XML writer element stack depth. +</p> + +<h3>Other Changes</h3> + +<p>Many more resiliance checks were added. +</p> + +<p>Removed all calls to abort() in code on fatal errors. This +requires using setjmp and longjmp inside parsers built with +flex and bison. +</p> + +<p>The Turtle writer may optionally generate @base depending on +flags. (This is used by Turtle serializer to handle the writeBaseURI +feature) +</p> + +<p>Tidied error messages for <code>rapper(1)</code> when parsing stdin. +</p> + +<p>raptor_init() and raptor_finish() use a reference count to ensure +initialising and terminating happen at most once each. +</p> + + + + +<h2 id="rel1_4_17"><a name="rel1_4_17">Raptor 1.4.17 Changes</a></h2> + +<p>The main changes to this release are:</p> + +<p>Added two new JSON serializers: resource-centric 'json' +(Talis <a href="http://n2.talis.com/wiki/RDF_JSON_Specification">RDF/JSON</a>) +and triple-centric 'json-triples'. +</p> + +<p>Made I/O Stream class <code>raptor_iostream</code> support +reading as well as writing with new constructors and +new methods.</p> + +<p>Added a new public SAX2 API class <code>raptor_sax2</code> +exposing the existing internal API which has been around since the +first release of Raptor 8 years ago and runs on top of either expat +or libxml2.</p> + +<p>Added new public error handlers structure +<code>raptor_error_handlers</code> containing a set of +(function, data pointers) pairs called <code>raptor_handler_closure</code> +for each error log level. +Added <code>raptor_log_level</code> enum for the error log level. +Added an initialization function for the structure, +<code>raptor_error_handlers_init()</code>. +</p> + +<p>Several other API changes, fixes and improvements were made.</p> + +<p>Fixed Issues:</p> +<ul> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=252">0000252</a>: Allow controlling of cache headers in Raptor</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=245">0000245</a>: Extra classes added to an OWL object</li> +</ul> + + +<h3>I/O Stream class changes</h3> + +<p>Made I/O Stream class <code>raptor_iostream</code> support +reading data in addition to writing. (Dave B):</p> +<ul> +<li>Deprecated <code>raptor_iostream_handler</code> structure for new +<code>raptor_iostream_handler2</code> structure which contains the +new factory functions for reading.</li> +<li>Added new read I/O stream factory handler typedefs +<code>raptor_iostream_read_bytes_func</code> and +<code>raptor_iostream_read_eof_func</code>. +</li> +<li>Added new <code>raptor_new_iostream_from_handler2()</code> I/O +stream constructor to allow building of read and write iostreams +deprecating <code>raptor_new_iostream_from_handler()</code>. +</li> +<li>Added new <code>raptor_iostream_tell()</code> deprecating +<code>raptor_iostream_get_bytes_written_count</code>. +</li> +<li>Added new read I/O Stream constructors: +<code>raptor_new_iostream_from_sink</code>(), +<code>raptor_new_iostream_from_filename()</code> +<code>raptor_new_iostream_from_file_handle()</code> and +<code>raptor_new_iostream_from_string()</code> +</li> +<li>Added new read I/O Stream methods +<code>raptor_iostream_read_bytes()</code> and +and <code>raptor_iostream_read_eof()</code>. +</li> +</ul> + +<p>Added new write I/O Stream method +<code>raptor_iostream_write_string_python()</code> to write an +encoded string to an I/O stream using python / JSON / Turtle / +N-Triples / SPARQL escaping rules. (Dave B) +</p> + + +<h3>Serializer Class Changes</h3> +<p>Added two new JSON serializers (Dave B):</p> +<ol> +<li>Resource-centric serializer named <code>json</code> based on +<a href="http://n2.talis.com/wiki/RDF_JSON_Specification">Talis RDF/JSON Specification</a></li> +<li>Triple-centric serializer named <code>json-triples</code> based on the SPARQL results in JSON format.</li> +</ol> + +<p>Added new serializer features for the JSON serializers (DaveB):</p> +<ul> +<li><code>RAPTOR_FEATURE_JSON_CALLBACK</code> (name 'jsonCallback') to +set the top-level callback function name wrapper above the outer object.</li> +<li><code>RAPTOR_FEATURE_JSON_EXTRA_DATA</code> (name 'jsonExtraData') to +add extra top-level JSON object data.</li> +</ul> + +<p>Example of using the resource-centric serializer while defining a +callback:</p> +<pre> +$ rapper -q -o json -f jsonCallback=foo https://librdf.org/raptor/raptor.rdf +foo( +{ + "https://librdf.org/raptor/#raptor" : { + "http://usefulinc.com/ns/doap#description" : [ { +... +</pre> + + +<h3>Statement Class Changes</h3> + +<p>Added <code>raptor_statement_compare()</code> to provide an +ordering between <code>raptor_statement</code> objects. (Dave B) +</p> + + +<h3>Parser Class Changes</h3> + +<p>Added new parser features to control HTTP headers in +web requests (Dave B, based on a patch in the bug):<br /> +Also never <code>Pragma:</code> header with libcurl ever.<br /> +Fixes <a href="https://bugs.librdf.org/mantis/view.php?id=252">Issue #0000252</a> +</p> +<ul> +<li><code>RAPTOR_FEATURE_WWW_HTTP_CACHE_CONTROL</code> to control +sending <code>Cache-Control</code> (default: none)</li> +<li><code>RAPTOR_FEATURE_WWW_HTTP_USER_AGENT</code> to control +sending <code>User-Agent</code> (default: none)</li> +</ul> + +<p>Turtle parser:</p> +<ul> +<li>Added tests to forbid <code>'</code> and +<code>'''</code>-quoted strings and to forbid <code>()</code> in +triple predicate position following the updated Turtle spec. (Dave B)</li> +<li>Write ';' statement terminators with a leading +space for consistency with '.' terminator. (Dave R)</li> +<li>Remove canonicalisation of integer and double +to match Turtle latest spec. (Dave B)</li> +</ul> + + +<h3>QName Class Changes</h3> + +<p>Added new methods <code>raptor_qname_get_local_name()</code>, +<code>raptor_qname_get_value()</code> and +<code>raptor_qname_get_counted_value()</code>. (Dave B) +</p> + + +<h3>SAX2 Class Changes</h3> + +<p>Added new public SAX2 API class <code>raptor_sax2</code> exposind +th existing internal one which has been around since the first +release of Raptor 8 years ago and runs on top of either expat or +libxml2. (Dave B)</p> + +<ul> +<li>Constructor: <code>raptor_new_sax2()</code></li> +<li>Destructor: <code>raptor_free_sax2()</code></li> +<li>XML handler methods: + <code>raptor_sax2_set_start_element_handler()</code>, + <code>raptor_sax2_set_end_element_handler()</code>, + <code>raptor_sax2_set_characters_handler()</code>, + <code>raptor_sax2_set_cdata_handler()</code>, + <code>raptor_sax2_set_comment_handler()</code>, + <code>raptor_sax2_set_unparsed_entity_decl_handler()</code> and + <code>raptor_sax2_set_external_entity_ref_handler()</code>. +</li> +<li>XML handler factory typedefs: + <code>raptor_sax2_start_element_handler</code>, + <code>raptor_sax2_end_element_handler</code>, + <code>raptor_sax2_characters_handler</code>, + <code>raptor_sax2_cdata_handler</code>, + <code>raptor_sax2_comment_handler</code>, + <code>raptor_sax2_unparsed_entity_decl_handler</code> and + <code>raptor_sax2_external_entity_ref_handler</code>. +</li> +<li>Set XML Namespace handler method: +<code>raptor_sax2_set_namespace_handler()</code> +</li> +<li>Parsing methods: + <code>raptor_sax2_parse_start()</code> and + <code>raptor_sax2_parse_chunk()</code> +</li> +<li>Other methods: + <code>raptor_sax2_inscope_xml_language()</code> and + <code>raptor_sax2_inscope_base_uri()</code> +</li> +</ul> + + +<h3>Serializer Class Changes</h3> + +<p>Abbreviated serializers (RDF/XML-Abbrev and Turtle):</p> +<ul> +<li>Switched from using a sequence to using an AVL Tree with a cursor +to more efficiently (faster) group/sort triples by subject. This +changes the previous syntax output order but has no semantic +difference. (Dave B) +</li> +<li>Use the AVL Tree to remove duplicate triples. (Dave B)<br /> +Fixes <a href="https://bugs.librdf.org/mantis/view.php?id=245">Issue #0000245</a> +</li> +</ul> + +<p>Turtle serializer:</p> +<ul> +<li>Feature <code>RAPTOR_FEATURE_WRITE_BASE_URI</code> +added to control writing <code>@base</code> directive to Turtle. (Dave R)</li> +<li>Remove canonicalisation of integer and double +to match Turtle latest spec. (Dave B)</li> +</ul> + + +<h3>URI Class Changes</h3> + +<p>Update URI resolving for RFC3986 changes (Dave B) +</p> + + +<h3>WWW Class Changes</h3> + +<p>Added new method <code>raptor_www_set_http_cache_control()</code> +to set the HTTP <code>Cache-Control:</code> header in requests. +(Dave B, based on a patch in the bug) <br /> +Fixes <a href="https://bugs.librdf.org/mantis/view.php?id=252">Issue #0000252</a> +</p> + + +<h3>XML Class Changes</h3> + +<p>Added new method <code>raptor_xml_element_get_language()</code> +to get the language associated with an element. (Dave B) +</p> + + +<h3>Portability and Resilience Changes</h3> + +<p>Pass on error failures in parser and serializer factory +construction. (Lauri) +</p> + +<p>Abbreviated serializers (RDF/XML-abbrev and Turtle): low memory +and allocation failure fixes. (Lauri) +</p> + +<p>Altered API function signatures of +<code>raptor_uri_set_handler()</code>, +<code>raptor_uri_get_handler()</code>, +<code>raptor_new_namespaces(),</code> +<code>raptor_namespaces_init()</code> and +<code>raptor_new_xml_writer()</code> to add appropriate +<code>const</code>s. (Lauri) +</p> + +<p>Portability fixes for RAPTOR_API and other macros. (Lauri) +</p> + +<p>Removal of many sets of writable static data in N-Triples parser, URI +class, Unicode NFC code, libxml support, Turtle writer and XML +writer. (Lauri) +</p> + +<p>Portability fixes for <code>round()</code> and +<code>trunc()</code> that are not always available in libc but might +be in libm. (Dave B) +</p> + +<p>Turtle/N3 parsers and serializers, RDF/XML_Abbrev serializer: many +low memory fixes and better out of memory errors. (Lauri) +</p> + + +<h3>Other Changes</h3> + +<p>Rewrote internal error log functions to use new error handlers +structures and simplify the calls. (Dave B) +</p> + +<p>Expanded internal <code>raptor_avltree</code> datatype support to +add a cursor, allowing it to be used for creating large ordered +sequences that need to be walked. (Dave B) +</p> + +<p>Updated <code>rdfdiff</code> utility to handle duplicate triples +in inputs. (Dave B) +</p> + +<p><code>raptor_sequence_shift()</code> and +<code>raptor_sequence_unshift()</code> are now as efficient as the +sequence push and pop operations: O(1). (Lauri) +</p> + +<p><code>autogen.sh</code> was updated. +</p> + +<p><code>rapper</code> utility can now accept multiple +<code>-f</code> / <code>--feature</code> options; previously +only one parser and one serializer feature was possible. +</p> + + +<h2 id="rel1_4_16"><a name="rel1_4_16">Raptor 1.4.16 Changes</a></h2> + +<p>The main changes to this release are:</p> + +<p>Provide 100% support for the +<a href="https://www.w3.org/TR/2007/REC-grddl-20070911/">GRDDL W3C Recommendation of 2007-09-11</a>. +</p> + +<p>The +<a href="https://www.dajobe.org/2004/01/turtle/">Turtle</a> +parser and serializer were updated to support +<code>@base</code> for specifying a base URI, following +Turtle of 2007-09-11. +</p> + +<p>The Turtle and RDF/XML serializers had performance improvements +for large graphs. +</p> + +<p>Added a TRiG Parser based on Turtle with named graph support.</p> + +<p>Several other API changes, fixes and improvements were made.</p> + +<p>Fixed Issues:</p> +<ul> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=0000188">0000188</a>: Wrong RAPTOR_API definition for mingw</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=0000192">0000192</a>: raptor_uri_filename_to_uri_string() - getcwd() loop error</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=0000194">0000194</a>: parser and serializer don't recognize the same mime types</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=0000195">0000195</a>: Compile error in raptor_serialize.c debug code</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=0000207">0000207</a>: RDF file can be parsed, but not then serialised.</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=0000210">0000210</a>: RAPTOR_FEATURE_WRITER_XML_DECLARATION broken in Ruby</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=0000214">0000214</a>: Empty rdf:about, plus base-uri, produces incorrect turtle output</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=0000216">0000216</a>: flickrdf segfaults at raptor_serialize_end!</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=0000217">0000217</a>: flickrdf segfaults at raptor_serialize_end!</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=0000232">0000232</a>: libraptor does not correctly free up libxml error handler, causing crashes in subsequent calls to libxml error handlers</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=0000237">0000237</a>: raptor_sequence robustness: item ownership on insert error</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=0000238">0000238</a>: GRDDL parser in SVN overwrites blank nodes when merging graphs</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=0000239">0000239</a>: GRDDL parser in SVN returns 60 less triples with https://www.w3.org/</li> +</ul> + + +<h3>Namespaces Class Changes</h3> + +<p><code>raptor_namespaces_init()</code> now returns an integer +status. +</p> + +<h3>Parser Class Changes</h3> + +<p> +Added <code>raptor_graph_handler</code> typedef and +<code>raptor_set_graph_handler()</code> to return named graph +identifiers during parsing, initially for the TRiG parser. +</p> + +<p>These were added the GRDDL parser:</p> +<ul> + <li><code>RAPTOR_FEATURE_MICROFORMATS</code> (microformats) to enable + hCard and hCal microformats</li> + <li><code>RAPTOR_FEATURE_HTML_TAG_SOUP</code> (htmlTagSoup) to use + the HTML tag soup parser if the XML parsing fails</li> + <li><code>RAPTOR_FEATURE_HTML_LINK</code> (htmlLink) to enable html + <link></li> + <li><code>RAPTOR_FEATURE_WWW_TIMEOUT</code> (wwwTimeout) for setting + URI retrieval timeouts during processing</li> +</ul> + + +<h3>XML Element Class Changes</h3> + +<p>Added +<code>raptor_new_xml_element_from_namespace_local_name()</code> +constructor to make an XML element from a local name relative +to a <code>raptor_namespace</code>. +</p> + +<h3>Unicode Class Changes</h3> + +<p>Defined a new <code>raptor_unichar</code> typedef for a Unicode +codepoint defined as <code>unsigned long</code> which was the +previous type used. Altered the Unicode function to take it as a +parameter. <code>raptor_unicode_char_to_utf8()</code>, +<code>raptor_utf8_to_unicode_char()</code>, +<code>raptor_unicode_is_xml11_namestartchar()</code>, +<code>raptor_unicode_is_xml10_namestartchar()</code>, +<code>raptor_unicode_is_xml11_namechar()</code> and +<code>raptor_unicode_is_xml10_namechar()</code>. +</p> + +<h3>URI Class Changes</h3> + +<p>Added <code>raptor_uri_compare()</code> and +<code>raptor_uri_compare_func</code> function pointer for +implementing it in the <code>raptor_uri_handler</code>. The handler +now has a version field <code>initialised</code> to trigger the new +factory method for uri compare when the version is 2 or more. +</p> + +<h3>WWW Class Changes</h3> +<p> +Added <code>raptor_www_set_connection_timeout()</code> +to set the WWW retrieval connection timeout in seconds. +</p> + +<p> +Added <code>raptor_www_final_uri_handler</code> typedef and +<code>raptor_www_set_final_uri_handler()</code> to return +the final URI seen <em>during</em> WWW retrieval such as after +redirects. +</p> + +<p> +Added <code>raptor_www_get_final_uri()</code> to return the final URI +<em>after</em> a WWW retrieval which might include redirects. +</p> + + +<h3>Parser Changes</h3> + +<p>The GRDDL parser/processor was substantially updated and now +supports 100% of the +<a href="https://www.w3.org/TR/2007/REC-grddl-20070911/">Gleaning Resource Descriptions from Dialects of Languages (GRDDL)</a> +syntax, W3C Recommendation of 2007-09-11: +</p> +<ul> + <li>Transforming XML with XSLT 1.0</li> + <li>Processing XML namespaces.</li> + <li>Transforming XHTML with XSLT 1.0</li> + <li>Processing HTML profiles.</li> + <li>Handling of base URIs and URI redirects.</li> + <li>XInclude processing.</li> + <li>Parsing as RDF/XML when it is recognised after a transform.</li> +</ul> + +<p>it also:</p> +<ul> + <li>Handles hCard and hCal microformats when feature + <code>RAPTOR_FEATURE_MICROFORMATS</code> is enabled (default + enabled).</li> + <li>Handles <link type="application/rdf+xml" href="URI" /> to + RDF/XML content when feature <code>RAPTOR_FEATURE_HTML_LINK</code> is + enabled (default enabled).</li> + <li>Attempts parsing with libxml's HTML parser if XML parsing fails, + when feature <code>RAPTOR_FEATURE_HTML_TAG_SOUP</code> is enabled + (default enabled).</li> + <li>Discards errors during recursive processing such as 404s, + failure to parse, failure of XSLT processing.</li> + <li>Uses XSLT security - denies reading, writing to files, + directories or writing to network.</li> + <li>Accepts the <code>RAPTOR_FEATURE_NO_NET</code> feature to prevent + all networking.</li> + <li>Allows fine-grained URI filtering with + <code>raptor_parser_set_uri_filter()</code>.</li> +</ul> + +<p>RDF/XML parser recognising was updated to just the start of the +document for guessing if it should handle content and to try +to avoid html URLs. +</p> + +<p>RSS Tag soup parser recognising was updated to accept with the +string 'feed' in the identifier. +</p> + +<p>TRiG Parser was added based on the Turtle parser, adding named +graphs. It returns name graph URis via a callback set with new API +call <code>raptor_set_graph_handler()</code> +</p> + +<p>Turtle parser added <code>@base</code> support, fixed turtle +escapes to URIs. Recognising was updated to look for +<code>@prefix</code> early in the document. +</p> + +<h3>Serializer Changes</h3> + +<p>Turtle serialiser changes:</p> +<ul> +<li>Generate <code>@base</code> when an output base URI is given.</li> +<li>Properly format Turtle XSD doubles using new snprintf code.</li> +<li>Fix unwanted blank line at end of Turtle list abbreviation.</li> +<li>Use AVL Tree rather than sequence for significant performance +improvement for large serialisations.</li> +</ul> + +<p>RDF/XML serialiser was changed to emit a legal empty RDF/XML +document when no triples are serialised and to skip emitting +statements with bad predicate uris rather than returning an error. +</p> + +<p>RDF/XML Abbrev serialiser was changed to use an AVL tree rather +than sequence for significant performance improvement for large +serialisations. +</p> + +<h3><code>rapper</code> Utility Changes</h3> + +<p>Added an <code>--show-graphs</code> option to print named graph +URIs as seen (such as with TRiG). +</p> + +<p>Added <code>-I</code> / <code>--input-uri</code> and +<code>-O</code> / <code>--output-uri</code> options to set the +input / parsing and output / serializing base URIs +separately. Defaults remain the same - the serializer base URI +defaults to the input base URI, however it was set. +</p> + + +<h3>Portability Changes</h3> + +<p>Fixes for when building from Subversion on cygwin (EOL issues, +Makefiles).</p> + +<p>Remove unused semicolons for prevention of compiler warnings.</p> + +<p>Fix some uninitialized variables that some compilers complain about.</p> + +<p>Allow <code>RAPTOR_ASSERT_DIE</code> to be externally defined.</p> + +<p>Allow <code>RAPTOR_WWW_BUFFER_SIZE</code> to be externally defined.</p> + + +<h3>Other Changes</h3> + +<p><code>autogen.sh</code> was updated to handle program versions +better using an inline perl helper. +</p> + +<p>Start to add resiliance to memory allocation failures +and errors inside the library. +</p> + +<p>Added AVL Tree code to make much faster key:value lookups. This +is used for RDF/XML parser XML ID checks and in the 'abbrev' +serializers - Turtle and RDF/XML-Abbrev for looking up nodes. +</p> + +<p>Better libxml error messages are now returned, mentioning +some of the names and values that caused the error. +</p> + + + +<h2 id="rel1_4_15"><a name="rel1_4_15">Raptor 1.4.15 Changes</a></h2> + +<h3>General Changes</h3> + +<p>GRDDL parser now passes the (unapproved) test suite for the +<a href="https://www.w3.org/TR/2007/WD-grddl-20070302/">GRDDL W3C Working Draft 2 March 2007</a> +except for two tests that have been reported as having errors. +</p> + +<p>When using libcurl as the WWW retrieval library, errors in +resolving a URI such as not found (404) are now reported as proper +errors and cause parsing to fail rather than just return no triples. +</p> + +<p>Some improvments where made to guessing for a parser to match some +content. Firstly, any mime type with Q <10 is added to the score, +don't lose the influence of the mime type entirely. The consequence of +this is that Turtle can pretend to be a partial N3 parser. Secondly, +the XHTML mime type is now correctly recognised by the GRDDL parser +rather than the RSS Tag Soup parser.</p> + + +<p>Fixed Issues:</p> +<ul> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=0000174">#0000174</a>: Serializing to rdfxml* with a base_uri doesn't set the <code>xml:base</code> attribute, but does truncate <code>rdf:about</code> and <code>rdf:resource</code> values</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=0000177">#0000177</a>: Some URI references mis-resolved</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=0000178">#0000178</a>: No errors from accessing 404 URIs</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=0000180">#0000180</a>: messages garble output to stdout</li> +</ul> + + +<h3>Parser and Serializer Changes</h3> + +<p>Added better error reporting for XML errors using the +libxml structured error reporing api. From +</p> +<pre> +$ rapper -i grddl https://librdf.org/LICENSE.txt +rapper: Parsing URI https://librdf.org/LICENSE.txt +rapper: Error - URI https://librdf.org/LICENSE.txt - XML error - https://librdf.org/LICENSE.txt:2: +rapper: Error - URI https://librdf.org/LICENSE.txt - XML error - parser +rapper: Error - URI https://librdf.org/LICENSE.txt - XML error - error : +rapper: Error - URI https://librdf.org/LICENSE.txt - XML error - Document is empty +rapper: Error - URI https://librdf.org/LICENSE.txt - XML error - Redland RDF Application Framework - License +rapper: Error - URI https://librdf.org/LICENSE.txt - XML error - ^ +rapper: Failed to parse URI https://librdf.org/LICENSE.txt grddl content +rapper: Parsing returned 0 triples +</pre> +<p>To this:</p> +<pre> +$ rapper -i grddl https://librdf.org/LICENSE.txt +rapper: Parsing URI https://librdf.org/LICENSE.txt +rapper: Error - URI https://librdf.org/LICENSE.txt:1 - XML parser error: Document is empty +rapper: Error - URI https://librdf.org/LICENSE.txt:1 - XInclude processing failed for GRDDL document +rapper: Failed to parse URI https://librdf.org/LICENSE.txt grddl content +rapper: Parsing returned 0 triples +</pre> + + +<p>GRDDL parser updated to support the +<a href="https://www.w3.org/TR/2007/WD-grddl-20070302/">GRDDL W3C Working Draft 2 March 2007</a>: +</p> +<ul> +<li>Namespace and profile URI handling now works.</li> +<li>Run XML Include processing</li> +<li>Throw away XML validation errors</li> +<li>When a namespace URI is seen that was RDF/XML Mime type, run +the RDF/XML parser on the content.</li> +<li>Look for substrings inside rel attributes when looking for profiles.</li> +<li>Return a warning and do not fail if XSLT sheet is not found</li> +<li>Use libxml structured errors for better reporting</li> +<li>Removed old hard-coded xslt scripts</li> +</ul> + +<p>Turtle parser was changed to accept the N3 mime +type <code>text/rdf+n3</code> at low Q(quality) +so it might work for N3 that is the RDF subset - quite common. +</p> + +<p>Changed the RSS Tag Soup parser and RSS 1.0 serializer to stop +sharing use of the declared namespaces so that when using both at the +same time, there is no double-free of the same objects. +</p> + +<p>Correct the content: namespace URI in the RSS parser and +serializers. +</p> + + +<h3>Other Changes</h3> + +<p><code>rapper</code> gains a <code>-t/--trace</code> option to show +URIs traversed. Handy for GRDDL. +</p> + +<p><code>raptor_uri_resolve_uri_reference()</code> no longer goes +past the end of buffer when the relative URI is <code>,/</code> +</p> + + +<p>Added an internal API for capturing parsed data as it is seen. +Use by GRDDL parser but with no public API. +</p> + +<p>Added an internal API for structured error reporting. Updates +made throughout the library but with no public API. +</p> + +<p>Internal API <code>raptor_new_sax2()</code> signature changed to +just have an <code>error_handlers</code> pointer argument rather than +multiple function / user_data pairs. +</p> + + + + +<h2 id="rel1_4_14"><a name="rel1_4_14">Raptor 1.4.14 Changes</a></h2> + +<h3>General Changes</h3> + +<p>Added a +<a href="https://www.dajobe.org/2004/01/turtle/">Turtle Terse RDF Triple Language</a> serialiser by <a href="http://codeson.net/">Dave Robillard</a> based on the existing RDF/XML-Abbrev +serialiser. +</p> + +<p>Added a GraphViz +<a href="http://www.graphviz.org/doc/info/lang.html">DOT format</a> serialiser +by Evan Nemerson. +</p> + +<p>The GRDDL parser now does namespace and profile URI recursion and +has other improvements and fixes. +</p> + +<p>Fixed Issues:</p> +<ul> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=32">#0000032</a>: GRDDL indirection feature request</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=141">#0000141</a>: Crash when GRDDL parser is used with a used-generated blank node ID prefix.</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=143">#0000143</a>: Crash when GRDDL parser fails to retrieve URI.</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=148">#0000148</a>: A public function to generate a blank ID would be nice though.</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=155">#0000155</a>: entity processing in literal property elements (with libxml)</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=157">#0000157</a>: Crash when RDF/XML Abbrev serializer sees a <code>rdf:type</code> predicate with a literal object.</li> +</ul> + +<h3>Configuration Changes</h3> + +<p><code>raptor-config</code> gains a <code>--private-libs</code> +for the internal libraries used in building raptor, with the public +ones only emitted with <code>--libs</code>. +</p> + +<p><code>raptor.pc</code> now uses <code>Libs.private</code> for +internal dynamically linked libraries. +</p> + +<p>The libxml minimum version is now 2.6.8 since 2.6.7 crashes on +PPC64 Linux. 2.6.8 was released March 2004 so this should be no +burden.</p> + +<p>Do not use <code>PATH_MAX</code> so raptor can build on Hurd. +</p> + +<h3>Parser Changes</h3> + +<p>RDF/XML parser now looks for the RDF/XML root element and +namespace declaration in the initial bytes of content when guessing. +This allows content that is in other mime types such as +<code>application/xml</code> to be more likely guessed as RDF/XML. +</p> + +<p>When guessing a parser to use, if an an exact match is found for +the mime type (q=10), then that parser is used. +</p> + +<p>The GRDDL parser has several changes:</p> +<ul> + <li>Recurses through the root element's namespace URI and the profile + URIs. It excludes several common namespace URIs from processing + (XHTML, RDF/XML, XML Schema) and does not traverse the GRDDL profile + URI itself. + </li> + <li>Tries to guess which of the RDF/XML or Turtle parser is wanted + from an XSLT result. Guessing is performed because not all the XSLT + sheets used in the demonstrations set the mime type to match Turtle's + unregistered type, or because the return no mime type, or return an + XML one, when it was expected RDF/XML would be received. + </li> + <li>Watches the processed URIs and never visits the same URI more + than once in a session. + </li> + <li>Passes on general XSLT errors to raptor rather than letting the + default (printing to stderr) work. + </li> + <li>Declares XSLT 'base' and 'Base' parameters to allow some XSLT + sheets to work - pragmatism. + </li> +</ul> + +<h3>Serializer Changes</h3> + +<p>Added a new +<a href="https://www.dajobe.org/2004/01/turtle/">Turtle Terse RDF Triple Language</a> +serializer and two new internal APIs based on the existing RDF/XML-Abbrev +serialiser, written by <a href="http://codeson.net/">Dave Robillard</a>: +</p> +<ul> + <li><code>turtle_writer</code> for serializing triples to Turtle This + may be moved to the public API in a future release.</li> + <li><code>raptor_abbrev</code> for the common 'abbreviated + serializer' core that is shared between the RDF/XML-Abbrev and Turtle + serializer.</li> +</ul> + +<p>Added a new GraphViz +<a href="http://www.graphviz.org/doc/info/lang.html">DOT format</a> serialiser +writen by Evan Nemerson. +</p> + +<p>Note that testing the turtle serializing (<code>make test</code>) +requires the <code>rdfdiff -u</code> and a few of the tests take some +time to run.</p> + + +<h3>Other Changes</h3> + +<p>Added <code>raptor_home_url_string</code> +and <code>raptor_license_string</code> exported strings. +</p> + +<p>Added <code>raptor_parser_generate_id()</code> as a public function +to generate an identifier for a parser. +</p> + +<p><code>rdfdiff</code> gains the -u/--base-uri option to specify the +from file base URI so that if the from file is a local file or +relative URI, it can be given an absolute base.</p> + +<p>Failures to retrieve content from a URI using +the <code>raptor_www</code> class implementations now return a +failure as well as setting the HTTP status code to 403 or 404 as +appropriate. Previously success may have been returned with no +bytes.</p> + + +<h2 id="rel1_4_13"><a name="rel1_4_13">Raptor 1.4.13 Changes</a></h2> + +<h3>General Changes</h3> + +<p>Prevent losing memory for a <code>raptor_xml_writer</code> when a +serializer is reused several times.</p> + +<p>Fixed issues reported on the <a href="https://bugs.librdf.org/">Redland Issue Tracker</a>:</p> +<ul> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=134">Issue #0000134</a>: Check for equal scheme and authority during construction of relative URIs from two absolute URIs.</li> +</ul> + + +<h3>Configuration Changes</h3> + +<p>In maintainer mode, add all the supported compiler <code>-W</code> +warning flags to the CFLAGS. +</p> + +<p>Allow <code>LEX</code> to be set to things that aren't exactly +'flex'.</p> + +<h3>Documentation Changes</h3> + +<p>Added single triple serializing example to the tutorial to +demonstrate serializing without parsing and building +a <code>raptor_statement</code>.</p> + +<h3>Other Changes</h3> + + +<p>Declare several raptor functions with GCC printf-formatting +attributes when using a new enough GCC.</p> + +<p>RDF/XML parser now creates literals with +<code>raptor_stringbuffer</code> so that it does a lot less copying +when constructing longer literals. +</p> + +<p>Added single <code>raptor_statement</code> serializing example +to demonstrate serializing alone without parsing.</p> + + + +<h2 id="rel1_4_12"><a name="rel1_4_12">Raptor 1.4.12 Changes</a></h2> + +<p>Restored the order of serialized syntaxes back to the same as in +Raptor 1.4.10 which Redland was relying on - asking to serialize to +mime type 'application/rdf+xml' without specifying a parser name in +Redland with Raptor 1.4.11 wrote it in XMP instead of RDF/XML as +it used to. This happened more often with language bindings. +That problem will be fixed in a future release of Redland but for now, +this stops wierd things like that happening. +</p> + + +<h2 id="rel1_4_11"><a name="rel1_4_11">Raptor 1.4.11 Changes</a></h2> + +<h3>General Changes</h3> + +<p>Added <code>raptor_get_feature_count()</code> to return +the count of features, in preference to using the +macro value <code>RAPTOR_FEATURE_LAST</code>. +</p> + +<p>Added <code>raptor_www_set_uri_filter()</code> method of the +WWW class (<code>raptor_www</code>) objects to have an +optional URI filter function that checks if the URL given is +allowed to be retrieved, or denied entirely. +</p> + +<p>Fixed issues reported on the <a href="https://bugs.librdf.org/">Redland Issue Tracker</a>:</p> +<ul> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=0000112">#0000112</a>: raptor_namespaces_qname_from_uri not public API?</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=0000110">#0000110</a>: strcasecmp problem under windows (raptor_rss.c does not compile)</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=0000091">#0000091</a>: guess parser should guess the syntax each time it is run, not be fixed</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=0000089">#0000089</a>: Add a NONET feature to prevent network fetches</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=0000041">#0000041</a>: Allow multiple transformation URLs in data-view:transformation property</li> + <li><a href="https://bugs.librdf.org/mantis/view.php?id=0000014">#0000014</a>: bNode content written twice in rdfxml-abbrev output mode</li> +</ul> + + +<h3>Documentation Changes</h3> + +<p>The +<a href="https://librdf.org/raptor/api/">Raptor Reference Manual</a> +now includes descriptions of all the parsers and serializers and the +tutorial has a new section describing how to filter URIs and deny +network requests.</p> + + +<h3>Parser Changes</h3> + +<p>Added functionality to prevent network requests either via setting +a new feature <code>RAPTOR_FEATURE_NO_NET</code> that denies network +requests during a parser operation or with a URI filter function +<code>raptor_parser_set_uri_filter()</code>. This function uses +<code>raptor_www_set_uri_filter()</code> internally. +</p> + +<p>Added <code>raptor_get_need_base_uri()</code> to tell if a parser +requires a base URI argument. Presently the <em>N-Triples</em> parser +is the only parser that does not require a base URI. +<code>raptor_start_parse()</code> will now throw an error if no base +URI is given and it is needed. +</p> + +<p>The <em>GRDDL parser</em> was changed to +handle a list of URIs in the profile so it now +can support <code>dataview:transformation</code> in XML taking a list +of transformations as defined in +<a href="https://www.w3.org/2004/01/rdxh/spec#grddl-xhtml">The GRDDL profile for XHTML</a> part of the GRDDL specification. +It now also recognises +<a href="http://research.talis.com/2005/erdf/wiki/Main/RdfInHtml">Embedded RDF</a> and +<a href="http://microformats.org/wiki/hcalendar">HCalendar</a> +using well known XPaths and transforms them to RDF triples using well +known XSLT sheet URIs. +</p> + +<p>The <em>Guess parser</em> now resets after each parse and does a +fresh guess on the syntax based on the incoming information. +Fixes <a href="https://bugs.librdf.org/mantis/view.php?id=91">Issue #0000091</a> +</p> + + +<p>The <em>Turtle parser </em> (and experimental N3 parser) were +changed to now require base URIs as they always should have. The +error messages when reporting problems with grammar tokens now return +better responses. Added better memory cleanup during parser error +recovery. +</p> + + +<h3>Serializer Changes</h3> + +<p>The <em>RSS 1.0 Serializer</em> now works again.</p> + +<p>Updated the <em>RDF/XML Abbreviated</em> serializer to do proper +reference counting on the blank/resource nodes used as subjects and +objects to prevent dual-triple generation. Fixes the reported +<a href="https://bugs.librdf.org/mantis/view.php?id=14">Issue #0000014</a> +</p> + + +<h3>Other Changes</h3> + +<p>The internal SAX2 API can also prevent network fetches with the +feature <code>RAPTOR_FEATURE_NO_NET</code>.</p> + +<p>Fixed a SAX2 problem that caused parsers that use it to leak +memory for 1 URI, affected RDF/XML and RSS Tag Soup. +</p> + +<p><code>rapper</code> help and verbose message formats were tidied.</p> + + + +<h2 id="rel1_4_10"><a name="rel1_4_10">Raptor 1.4.10 Changes</a></h2> + +<h3>General Changes</h3> + +<p>No parser will now generate a triple with an identifier type +<code>RAPTOR_IDENTIFIER_TYPE_ORDINAL</code>. Only identifier type +resource, anonymous (blank node) and literal will be generated. +All serializers will convert any +<code>RAPTOR_IDENTIFIER_TYPE_ORDINAL</code> type on input to type +resource. +</p> + + +<h3>Configuration Changes</h3> + +<p>No longer adds LDFLAGS to pkgconfig file <code>raptor.pc</code> +and <code>raptor-config</code> fixing +<a href="https://bugs.librdf.org/mantis/view.php?id=97">Issue #0000097</a>. +</p> + + +<h3>Parser Changes</h3> + +<p>All parsers no longer generate a triple with an identifier type +<code>RAPTOR_IDENTIFIER_TYPE_ORDINAL</code>, as deprecated in 1.4.8. +The replacement type generated is <code>RAPTOR_IDENTIFIER_TYPE_RESOURCE</code>. +</p> + + +<p>The RSS Tag Soup (<code>rss-tag-soup</code>) parser now makes the +triples appear before parser destruction. This caused odd symptoms +like parsing in python returning no triples and the parser then +crashing during object destruction. +</p> + +<p>The RDF/XML (<code>rdfxml</code>) parser no longer crashes if a +comment is seen outside an element, such as before or after the root +element.</p> + + +<h3>Serializer Changes</h3> + +<p>The RDF/XML (<code>rdfxml</code>) serializer no longer crashes if +the serializer is used more than once. +</p> + + + +<h2 id="rel1_4_9"><a name="rel1_4_9">Raptor 1.4.9 Changes</a></h2> + +<h3>Configuration and Build Changes</h3> + +<p>Now using <a href="http://subversion.tigris.org/">Subversion</a> +for version control and the <a href="INSTALL.html">Raptor installation instructions</a> explain how to get Raptor from Subversion.</p> + +<p>configure now allows <code>--enable-parsers=node</code> and +<code>--enable-serializers=none</code>. Using both is possible!</p> + +<p>No longer require libxml2 for the RSS Tag Soup parser</p> + +<p>Various Win32 fixes and VC build files updates from John Barstow. +</p> + + +<h3>Documentation Changes</h3> + +<p>A new +<a href="https://librdf.org/raptor/api/tutorial.html">Raptor Tutorial</a> +was written covering using all parsing and serializing functions along with +example code. +</p> + +<p>The +<a href="https://librdf.org/raptor/api/reference-manual.html">Raptor Reference Manual</a> +now covers 100% of all functions, structs and defines with gtkdoc generated +documentation.</p> + + +<h3><code>rapper</code> utility Changes</h3> + +<p><code>rapper</code> now uses namespaces found in parsing to give +hints to the serializer as to how to format the output. The result +of this is that <code>rapper</code> can be used as an RDF +pretty-printer and is especially good at such things as turning flat +N-Triples to RDF/XML or RDF/XML-Abbrev. such as: +</p> +<pre> +rapper -q -i ntriples -o rdfxml-abbrev example.nt +</pre> + + +<h3>Parser Changes</h3> + +<p>All parsers no longer generate +<code>RAPTOR_IDENTIFIER_TYPE_PREDICATE</code> as the statement +predicate type, as deprecated in 1.4.8. The replacement +type generated is <code>RAPTOR_IDENTIFIER_TYPE_RESOURCE</code>.</p> + +<p>The Turtle parser now has <code>true</code> and <code>false</code> +boolean literals, which were accidently omiited from the parser in +the 1.4.8 update. +</p> + +<p>Parsers can register capabilities for handling multiple mime types +with Q values. These are then used in WWW requests for content +in the <code>Accept:</code> header for HTTP. Added +<code>raptor_parser_factory_add_mime_type</code> for registering, +<code>raptor_parser_get_accept_header</code> to get the accept header +values for the types supported by one parser. +</p> + +<p>From the previous change, the RSS parser now accepts several +unregistered RSS mime types as well as the registered Atom one; the +RDF/XML parser accepts unregistered mime type <code>text/rdf</code> +seen occasionally; the Turtle parser accepts several experimental +mime types. All unregistered or experimental types are accepted with +lower Q than any registered type. +</p> + +<p>The RSS Tag Soup parser for RSS* and Atom no longer requires +libxml2 (for it's XML Reader API). Internal changes mean that it +will fully work on top of expat.</p> + + + +<h3>Serializer Changes</h3> + +<p>The RSS/Atom serializer now uses input namespace declarations to +choose namespaces on output.</p> + +<p>Added <code>raptor_serialize_set_namespace_from_namespace</code> +to set a namespace for serializing from an existing +<code>raptor_namespace</code>. +</p> + +<p>Serializing to RDF/XML (or RDF/XML Abbrev) now does not +double-free URI strings. +Fixes <a href="https://bugs.librdf.org/mantis/view.php?id=65">Issue #0000065</a> +</p> + +<p>RSS serializer no longer writes the XML header twice.</p> + + +<h3>IOStream Class Changes</h3> + +<p>Added <code>raptor_iostream_write_uri</code> to directly write a URI +to an iostream without the need to go via a string.</p> + +<p>Fixed bug in <code>raptor_iostream_write_xml_any_escaped_string</code> +failing to write ';' after escaping U+0009 and U+000A</p> + + +<h3>Namespaces Class Changes</h3> + +<p>Added <code>raptor_namespaces_qname_from_uri</code> to do URI +splitting into qname prefering to use the current in-scope namespaces +before having to search.</p> + +<p><code>raptor_namespaces_format</code> now NULL-terminates the namespace string. +Fixes <a href="https://bugs.librdf.org/mantis/view.php?id=62">Issue #0000062</a> +</p> + +<p>Added <code>raptor_namespace_get_counted_prefix</code> to return a +namespace prefix and it's length.</p> + + +<h3>QName Class Changes</h3> + +<p>Added <code>raptor_qname_get_namespace</code> to get the namespace +associated with a QName.</p> + + +<h3>StringBuffer Class Changes</h3> + +<p><code>raptor_stringbuffer_append_counted_string</code> and +<code>raptor_stringbuffer_append_string</code> now Do nothing on +appending a NULL string or a string of length 0. +Fixes <a href="https://bugs.librdf.org/mantis/view.php?id=73">Issue #0000073</a> +</p> + + +<h3>Unicode Class Changes</h3> + +<p><code>raptor_utf8_to_unicode_char</code> now also checks for +overlong UTF-8 sequences, illegal code positions or out of range +codes. +</p> + + +<h3>URI Class Changes</h3> + +<p>Deprecated <code>raptor_uri_is_file_uri</code> which takes a +URI string argument for new function <code>raptor_uri_string_is_file_uri</code> +which more clearly says that. +</p> + +<p>Changed all URI string calloc/mallocs to add enough room for a +full pointer at the string end to stop valgrind moaning on 64bit +systems when looking for the end of string NUL. +</p> + +<p><code>raptor_uri_set_handler</code> and +<code>raptor_new_iostream_from_handler</code> now take const +<em>handler</em> arguments. +</p> + + +<h3>WWW Class Changes</h3> + +<p>Get the curl success status into a long, not an int which causes +failure on 64 bit. +Fixes <a href="https://bugs.librdf.org/mantis/view.php?id=75">Issue #0000075</a> +</p> + +<p>WWW requests for content to parse now always send an appropriate +<code>Accept:</code> header with Q values for the parser, or for the +<code>guess</code> parser, all supported mime types. +</p> + + +<h3>Internal Changes</h3> + +<p>Added XML element methods +<code>raptor_xml_element_get_attributes</code> and +<code>raptor_xml_element_get_attributes_count</code>, +<code>raptor_xml_element_is_empty</code> +to the SAX2 API. +</p> + +<p>Many internal changes were made to the SAX2 API to finally +separate XML and RDF/XML parts. The SAX2 API is now fully usable on +either libxml2 or expat. That last sentence implies a lot of work, +by the way.</p> + + + +<h2 id="rel1_4_8"><a name="rel1_4_8">Raptor 1.4.8 Changes</a></h2> + +<h3>General Changes</h3> + +<p>A large source re-arrangement was performed. All C sources and +headers that build the library are now in the src dir, general +documentation in the doc dir and utilities in the utils dir. This +both tidied up the mixture of files at the top level and also enabled +better use with gtk-doc. +</p> + +<p>Future API change: From the next release of +Raptor, <code>raptor_statement</code> predicates will return +identifiers of type <code>RAPTOR_IDENTIFIER_TYPE_RESOURCE</code> +instead of <code>RAPTOR_IDENTIFIER_TYPE_PREDICATE</code>. +Identifiers of type <code>RAPTOR_IDENTIFIER_TYPE_ORDINAL</code> may +no longer be returned in any statement position (to be confirmed). +</p> + +<p>Version Control change: Raptor will be switching to use +<a href="http://subversion.tigris.org/">Subversion</a> +for version control after the 1.4.8 release. Please check the +<a href="http://svn.librdf.org/">Redland Subversion site</a> +for the latest status or the online +<a href="https://librdf.org/raptor/INSTALL.html">Raptor installation notes</a> +for the raptor specific subversion installation information. +</p> + + + +<h3>Configuration Changes</h3> + +<p>The autogen.sh script for building from CVS was revamped to be +more modular.</p> + +<p><code>configure</code> now takes an <code>--enable-gtk-doc</code> +option to enable building of the documentation using the +<code>gtk-doc</code> utility. It is by default enabled only if the +utility is available. +</p> + +<p>Added a new configure option <code>--enable-serializers</code> (in +1.4.7) to allow the selection of the required RDF serializers from +any of those supported.</p> + +<p><code>raptor-config</code> now has a <code>--options</code> +argument to list the configured or discovered options of the library +such as parsers, serializers and other choices. +</p> + + +<h3>Documentation Changes</h3> + +<p>The GNOME <code>gtk-doc</code> program is now used to +automatically extract documentation from source comments into +reference documentation. This is then merged with templates and +additional documentation to provide a reference manual for raptor +as XML document which is turned into HTML along with GNOME devhelp +support.</p> + +<p>This new documentation intended to replace the libraptor manual +page/web page as easier to read document with scope for better +expanding with more detail of raptor including examples and tutorial +information. The manual page will continue to contain the summary +information for the present. +</p> + + +<h3>Portability Changes</h3> + +<p>Fixed a long-standing URI resolution bug on win32 - only remove +leading / if there is one present (patch from John C. Barstow)</p> + + +<h3><code>rapper</code> utility Changes</h3> + +<p>Altered the <code>-g</code> argument to invoke the guessing parser +rather than guess on file/URI name alone. This is now equivalent to +choosing an input syntax of <em>guess</em> with <code>-i guess</code>.</p> + +<p>Added a <code>--show-namespaces</code> long option (no short version) +to show namespaces that are declared in the parsed content. +</p> + + +<h3>Parser Changes</h3> + +<p>A new guessing parser was added, picking the actual parser to use +at run-time based on protocol or other information.</p> + +<p>Allow a content type returned by a protocol (such as HTTP) to +enable choosing of parser at run-time. Added a new optional +parser factory method <code>content_type_handler</code> to return this. +</p> + +<p>Allow parsers to handle several syntaxes rather than only 1 or 2. +</p> + +<p>Parsers can now return namespace prefix/URI declarations as +they are given in the content by the means of a new handler type +<code>raptor_namespace_handler</code> and parser method +<code>raptor_set_namespace_handler</code>. Duplicate namespace +prefix/URIs can be returned. +</p> + +<h4>GRDDL Parser Changes</h4> + +<p>Bug fix when the entire content is in one chunk (René Puls).</p> + +<h4>Guessing Parser Changes</h4> + +<p>A new parser that guesses the actual parser to use at run-time +based on a combination of MIME Content-Type, file or URI name and in +future, iniital bytes of the content. If the Content-Type is an +exact match to a known parser, it is always chosen before trying +heuristics. +</p> + +<h4>RDF/XML Parser Changes</h4> + +<p>When emitting literals, handle a datatyped empty literal. This +is a post-REC errata for the revised RDF/XML recommendation. +See +<a href="http://lists.w3.org/Archives/Public/www-archive/2005Jul/0017.html">archived example</a> +for further information. +</p> + +<h4>RSS Tag Soup Parser Changes</h4> + +<p>Added atom 1.0 support including use of the new namespace. Atom +0.3 namespace terms are turned into new properties. Replace atom +copies of Dublin Core or RSS properties with the original terms: +</p> +<div style="text-align:center"> +<table> +<tr><th>Atom 1.0 term</th> <th>Original term</th></tr> +<tr><td><code>atom:content</code></td> <td><code>rss:description</code></td></tr> +<tr><td><code>atom:id</code></td> <td><code>rss:link</code></td></tr> +<tr><td><code>atom:published</code></td> <td><code>dc:date</code></td></tr> +<tr><td><code>atom:rights</code></td> <td><code>dc:rights</code></td></tr> +<tr><td><code>atom:title</code></td> <td><code>rss:title</code></td></tr> +</table> +</div> + +<p>Apply the in-scope base URI (such as from <code>xml:base</code>) +to atom 1.0 fields that take URI values: +<code>atom:id</code>, <code>atom:icon</code> and <code>atom:logo</code>. +</p> + +<p>Added optional date parsing code to turn XML RSS date fields into +ISO format ones, suitable for Atom and XML schema datatypes format. +Will use library parsedate code from curl or INN if available. +</p> + +<p>XML RSS field <code>pubDate</code> is now turned into Dublin Core +<code>dc:date</code> field in the ISO format. +</p> + +<p>XML RSS field <code>content</code> is turned into +<code>content:encoded</code> in RDF triples on output with +escaping.</p> + +<h4>Turtle Parser Changes</h4> + +<p>Updated to support Turtle version 2006-01-02 +(<a href="https://www.dajobe.org/2004/01/turtle/">announcement</a>). +</p> + +<p>Switch qname, blank node and prefix definitions to SPARQL ones.</p> + +<p>Check for illegal not-hexadecimal \u and \U escape values.</p> + +<p>Fix greedy matching of long literals ("""....""") that ended on +the last """ found rather than the first.</p> <!-- """ --> + +<p>Added double and decimal constants.</p> + +<p>Added optional +- sign to all numeric constants.</p> + +<p>Allow \" escape inside long strings.</p> + +<p>Take care to reset the generated <code>raptor_statement</code> +language and datatype fields when not used. +</p> + + +<h3>Serializer Changes</h3> + +<p>Added a new Atom 1.0 serializer (name <em>atom</em>) +by parameterising the RSS 1.0 serializer. +</p> + +<p>Added a new Adobe XMP compatible serializer (name <em>rdfxml-xmp</em>) +by parameterising the RDF/XML Abbreviated serializer. Patch provided by +Sid Steward. +</p> + +<p>All serializers can be chosen at <code>configure</code> time from +those available using configure option <code>--enable-serializers</code>. +</p> + +<p>The RSS parser and serializer can now be independently enabled or +disabled. The RSS serializer no longer requires an XML parser.</p> + + +<h3>RDF/XML Serializer / XML Writer Changes</h3> + +<p>A new XML Writer feature +<code>RAPTOR_FEATURE_WRITER_XML_VERSION</code> was added to allow +chosing XML 1.0 (value 10) or XML 1.1 output (value 11). This +feature is also accepted by serializers as an option and used by the +RDF/XML and RDF/XML-Abbrev serializers. +</p> + +<p>A new XML Writer feature +<code>RAPTOR_FEATURE_WRITER_XML_DECLARATION</code> was added to allow +omitting the XML declaration (default true). +</p> + +<p>Added functions <code>raptor_xml_any_escape_string()</code> +and <code>raptor_iostream_write_xml_any_escaped_string()</code> +which take an XML version. The XML 1.0 functions give errors +when attempting to write #x1-#x1f (excluding #x9, #xA, #xD) or #x7F. +</p> + + +<h3>Atom 1.0 Serializer Changes</h3> + +<p>Added a new serializer using the Atom 1.0 format and namespace. +This reads RDF triples in the RSS 1.0 model, along with any +additional atom 1.0 properties and serializes an Atom 1.0 feed +file.</p> + + +<h3>Adobe XMP Serializer Changes</h3> + +<p>Added a new serializer writing RDF/XML in the profile used by +Adobe XMP. Note that this does require RDF triples to be used in a +certain style; for example all triple subjects are the "current +documment" giving <code>rdf:about=""</code>.</p> + + +<h3>URI Class Changes</h3> + +<p>Fix a bug when adding a default path of / to a URI +in functions <code>raptor_new_uri_for_xmlbase()</code> +and <code>raptor_new_uri_for_retrieval()</code>. +(Bug #<a href="https://bugs.librdf.org/mantis/view.php?id=45">0000045</a>) +</p> + + +<p><em>raptor_uri_equals</em> was altered to accept NULL pointers, +which do not compare equal to a non-NULL URI. NULL does equal NULL. +</p> + + +<h3>Internal Changes</h3> + +<p>The internal SAX2 class was extensively changed so that remaining +interdependencies with the RDF/XML parser were removed and it can now +be re-used for other syntaxes cleanly. Several functions +were modified or added.</p> + +<p>Removed old and hardly-tested internal support for XML entity +resolution (libxml only).</p> + +<p>Various fixes for GCC 4 warnings. +</p> + + +<h2 id="rel1_4_7"><a name="rel1_4_7">Raptor 1.4.7 Changes</a></h2> + +<p>Fix a couple of crashes in the RSS tag soup parser / serializer +(Dave Beckett, Suzan Foster).</p> + +<p><code>configure</code> now looks for the +<code>libxslt/xslt.h</code> header as well as the +<code>libxslt</code> library and disables XSLT and GRDDL support it +if is missing. This catches systems with the libraries without +headers as has happened on some OSX versions. +</p> + +<p>In serializers rdfxml and rdfxml-abbrev, report failure to +serialize to RDF/XML if the predicate URI is not absolute. +</p> + + +<h2 id="rel1_4_6"><a name="rel1_4_6">Raptor 1.4.6 Changes</a></h2> + +<p>Added <code>--with-xslt-config</code> configure option</p> + +<p>Added a new parser for +<a href="https://www.w3.org/2004/01/rdxh/spec">Gleaning Resource Descriptions from Dialects of Languages (GRDDL)</a> +which allows reading XHTML and XML as RDF triples by using profiles +in the document that declare XSLT transforms from the XHTML/XML +content into RDF/XML which is the RDF content. It does not +support all the GRDDL styles, for example +<code>dataview:namespaceTransformation</code>, +or perform recursive transformations. +</p> + +<p>The turtle parser now accepts """long literals"""</p> + +<p>XML writer feature support were added in 1.4.5 and not documented. +The new functions are: +<code>raptor_xml_writer_features_enumerate</code>, +<code>raptor_xml_writer_set_feature</code>, +<code>raptor_xml_writer_set_feature_string</code>, +<code>raptor_xml_writer_get_feature</code> and +<code>raptor_xml_writer_get_feature_string</code>. +The three XML writer features added are +\fBRAPTOR_FEATURE_WRITER_AUTO_INDENT\fR with boolean value (default true) +to auto-indent the XML, +\fBRAPTOR_FEATURE_WRITER_AUTO_EMPTY\fR with boolean value (default true) +to automatically generate empty elements if a start/end element sequence +has no content and +\fBRAPTOR_FEATURE_WRITER_INDENT_WIDTH\fR with an integer value (default 2) +to set the indenting level for the XML. +</p> + +<p>New build configuration and portability fixes for win32 (John Barstow)</p> + +<p>Portability fixes for win32 - added +<code>SIZEOF_UNSIGNED_SHORT</code> (Dave Viner, others)</p> + +<p>Added a signing memory debugging system to aid checking when +raptor-allocated memory is freed in another library or vice-versa +enabled by <code>--with-memory-signing</code> configure option +(defaults to on in maintainer mode).</p> + +<p>Fixed a few internal malloc/frees to use RAPTOR_MALLOC / RAPTOR_FREE +so that the above signed memory system worked.</p> + +<p>RDF/XML serializer: +Use the maximal name when splitting a predicate.<br /> +Turn datatyped literals that are rdf:XMLLiteral into inline XML with +<code>rdf:parseType="Literal"</code> rather than XML-escaped. +</p> + +<p>RDF/XML abbreviated serializer: +Fix a crash when there is a NULL base URI. +Use the maximal name when splitting a predicate.<br /> +Turn datatyped literals that are rdf:XMLLiteral into inline XML with +<code>rdf:parseType="Literal"</code> rather than XML-escaped. +</p> + +<p>RSS tag soup parser: +Fix crash with unexpected use of <code>alternate</code> attribute.<br /> +Update from Suzan Foster to reflect the latest status of the +enclosure vocabulary and allow multiple common items and fields. +</p> + +<p>RSS 1.0 serializer: +Added RSS enclosures serializing. +</p> + +<p><code>grapper</code> example GTK program now stores the window +width and height using gconf2.</p> + + +<h2 id="rel1_4_5"><a name="rel1_4_5">Raptor 1.4.5 Changes</a></h2> + +<p>Added a new <em>RDF/XML with abbreviations</em> serializer +<code>rdfxml-abbrev</code> written by Steve Shepard which handles +several of the abbreviations specified by the +<a href="https://www.w3.org/TR/rdf-syntax-grammar/">RDF/XML Syntax Specification (Revised)</a> +W3C Recommendation. It is suitable for writing small documents as +there are known scaling issues. +</p> + +<p>The RSS tag soup parser was updated to work better when there is +no base URI given. It also now supports reading the +<a href="http://inamidst.com/rss1.1/">RSS 1.1</a> format and +turning it into RSS 1.0 model triples.</p> + +<p>Deprecated <code>raptor_ntriples_string_as_utf8_string</code> as +rather too internal to be useful, since it only works with a parser. +</p> + +<p>More fixes to work around the broken libxml2 on Apple OSX 10.3.x +with inconsistent shared libraries / headers.</p> + +<p>Experimental and incomplete Notation 3 parser - updated to match +changes to Turtle. CVS changes only, not enabled in standard builds. +</p> + + + +<h2 id="rel1_4_4"><a name="rel1_4_4">Raptor 1.4.4 Changes</a></h2> + +<p>Make the RSS tag soup parser handle RSS 0.9 namespace elements by +turning them into RSS 1.0.</p> + +<p>Fix a couple of crashes in the RSS 1.0 serialiser when +no base URI is used.</p> + +<p>Make <code>raptor_uri_to_relative_counted_uri_string</code> +work when the base or reference URI have no paths such as like +<em>http://example.org</em> +</p> + +<p>Added portability fixes for Win32 to get Raptor 1.4.3 building +with MS Visual Studio using expat and libcurl. The RAPTOR_INTERNAL +define was moved to the build configuration and defines added for +integral type sizes. Patch from Dave Viner (dviner at apache dot +org).</p> + + + +<h2 id="rel1_4_3"><a name="rel1_4_3">Raptor 1.4.3 Changes</a></h2> + +<p>A release with the major new feature of an XML writer API. +This is now used along with a new supporting XML element class to +improve the existing RDF/XML serializer and to provide a new +<a href="http://purl.org/rss/1.0/spec">RSS 1.0</a> serializer. +</p> + +<p>This API it is also used by the next release of +<a href="https://librdf.org/rasqal/">Rasqal</a> to provide serializing +of query results to XML. +</p> + +<p>The new <code>raptor_xml_writer</code> class functions added are: +<code>raptor_new_xml_writer</code> (constructor), +<code>raptor_free_xml_writer</code> (destructor), +<code>raptor_xml_writer_empty_element</code>, +<code>raptor_xml_writer_start_element</code>, +<code>raptor_xml_writer_end_element</code>, +<code>raptor_xml_writer_cdata</code>, +<code>raptor_xml_writer_cdata_counted</code>, +<code>raptor_xml_writer_raw</code>, +<code>raptor_xml_writer_raw_counted</code>, +<code>raptor_xml_writer_comment</code> and +<code>raptor_xml_writer_comment_counted</code>. +</p> + +<p>The new <code>raptor_xml_element</code> class functions added are: +<code>raptor_new_xml_element</code> (constructor), +<code>raptor_free_xml_element</code> (destructor), +<code>raptor_xml_element_get_name</code>, +<code>raptor_xml_element_set_attributes</code>, +<code>raptor_xml_element_declare_namespace</code> and +<code>raptor_iostream_write_xml_element</code>. +</p> + + +<h3>Parser Changes</h3> + +<p>RSS tag soup parser now works with older libxml2s (2.5.10+), +including the one shipped with some Apple OSX versions that has an +inconsistent header file and library.</p> + +<p>RSS tag soup parser recognises/scores more common XML RSS file names.</p> + +<p>RSS tag soup parser turns XML RSS +<code><guid isPermaLink="true">val</guid></code> +into RDF/XML form <code><guid rdf:resource="val"/></code>, leaving +the non isPermaLink form to be a literal value.</p> + +<p>A bug was found in libxml2 that causes double expanding of XML +entities in RDF/XML. This has been reported but cannot be worked +around from raptor. The expat XML parser can be used as an +alternative, as it does not have this problem. A test was added for +this bug but it will not cause the test suite ('make check') to +fail.</p> + +<p>Added additional +<a href="https://www.dajobe.org/2004/01/turtle/">Turtle</a> +parser tests that cover Notation 3 syntax that is not part of the +Turtle language.</p> + +<p>Added +<code>raptor_parser_set_feature_string</code> and +<code>raptor_parser_get_feature_string</code> +methods to set/get string feature values.</p> + + +<h3>Serializer Changes</h3> + +<p>Added feature <code>relative_uris</code> for serializers. This +is used by the RDF/XML serializer and enabled by default.</p> + +<p>Added feature <code>start_uri</code> for serializers with a string +value to set the start URI for serializing. Not used at present.</p> + +<p>Added new methods <code>raptor_serializer_features_enumerate</code> +to list serializer features and functions to set/get serializer +feature integer or strings values: +<code>raptor_serializer_set_feature</code>, +<code>raptor_serializer_get_feature</code>, +<code>raptor_serializer_set_feature_string</code> and +<code>raptor_serializer_get_feature_string</code>. +</p> + +<p>Added <code>raptor_serialize_set_namespace</code> to allow user +declaration of prefix/URI namespaces pairs as serializing hints.</p> + +<p>the RDF/XML serializer was improved using the new XML Writer class +so it now uses any user-declared namespace hints in it's output and +emits relative URIs whenever possible. The latter was provided +by a patch from René Puls.</p> + +<p>A new +<a href="http://purl.org/rss/1.0/spec">RSS 1.0</a> +serializer was added, using the new XML Writer class +and using the same structures, classes and properties as the RSS tag +soup parser.</p> + + +<h3>URI class changes</h3> + +<p>Added relative URI generating code from a patch written by René Puls +and provide this with two new methods +<code>raptor_uri_to_relative_uri_string</code> and +<code>raptor_uri_to_relative_counted_uri_string</code>. +</p> + +<p>Added <code>raptor_uri_print</code> to print a URI to a file handle.</p> + +<p>Added methods <code>raptor_uri_to_string</code> and +<code>raptor_uri_to_counted_string</code> to return a URI as newly +allocated strings.</p> + + +<h3>I/O Stream Changes</h3> + +<p>Many classes gained methods to write to iostreams, supporting the +new XML Writer class functionality. The added methods are: +<code>raptor_iostream_write_namespace</code>, +<code>raptor_iostream_write_ntriples_string</code>, +<code>raptor_iostream_write_qname</code>, +<code>raptor_iostream_write_statement_ntriples</code>, +<code>raptor_iostream_write_stringbuffer</code>, +<code>raptor_iostream_write_xml_element</code> and +<code>raptor_iostream_write_xml_escaped_string</code>. +</p> + + +<h3>Namespace Class Changes</h3> + +<p>Added <code>raptor_namespace_copy</code> copy +constructor and <code>raptor_new_namespace_from_uri</code> +constructor to build a namespace from a raptor_uri object.</p> + +<p>Added utility function <code>raptor_new_namespace_parts_from_string</code> +to decode syntax of the form +<code>xmlns:</code><em>prefix</em><code>="</code><em>uri</em><code>"</code> +into <em>prefix</em> and <em>uri</em> string pairs. +</p> + +<p>Added <code>raptor_namespaces_find_namespace_by_uri</code> method +for namespace stack to find a declared namespace by URI. This +complements <code>raptor_namespaces_find_namespace</code> which +already provides searching by prefix.</p> + + +<h3>Unicode and UTF-8 Changes</h3> + +<p>Added several methods for checking characters forming +parts of XML 1.0 or XML 1.1 names: +<code>raptor_unicode_is_xml10_namestartchar</code>, +<code>raptor_unicode_is_xml11_namestartchar</code>, +<code>raptor_unicode_is_xml10_namechar</code> and +<code>raptor_unicode_is_xml11_namechar</code>. +</p> + +<p>Added a function <code>raptor_utf8_check</code> to check that a +string is legal UTF-8 and all the encoded Unicode characters are in +the range U+0 <= character <= U+10FFFF</p> + +<p>Added a function <code>raptor_xml_name_check</code> to check that +a string is a legal XML name (1.0 or 1.1) as well as legal UTF-8.</p> + + +<h3>Other Changes</h3> + +<p>Feature support: Added <code>raptor_feature_value_type</code> to +determine value of a feature - either integer (most) or string.</p> + +<p>XML QName class: Added <code>raptor_qname_copy</code> copy +constructor.</p> + +<p>Sequence class: Added <code>raptor_sequence_join</code> +to join two sequences of items, leaving one empty.</p> + +<p>Statement class: Added <code>raptor_statement_copy</code> copy +constructor and <code>raptor_free_statement</code> destructor. +Previously these were internal to raptor.</p> + +<p>The <code>rapper</code> utility was modified to add a feature form: +<code>-f xmlns:</code><em>PREFIX</em><code>="</code><em>URI</em><code>"</code> +allowing the setting of output serializer namespaces.</p> + +<p>The namespace URI string constants exported by raptor are now of +type unsigned char*.</p> + + +<h2 id="rel1_4_2"><a name="rel1_4_2">Raptor 1.4.2 Changes</a></h2> + +<p>Make <code>raptor_xml_escape_string</code> fail correctly when +given bad UTF-8 to escape.</p> + + +<h2 id="rel1_4_1"><a name="rel1_4_1">Raptor 1.4.1 Changes</a></h2> + +<p>Fixed a buffer overrun in decoding a URI scheme in +<code>raptor_uri</code> constructors such as +<code>raptor_new_uri</code>.</p> + +<p>Fixed a crash in RSS enclosures crash when the <code>url</code> +attribute seen on a non-<code><enclosure></code> element</p> + +<p><code>raptor_xml_escape_string</code> return value has changed to +be an int, returning <0 on failure. This allows the empty string +encoding an empty string case to work and be distinguished from an +error. +</p> + + +<h2 id="rel1_4_0"><a name="rel1_4_0">Raptor 1.4.0 Changes</a></h2> + +<p>A release with the major new feature of providing serializing of +RDF triples to syntaxes. It also added a new support class for I/O +streams and had other minor fixes.</p> + +<p>Added a Raptor Serializer class (<code>raptor_serializer</code>) +with similar style to Parser (<code>raptor_parser</code>). Two +serializers are provided, for RDF/XML and N-Triples. The serializing +can be done to files, C <code>FILE*</code> or to strings. The +raptor_iostream class that provides this also allows writing +to any other form by creating a custom iostream. +</p> + +<p>The new raptor_serializer class functions added are: +<code>raptor_serializers_enumerate</code>, +<code>raptor_serializer_syntax_name_check</code>, +<code>raptor_new_serializer</code>, +<code>raptor_free_serializer</code>, +<code>raptor_serialize_start</code>, +<code>raptor_serialize_start_to_filename</code>, +<code>raptor_serialize_start_to_string</code>, +<code>raptor_serialize_start_to_file_handle</code>, +<code>raptor_serialize_statement</code>, +<code>raptor_serialize_end</code>, +<code>raptor_serializer_get_iostream</code>, +<code>raptor_serializer_set_error_handler</code>, +<code>raptor_serializer_set_warning_handler</code> and +<code>raptor_serializer_get_locator</code> +</p> + +<p>Added a Raptor I/O stream abstraction in +<code>raptor_iostream</code> class to support serializing of RDF to +multiple output streams such as to filenames, to C standard I/O +<code>FILE*</code> handles and to strings especially for +cross-language use. A <code>raptor_iostream_handler</code> can +be used to construct a user-defined iostream. +</p> + +<p>The new raptor_iostream class functions added are: +<code>raptor_new_iostream_from_handler</code>, +<code>raptor_new_iostream_to_sink</code>, +<code>raptor_new_iostream_to_filename</code>, +<code>raptor_new_iostream_to_file_handle</code>, +<code>raptor_new_iostream_to_string</code>, +<code>raptor_free_iostream</code>, +<code>raptor_iostream_write_bytes</code>, +<code>raptor_iostream_write_byte</code>, +<code>raptor_iostream_write_end</code>, +<code>raptor_iostream_write_string</code>, +<code>raptor_iostream_write_counted_string</code>, +<code>raptor_iostream_get_bytes_written_count</code>, +<code>raptor_iostream_write_decimal</code> and +<code>raptor_iostream_format_hexadecimal</code>. +</p> + + +<p>The <code>rapper</code> utility was modified to use serializer +class so that the output formats supported are now N-Triples +(<code>-o ntriples</code>) - the default, and RDF/XML (<code>-o +rdfxml</code>).</p> + + +<p>Raptor now exports more static namespace URI strings for +general application use: +<code>raptor_xml_namespace_uri</code>, +<code>raptor_rdf_namespace_uri</code>, +<code>raptor_rdf_schema_namespace_uri</code>, +<code>raptor_xmlschema_datatypes_namespace_uri</code>, +<code>raptor_owl_namespace_uri</code>, +and the length +<code>raptor_rdf_namespace_uri_len</code>. +</p> + +<p>The raptor_stringbuffer class gained a new method +<code>raptor_stringbuffer_copy_to_string</code> +which allows efficient copy-out of a constructed string. +</p> + +<p>The raptor_www class gained a new method +<code>raptor_www_fetch_to_string</code> to allow retrieving of +web content as a single string. +</p> + +<p>RSS tag soup parser gained support for generating triples for +enclosures, after a patch from Suzan Foster. Changes made include +correcting the enclosures namespace and tidying some memory leaks. +</p> + + +<h2 id="rel1_3_3"><a name="rel1_3_3">Raptor 1.3.3 Changes</a></h2> + +<p>A release with major improvements along with several minor fixes.</p> + +<p>Raptor's License was changed from LGPL 2.1/MPL 1.1 to +LGPL 2.1/Apache 2</p> + +<p>Thanks to Chris Pointon for several patches to make Raptor +easier to build under Win32 which were applied, with some slight +modifications.</p> + +<p>Increased WWW content retrieval buffer size from 256 bytes to 4K +since this was causing problems for even moderate size documents.</p> + +<p>After testing raptor on a very large RDF/XML file with many +<code>rdf:ID</code> values, the check for duplicate values was found +to be inefficient in memory and slow. The implementation was +improved to be more memory efficient and a new parser feature +<code>check_rdf_id</code> was added to disable checking (default is +enabled).</p> + +<p>Added a new Unicode NFC checker to replace the functionality +formally available by calling the GNOME glib function +g_utf8_normalize. This new checker is done via several tables and +adds approximately 50K to the object size of the library when +compiled on x86. This code and tables can be disabled with configure +option <code>--disable-nfc-check</code> causing all checks to +succeed.</p> + +<p>Fix the exporting of +<code>raptor_xml_literal_datatype_uri_string</code> and +<code>raptor_xml_literal_datatype_uri_string_len</code> as constants +for use by applications. Previously raptor.h wasn't doing this +correctly.</p> + +<p>Added <code>raptor_calloc_memory</code> for allocating zeroed +memory inside raptor, for use by applications passing memory in/out +of raptor.</p> + +<p>Added a new configure option <code>--enable-parsers</code> to +allow the selection of the required RDF parsers from any of those +supported (RDF/XML, Turtle, N-Triples, RSS tag soup). +</p> + +<p>Reorganised the sources to split parsing support from RDF/XML +to support compiling without this parser.</p> + +<p>Updated the RSS Tag Soup parser to start to handle the Atom 0.3 +currently being standardised by the +<a href="http://www.ietf.org/html.charters/atompub-charter.html">IETF Atom Publishing Format and Protocol</a> +working group. +</p> + +<p>Altered the Turtle parser to work with large source documents that +exceeded bison limits. Thanks to Geoff Chappell for providing a fix for +this.</p> + +<p>Rewrote the URI parsing to create an internal structure and +improved the relative URI resolving in preparation for future work +such as potentially supporting URI canonicalisation such as proposed +to be used by Atom.</p> + + +<h2 id="rel1_3_2"><a name="rel1_3_2">Raptor 1.3.2 Changes</a></h2> + +<p>A release with some minor fixes.</p> + +<p>Added a new configure option +<code>--with-expat-source=</code><em>DIR</em> +to allow the use of external expat source trees in either the old or +newer directory structure style. (Patch from Mark Smith).</p> + +<p>Added <code>raptor_alloc_memory</code> for handlers that need to +allocate memory in the same heap as raptor uses for +<code>raptor_free_memory</code>. This is mostly useful for allocating +memory that is freed by raptor in error, ID and statement handlers +on win32 which has separate heaps for different DLLs.</p> + +<p>A bug was fixed where errors which happened when fetching WWW +content were always printed to stderr. They are now passed to the +main error routines which allows applications to retrieve them.</p> + +<p>Accessor functions were added for parts of the public +<code>raptor_locator</code> structure which makes it possible to get +structured error information from language bindings via Redland +(Patch from Edd Dumbill). The new functions are:</p> + +<ul> +<li><code>int raptor_locator_line(raptor_locator *locator);</code></li> +<li><code>int raptor_locator_column(raptor_locator *locator);</code></li> +<li><code>int raptor_locator_byte(raptor_locator *locator);</code></li> +<li><code>const char * raptor_locator_file(raptor_locator *locator);</code></li> +<li><code>const char * raptor_locator_uri(raptor_locator *locator);</code></li> +</ul> + +<p>The Unicode Normal Form C (NFC) checking via the GNOME glib +library function <code>g_utf8_normalize</code> is broken, comparing +the data it says is failed against other NFC checkers. It is also +slower than need be since it is doing full normalizing rather than +just checking for NFC, and adds a rather large dependency for just +one function. A new portable checker will be added in a later +release.</p> + + + + +<h2 id="rel1_3_1"><a name="rel1_3_1">Raptor 1.3.1 Changes</a></h2> + +<p>A release primarily to fix some win32 and portability issues.</p> + +<p>raptor.h now includes stdarg.h</p> + +<p>Corrected the <code>raptor_print_statement</code> declaration in +raptor.h for the argument statement to have one less 'const' which +matches the actual code.</p> + +<p>Made several portability fixes for compiling natively on win32 +which doesn't quite do POSIX or C99.</p> + +<p>Changed the support for file: URIs and converting to and from +filenames. It now %-escapes spaces and % characters on conversion +to and from filenames with +<code>raptor_uri_uri_string_to_filename</code>, +<code>raptor_uri_uri_string_to_filename_fragment</code> +and +<code>raptor_uri_filename_to_uri_string</code>. +For Win32, more tests were added and the +format of URIs supported corrected to use the <code>file:///c:</code> +form rather than <code>file://c|/</code></p> + +<p>URIs that resolve to directories now return an error when lstat is +available to check.</p> + + + +<h3>Parser Changes</h3> + +<p>The +<a href="https://www.dajobe.org/2004/01/turtle/">Turtle</a> +parser was updated to only allow language with non-datatyped literals, +allow a '_' immediately after a ':' in qnames and to make a bare ':' +qname work correctly. +</p> + +<p>The Turtle parser was fixed to re-initialise correctly when +performing multiple parsings. The other parsers already did this +correctly.</p> + +<p>Added a warning to the RDF/XML parser for unknown +<code>rdf:parseType</code> values, when parsing in lax mode - which +is the default. It now tells the user when the parsing is working as +'Literal' mode by finding an unknown value. This is controlled by a +new parser feature warn_other_parsetypes which is default set true +in lax mode. Parser modes are controlled by the +<code>raptor_set_parser_strict</code> method.</p> + + + +<h2 id="rel1_3_0"><a name="rel1_3_0">Raptor 1.3.0 Changes</a></h2> + +<p>A release primarily to provide support for +the new <a href="https://librdf.org/rasqal/">Rasqal</a> +RDF query library but with some new features and fixes.</p> + + +<h3>Parser Changes</h3> + +<p>Added a new constructor + <code>raptor_new_parser_for_content</code> to guess the parser to use +from hints in URIs or content, using a new utility function +<code>raptor_guess_parser_name</code>.</p> + +<p>Additional checks were added to the RDF/XML parser for +RDF-namespaced names in element and attributes and if they are +forbidden giving an error otherwise if unknown, giving a warning.</p> + +<p>The +<a href="https://www.dajobe.org/2004/01/turtle/">Turtle</a> +parser was updated to correct the collections syntax, allow '-' in +names and QNames and to add integer literals. This parser now correctly +uses <code>raptor_generate_id</code> when a blank identifier name is +needed.</p> + +<p>Completed parser feature support by adding <code>raptor_get_feature</code>, +<code>raptor_feature_from_uri</code>, and +<code>raptor_features_enumerate</code> to get values and enable +discovery of supported features at run time. +<code>raptor_set_feature</code> was changed to give return a success +value</p> + +<p>Added a new method <code>raptor_get_mime_type</code> to get the +MIME type of the syntax for a parser</p> + +<p><code>raptor_parse_uri_with_connection</code> (which is called by +<code>raptor_parse_uri</code>) now sets the HTTP <code>Accept:</code> +header to the MIME type of the parser in WWW requests using the new +<code>raptor_www_set_http_accept()</code>. +</p> + + +<h3><code>rapper</code> changes</h3> + +<p>Added options <code>-f</code>/<code>--feature</code> for setting +features and <code>-g</code>/<code>--guess</code> for guessing syntax +from some content or identifiers. See <a href="rapper.html">rapper(1)</a> +for all rapper options.</p> + + +<h3>Utility function changes</h3> + +<p>Added <code>raptor_syntax_name_check</code> to check for valid +syntax language names.<br /> +</p> + +<p>Added <code>raptor_free_memory</code> to free memory returned by +raptor functions.</p> + +<p>Added Unicode utility functions <code>raptor_unicode_char_to_utf8</code> and +<code>raptor_utf8_to_unicode_char</code>.</p> + +<p>Exported URI string <code>raptor_xml_literal_datatype_uri_string</code>.</p> + +<p>Deprecated <code>raptor_print_statement_detailed</code> always +intended to be internal.</p> + + +<h3>WWW Class changes</h3> + +<p>Added support to set the HTTP <code>Accept:</code> header for curl +and libxml2 when retrieving HTTP content by the new +<code>raptor_www_set_http_accept</code> method. +</p> + + +<h3>New classes - Sequence and Stringbuffer</h3> + +<p>Added a utility class <code>raptor_sequence</code> providing +simple sequences that can handle stacks and queues</p> + +<p>Added a utility class <code>raptor_stringbuffer</code> +for constructing strings from substrings appended or prepended.</p> + + + +<h2 id="rel_older"><a name="rel_older">Raptor 0.9.0 - Raptor 1.2.0 Changes</a></h2> + +<p>Release notes for 1.2.0 and earlier are in the +<a href="NEWS.html">NEWS page</a> or +<a href="ChangeLog">ChangeLog</a> +</p> + + + +<hr /> + +<p>Copyright (C) 2003-2023 <a href="https://www.dajobe.org/">Dave Beckett</a><br />Copyright (C) 2003-2005 <a href="https://www.bristol.ac.uk/">University of Bristol</a></p> + +</body> +</html> |