summaryrefslogtreecommitdiffstats
path: root/tests/feeds
diff options
context:
space:
mode:
Diffstat (limited to 'tests/feeds')
-rw-r--r--tests/feeds/CMakeLists.txt75
-rw-r--r--tests/feeds/Makefile.am248
-rw-r--r--tests/feeds/Makefile.in719
-rw-r--r--tests/feeds/atom.rnc334
-rw-r--r--tests/feeds/atom.rng597
-rw-r--r--tests/feeds/test01-result.atom26
-rw-r--r--tests/feeds/test01-result.ttl40
-rw-r--r--tests/feeds/test01.rdf44
-rw-r--r--tests/feeds/test02-result.atom60
-rw-r--r--tests/feeds/test02-result.ttl41
-rw-r--r--tests/feeds/test02.rdf44
-rw-r--r--tests/feeds/test03-result.atom84
-rw-r--r--tests/feeds/test03-result.ttl57
-rw-r--r--tests/feeds/test03.rdf72
-rw-r--r--tests/feeds/test04-result.ttl67
-rw-r--r--tests/feeds/test04.atom44
-rw-r--r--tests/feeds/test05-result.ttl24
-rw-r--r--tests/feeds/test05.atom9
18 files changed, 2585 insertions, 0 deletions
diff --git a/tests/feeds/CMakeLists.txt b/tests/feeds/CMakeLists.txt
new file mode 100644
index 0000000..43b9bc6
--- /dev/null
+++ b/tests/feeds/CMakeLists.txt
@@ -0,0 +1,75 @@
+# raptor/tests/feeds/CMakeLists.txt
+#
+# Original listfile by Daniel Richard G. <skunk@iSKUNK.ORG>
+# This file is in the public domain.
+#
+
+IF(RAPTOR_PARSER_RDFXML)
+
+ RAPPER_TEST(feeds.test01.rdf
+ "${RAPPER} -q -i rdfxml -o turtle -f writeBaseURI=0 -O http://example.org/whatsnew file:${CMAKE_CURRENT_SOURCE_DIR}/test01.rdf"
+ test01.ttl
+ ${CMAKE_CURRENT_SOURCE_DIR}/test01-result.ttl
+ )
+
+ RAPPER_TEST(feeds.test02.rdf
+ "${RAPPER} -q -i rdfxml -o turtle -f writeBaseURI=0 -O http://example.org/news/ file:${CMAKE_CURRENT_SOURCE_DIR}/test02.rdf"
+ test02.ttl
+ ${CMAKE_CURRENT_SOURCE_DIR}/test02-result.ttl
+ )
+
+ RAPPER_TEST(feeds.test03.rdf
+ "${RAPPER} -q -i rdfxml -o turtle -f writeBaseURI=0 -O http://example.org file:${CMAKE_CURRENT_SOURCE_DIR}/test03.rdf"
+ test03.ttl
+ ${CMAKE_CURRENT_SOURCE_DIR}/test03-result.ttl
+ )
+
+ENDIF(RAPTOR_PARSER_RDFXML)
+
+IF(RAPTOR_PARSER_RSS)
+
+ RAPPER_TEST(feeds.test04.atom
+ "${RAPPER} -q -i rss-tag-soup -o turtle -f writeBaseURI=0 -O http://www.example.org/blog/ file:${CMAKE_CURRENT_SOURCE_DIR}/test04.atom"
+ test04.ttl
+ ${CMAKE_CURRENT_SOURCE_DIR}/test04-result.ttl
+ )
+
+ RAPPER_TEST(feeds.test05.atom
+ "${RAPPER} -q -i rss-tag-soup -o turtle -f writeBaseURI=0 -O http://www.example.org/blog/ file:${CMAKE_CURRENT_SOURCE_DIR}/test05.atom"
+ test05.ttl
+ ${CMAKE_CURRENT_SOURCE_DIR}/test05-result.ttl
+ )
+
+ENDIF(RAPTOR_PARSER_RSS)
+
+IF(RAPTOR_SERIALIZER_ATOM)
+
+ RAPPER_TEST(feeds.test01.ttl
+ "${RAPPER} -q -i turtle -o atom -f writeBaseURI=0 -f rssTriples=atom-triples -f atomEntryUri=http://example.org/2006/03/28/blog-item -I http://example.org/whatsnew -O http://example.org/whatsnew file:test01.ttl"
+ test01.atom
+ ${CMAKE_CURRENT_SOURCE_DIR}/test01-result.atom
+ )
+
+ RAPPER_TEST(feeds.test02.ttl
+ "${RAPPER} -q -i turtle -o atom -f writeBaseURI=0 -f rssTriples=atom-triples -I http://example.org/news/ -O http://example.org/news/ file:test02.ttl"
+ test02.atom
+ ${CMAKE_CURRENT_SOURCE_DIR}/test02-result.atom
+ )
+
+ RAPPER_TEST(feeds.test03.ttl
+ "${RAPPER} -q -i turtle -o atom -f writeBaseURI=0 -f rssTriples=atom-triples -I http://example.org -O http://example.org file:test03.ttl"
+ test03.atom
+ ${CMAKE_CURRENT_SOURCE_DIR}/test03-result.atom
+ )
+
+ENDIF(RAPTOR_SERIALIZER_ATOM)
+
+IF(HAVE_JING)
+ ADD_TEST(feeds.jing-test01.atom ${JING} ${CMAKE_CURRENT_SOURCE_DIR}/atom.rng test01.atom)
+ ADD_TEST(feeds.jing-test02.atom ${JING} ${CMAKE_CURRENT_SOURCE_DIR}/atom.rng test02.atom)
+ ADD_TEST(feeds.jing-test03.atom ${JING} ${CMAKE_CURRENT_SOURCE_DIR}/atom.rng test03.atom)
+ ADD_TEST(feeds.jing-test04.atom ${JING} ${CMAKE_CURRENT_SOURCE_DIR}/atom.rng ${CMAKE_CURRENT_SOURCE_DIR}/test04.atom)
+ ADD_TEST(feeds.jing-test05.atom ${JING} ${CMAKE_CURRENT_SOURCE_DIR}/atom.rng ${CMAKE_CURRENT_SOURCE_DIR}/test05.atom)
+ENDIF(HAVE_JING)
+
+# end raptor/tests/feeds/CMakeLists.txt
diff --git a/tests/feeds/Makefile.am b/tests/feeds/Makefile.am
new file mode 100644
index 0000000..82b67d6
--- /dev/null
+++ b/tests/feeds/Makefile.am
@@ -0,0 +1,248 @@
+# -*- Mode: Makefile -*-
+#
+# Makefile.am - automake file for Raptor Feed tests
+#
+# Copyright (C) 2009, David Beckett http://www.dajobe.org/
+#
+# This package is Free Software and part of Redland http://librdf.org/
+#
+# It is licensed under the following three licenses as alternatives:
+# 1. GNU Lesser General Public License (LGPL) V2.1 or any newer version
+# 2. GNU General Public License (GPL) V2 or any newer version
+# 3. Apache License, V2.0 or any newer version
+#
+# You may not use this file except in compliance with at least one of
+# the above three licenses.
+#
+# See LICENSE.html or LICENSE.txt at the top of this package for the
+# complete terms and further detail along with the license texts for
+# the licenses in COPYING.LIB, COPYING and LICENSE-2.0.txt respectively.
+#
+#
+
+# Input RDF/XML (atom model) files - rdfxml parser
+TEST_IN_RDF_ATOMS= test01.rdf test02.rdf test03.rdf
+# Input Atom 1.0 (atom model) files - rss-tag-soup parser
+TEST_IN_ATOMS= test04.atom test05.atom
+
+# Output files in Turtle (after parsing) and Atom (after serializing)
+OUT_RDF_TTLS= $(TEST_IN_RDF_ATOMS:.rdf=.ttl)
+OUT_ATOM_TTLS= $(TEST_IN_ATOMS:.atom=.ttl)
+OUT_RDF_ATOMS= $(TEST_IN_RDF_ATOMS:.rdf=.atom)
+
+# Expected results for above
+EXPECTED_TTLS= $(OUT_RDF_TTLS:.ttl=-result.ttl) $(OUT_ATOM_TTLS:.ttl=-result.ttl)
+EXPECTED_ATOMS= $(OUT_RDF_ATOMS:.atom=-result.atom)
+
+# Files generated during testing (to delete/clean)
+OUT_TTLS = $(OUT_RDF_TTLS) $(OUT_ATOM_TTLS)
+OUT_ATOMS = $(OUT_RDF_ATOMS)
+
+EXTRA_DIST = \
+CMakeLists.txt \
+$(TEST_IN_RDF_ATOMS) $(TEST_IN_ATOMS) \
+$(EXPECTED_TTLS) $(EXPECTED_ATOMS) \
+atom.rng atom.rnc
+
+CLEANFILES = $(OUT_ATOMS) $(OUT_TTLS) CMakeTests.txt errors*.log
+
+RAPPER = $(top_builddir)/utils/rapper
+
+# http://www.thaiopensource.com/relaxng/trang.html
+TRANG = trang
+
+build-rapper:
+ @(cd $(top_builddir)/utils ; $(MAKE) rapper$(EXEEXT))
+
+FEED_TESTS=
+
+if RAPTOR_PARSER_RDFXML
+FEED_TESTS += check-rdfxml-to-turtle
+endif
+
+if RAPTOR_PARSER_RSS
+FEED_TESTS += check-atom-to-turtle
+endif
+
+if RAPTOR_SERIALIZER_ATOM
+FEED_TESTS += check-serialize-atom
+endif
+
+if MAINTAINER_MODE
+FEED_TESTS += check-validate-atom
+endif
+
+check-local: build-rapper $(FEED_TESTS)
+
+if MAINTAINER_MODE
+check_rdfxml_to_turtle_deps = $(TEST_IN_RDF_ATOMS)
+endif
+
+# Parse from RDF/XML and Serialize to Turtle
+check-rdfxml-to-turtle: $(check_rdfxml_to_turtle_deps)
+ @set +e; result=0; \
+ $(RECHO) "Testing RDF/XML to Turtle"; \
+ printf 'IF(RAPTOR_PARSER_RDFXML)\n\n' >>CMakeTests.txt; \
+ for test in $(TEST_IN_RDF_ATOMS); do \
+ parser=rdfxml; \
+ name=`basename $$test .rdf` ; \
+ turtle="$$name.ttl"; \
+ expected="$$name-result.ttl"; \
+ opts="-f writeBaseURI=0"; \
+ if test $$name = test01; then \
+ baseuri="http://example.org/whatsnew"; \
+ elif test $$name = test02; then \
+ baseuri="http://example.org/news/"; \
+ elif test $$name = test03; then \
+ baseuri="http://example.org"; \
+ fi; \
+ opts="-q -i $$parser -o turtle $$opts -O $$baseuri"; \
+ $(RECHO) $(RECHO_N) "Checking $$test $(RECHO_C)"; \
+ $(RAPPER) $$opts file:$(srcdir)/$$test > $$turtle 2> errors-crtt.log; \
+ status=$$?; \
+ if test $$status != 0; then \
+ $(RECHO) "FAILED with code $$status"; \
+ $(RECHO) "$(RAPPER) $$opts file:$(srcdir)/$$test"; \
+ cat errors-crtt.log ; \
+ result=1 ; \
+ elif cmp $(srcdir)/$$expected $$turtle >/dev/null 2>&1; then \
+ $(RECHO) "ok"; \
+ else \
+ $(RECHO) "FAILED"; \
+ $(RECHO) "$(RAPPER) $$opts file:$(srcdir)/$$test"; \
+ diff -u $(srcdir)/$$expected $$turtle; result=1; \
+ fi; \
+ rm -f errors-crtt.log ; \
+ printf '\tRAPPER_TEST(%s\n\t\t"%s"\n\t\t%s\n\t\t%s\n\t)\n\n' \
+ feeds.$$test \
+ "\$${RAPPER} $$opts file:\$${CMAKE_CURRENT_SOURCE_DIR}/$$test" \
+ $$turtle \
+ "\$${CMAKE_CURRENT_SOURCE_DIR}/$$expected" >>CMakeTests.txt; \
+ done; \
+ printf 'ENDIF(RAPTOR_PARSER_RDFXML)\n\n' >>CMakeTests.txt; \
+ set -e; exit $$result
+
+if MAINTAINER_MODE
+check_atom_to_turtle_deps = $(TEST_IN_ATOMS)
+endif
+
+# Parser from Atom and Serialize to Turtle
+check-atom-to-turtle: $(check_atom_to_turtle_deps)
+ @set +e; result=0; \
+ $(RECHO) "Testing Atom to Turtle"; \
+ printf 'IF(RAPTOR_PARSER_RSS)\n\n' >>CMakeTests.txt; \
+ for test in $(TEST_IN_ATOMS); do \
+ parser=rss-tag-soup; \
+ name=`basename $$test .atom` ; \
+ turtle="$$name.ttl"; \
+ expected="$$name-result.ttl"; \
+ opts="-f writeBaseURI=0"; \
+ baseuri="http://www.example.org/blog/"; \
+ if test $$name = test04; then \
+ baseuri="http://www.example.org/blog/"; \
+ fi; \
+ opts="-q -i $$parser -o turtle $$opts -O $$baseuri"; \
+ $(RECHO) $(RECHO_N) "Checking $$test $(RECHO_C)"; \
+ $(RAPPER) $$opts file:$(srcdir)/$$test > $$turtle 2> errors-catt.log; \
+ status=$$?; \
+ if test $$status != 0; then \
+ $(RECHO) "FAILED with code $$status"; \
+ $(RECHO) "$(RAPPER) $$opts file:$(srcdir)/$$test"; \
+ cat errors-catt.log ; \
+ result=1 ; \
+ elif cmp $(srcdir)/$$expected $$turtle >/dev/null 2>&1; then \
+ $(RECHO) "ok"; \
+ else \
+ $(RECHO) "FAILED"; \
+ $(RECHO) "$(RAPPER) $$opts file:$(srcdir)/$$test"; \
+ diff -u $(srcdir)/$$expected $$turtle; result=1; \
+ fi; \
+ rm -f errors-catt.log ; \
+ printf '\tRAPPER_TEST(%s\n\t\t"%s"\n\t\t%s\n\t\t%s\n\t)\n\n' \
+ feeds.$$test \
+ "\$${RAPPER} $$opts file:\$${CMAKE_CURRENT_SOURCE_DIR}/$$test" \
+ $$turtle \
+ "\$${CMAKE_CURRENT_SOURCE_DIR}/$$expected" >>CMakeTests.txt; \
+ done; \
+ printf 'ENDIF(RAPTOR_PARSER_RSS)\n\n' >>CMakeTests.txt; \
+ set -e; exit $$result
+
+# Parser from Turtle and Serialize to Atom
+check-serialize-atom: check-atom-to-turtle
+ @set +e; result=0; \
+ $(RECHO) "Testing Turtle to Atom XML"; \
+ printf 'IF(RAPTOR_SERIALIZER_ATOM)\n\n' >>CMakeTests.txt; \
+ for test in $(OUT_RDF_TTLS); do \
+ name=`basename $$test .ttl` ; \
+ atom="$$name.atom"; \
+ expected="$$name-result.atom"; \
+ opts="-f writeBaseURI=0 -f rssTriples=atom-triples"; \
+ if test $$name = test01; then \
+ baseuri="http://example.org/whatsnew"; \
+ opts="$$opts -f atomEntryUri=http://example.org/2006/03/28/blog-item"; \
+ elif test $$name = test02; then \
+ baseuri="http://example.org/news/"; \
+ elif test $$name = test03; then \
+ baseuri="http://example.org"; \
+ fi; \
+ opts="-q -i turtle -o atom $$opts -I $$baseuri -O $$baseuri"; \
+ $(RECHO) $(RECHO_N) "Checking $$test $(RECHO_C)"; \
+ $(RAPPER) $$opts file:$$test > $$atom 2> errors-csa.log; \
+ status=$$?; \
+ if test $$status != 0; then \
+ $(RECHO) "FAILED with code $$status"; \
+ $(RECHO) "$(RAPPER) $$opts file:$$test"; \
+ cat errors-csa.log ; \
+ result=1 ; \
+ elif cmp $(srcdir)/$$expected $$atom >/dev/null 2>&1; then \
+ $(RECHO) "ok"; \
+ else \
+ $(RECHO) "FAILED"; \
+ $(RECHO) "$(RAPPER) $$opts file:$(srcdir)/$$test"; \
+ diff -u $(srcdir)/$$expected $$atom; result=1; \
+ fi; \
+ rm -f errors-csa.log ; \
+ printf '\tRAPPER_TEST(%s\n\t\t"%s"\n\t\t%s\n\t\t%s\n\t)\n\n' \
+ feeds.$$test \
+ "\$${RAPPER} $$opts file:$$test" \
+ $$atom \
+ "\$${CMAKE_CURRENT_SOURCE_DIR}/$$expected" >>CMakeTests.txt; \
+ done; \
+ printf 'ENDIF(RAPTOR_SERIALIZER_ATOM)\n\n' >>CMakeTests.txt; \
+ set -e; exit $$result
+
+
+if MAINTAINER_MODE
+SUFFIXES = .rng .rnc
+
+.rnc.rng:
+ $(TRANG) $< $@
+
+check-validate-atom: $(srcdir)/atom.rng check-serialize-atom $(TEST_IN_ATOMS)
+ @set +e; result=0; \
+ if test "X$(JING)" = X; then \
+ $(RECHO) "WARNING: Skipping feed validation RelaxNG tests - jing is missing"; \
+ else \
+ $(RECHO) "Validating Atom XML with RelaxNG"; \
+ for atom in $(OUT_ATOMS) $(TEST_IN_ATOMS); do \
+ test -f $$atom || atom=$(srcdir)/$$atom; \
+ $(RECHO) $(RECHO_N) "Validating $$atom $(RECHO_C)"; \
+ $(JING) $(srcdir)/atom.rng $$atom > errors-cva.log 2>&1; \
+ status=$$?; \
+ if test $$status != 0; then \
+ $(RECHO) "FAILED with code $$status"; result=1; \
+ $(RECHO) $(JING) $(srcdir)/atom.rng $$atom; \
+ sed -e "s,^.*$$atom,$$atom," errors-cva.log ; \
+ result=1 ; \
+ else \
+ $(RECHO) "ok"; \
+ fi; \
+ rm -f errors-cva.log; \
+ printf '\tADD_TEST(%s %s)\n' \
+ feeds.jing-$$atom \
+ "\$${JING} \$${CMAKE_CURRENT_SOURCE_DIR}/atom.rng $$atom" >>CMakeTests.txt; \
+ done; \
+ fi; \
+ set -e; exit $$result
+
+endif
diff --git a/tests/feeds/Makefile.in b/tests/feeds/Makefile.in
new file mode 100644
index 0000000..e283464
--- /dev/null
+++ b/tests/feeds/Makefile.in
@@ -0,0 +1,719 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# -*- Mode: Makefile -*-
+#
+# Makefile.am - automake file for Raptor Feed tests
+#
+# Copyright (C) 2009, David Beckett http://www.dajobe.org/
+#
+# This package is Free Software and part of Redland http://librdf.org/
+#
+# It is licensed under the following three licenses as alternatives:
+# 1. GNU Lesser General Public License (LGPL) V2.1 or any newer version
+# 2. GNU General Public License (GPL) V2 or any newer version
+# 3. Apache License, V2.0 or any newer version
+#
+# You may not use this file except in compliance with at least one of
+# the above three licenses.
+#
+# See LICENSE.html or LICENSE.txt at the top of this package for the
+# complete terms and further detail along with the license texts for
+# the licenses in COPYING.LIB, COPYING and LICENSE-2.0.txt respectively.
+#
+#
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@RAPTOR_PARSER_RDFXML_TRUE@am__append_1 = check-rdfxml-to-turtle
+@RAPTOR_PARSER_RSS_TRUE@am__append_2 = check-atom-to-turtle
+@RAPTOR_SERIALIZER_ATOM_TRUE@am__append_3 = check-serialize-atom
+@MAINTAINER_MODE_TRUE@am__append_4 = check-validate-atom
+subdir = tests/feeds
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/gtk-doc.m4 \
+ $(top_srcdir)/build/libtool.m4 \
+ $(top_srcdir)/build/ltoptions.m4 \
+ $(top_srcdir)/build/ltsugar.m4 \
+ $(top_srcdir)/build/ltversion.m4 \
+ $(top_srcdir)/build/lt~obsolete.m4 $(top_srcdir)/build/pkg.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/raptor_config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BISON = @BISON@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CURL_CONFIG = @CURL_CONFIG@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GREP = @GREP@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
+GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
+GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
+HTML_DIR = @HTML_DIR@
+ICU_CFLAGS = @ICU_CFLAGS@
+ICU_LIBS = @ICU_LIBS@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JING = @JING@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBCURL_CFLAGS = @LIBCURL_CFLAGS@
+LIBCURL_LIBS = @LIBCURL_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBXML_CFLAGS = @LIBXML_CFLAGS@
+LIBXML_LIBS = @LIBXML_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MEM = @MEM@
+MEM_LIBS = @MEM_LIBS@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+PKG_CONFIG_REQUIRES = @PKG_CONFIG_REQUIRES@
+RANLIB = @RANLIB@
+RAPTOR_LDFLAGS = @RAPTOR_LDFLAGS@
+RAPTOR_LIBTOOLLIBS = @RAPTOR_LIBTOOLLIBS@
+RAPTOR_LIBTOOL_VERSION = @RAPTOR_LIBTOOL_VERSION@
+RAPTOR_PARSERS = @RAPTOR_PARSERS@
+RAPTOR_SERIALIZERS = @RAPTOR_SERIALIZERS@
+RAPTOR_VERSION = @RAPTOR_VERSION@
+RAPTOR_VERSION_DECIMAL = @RAPTOR_VERSION_DECIMAL@
+RAPTOR_VERSION_MAJOR = @RAPTOR_VERSION_MAJOR@
+RAPTOR_VERSION_MINOR = @RAPTOR_VERSION_MINOR@
+RAPTOR_VERSION_RELEASE = @RAPTOR_VERSION_RELEASE@
+RAPTOR_WWW_LIBRARY = @RAPTOR_WWW_LIBRARY@
+RAPTOR_XML_PARSER = @RAPTOR_XML_PARSER@
+RECHO = @RECHO@
+RECHO_C = @RECHO_C@
+RECHO_N = @RECHO_N@
+RPM_RELEASE = @RPM_RELEASE@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TAR = @TAR@
+VERSION = @VERSION@
+XML_CONFIG = @XML_CONFIG@
+XSLT_CFLAGS = @XSLT_CFLAGS@
+XSLT_CONFIG = @XSLT_CONFIG@
+XSLT_LIBS = @XSLT_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# Input RDF/XML (atom model) files - rdfxml parser
+TEST_IN_RDF_ATOMS = test01.rdf test02.rdf test03.rdf
+# Input Atom 1.0 (atom model) files - rss-tag-soup parser
+TEST_IN_ATOMS = test04.atom test05.atom
+
+# Output files in Turtle (after parsing) and Atom (after serializing)
+OUT_RDF_TTLS = $(TEST_IN_RDF_ATOMS:.rdf=.ttl)
+OUT_ATOM_TTLS = $(TEST_IN_ATOMS:.atom=.ttl)
+OUT_RDF_ATOMS = $(TEST_IN_RDF_ATOMS:.rdf=.atom)
+
+# Expected results for above
+EXPECTED_TTLS = $(OUT_RDF_TTLS:.ttl=-result.ttl) $(OUT_ATOM_TTLS:.ttl=-result.ttl)
+EXPECTED_ATOMS = $(OUT_RDF_ATOMS:.atom=-result.atom)
+
+# Files generated during testing (to delete/clean)
+OUT_TTLS = $(OUT_RDF_TTLS) $(OUT_ATOM_TTLS)
+OUT_ATOMS = $(OUT_RDF_ATOMS)
+EXTRA_DIST = \
+CMakeLists.txt \
+$(TEST_IN_RDF_ATOMS) $(TEST_IN_ATOMS) \
+$(EXPECTED_TTLS) $(EXPECTED_ATOMS) \
+atom.rng atom.rnc
+
+CLEANFILES = $(OUT_ATOMS) $(OUT_TTLS) CMakeTests.txt errors*.log
+RAPPER = $(top_builddir)/utils/rapper
+
+# http://www.thaiopensource.com/relaxng/trang.html
+TRANG = trang
+FEED_TESTS = $(am__append_1) $(am__append_2) $(am__append_3) \
+ $(am__append_4)
+@MAINTAINER_MODE_TRUE@check_rdfxml_to_turtle_deps = $(TEST_IN_RDF_ATOMS)
+@MAINTAINER_MODE_TRUE@check_atom_to_turtle_deps = $(TEST_IN_ATOMS)
+@MAINTAINER_MODE_TRUE@SUFFIXES = .rng .rnc
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .rng .rnc
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/feeds/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu tests/feeds/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) check-local
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: all all-am check check-am check-local clean clean-generic \
+ clean-libtool cscopelist-am ctags-am distclean \
+ distclean-generic distclean-libtool distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \
+ uninstall-am
+
+.PRECIOUS: Makefile
+
+
+build-rapper:
+ @(cd $(top_builddir)/utils ; $(MAKE) rapper$(EXEEXT))
+
+check-local: build-rapper $(FEED_TESTS)
+
+# Parse from RDF/XML and Serialize to Turtle
+check-rdfxml-to-turtle: $(check_rdfxml_to_turtle_deps)
+ @set +e; result=0; \
+ $(RECHO) "Testing RDF/XML to Turtle"; \
+ printf 'IF(RAPTOR_PARSER_RDFXML)\n\n' >>CMakeTests.txt; \
+ for test in $(TEST_IN_RDF_ATOMS); do \
+ parser=rdfxml; \
+ name=`basename $$test .rdf` ; \
+ turtle="$$name.ttl"; \
+ expected="$$name-result.ttl"; \
+ opts="-f writeBaseURI=0"; \
+ if test $$name = test01; then \
+ baseuri="http://example.org/whatsnew"; \
+ elif test $$name = test02; then \
+ baseuri="http://example.org/news/"; \
+ elif test $$name = test03; then \
+ baseuri="http://example.org"; \
+ fi; \
+ opts="-q -i $$parser -o turtle $$opts -O $$baseuri"; \
+ $(RECHO) $(RECHO_N) "Checking $$test $(RECHO_C)"; \
+ $(RAPPER) $$opts file:$(srcdir)/$$test > $$turtle 2> errors-crtt.log; \
+ status=$$?; \
+ if test $$status != 0; then \
+ $(RECHO) "FAILED with code $$status"; \
+ $(RECHO) "$(RAPPER) $$opts file:$(srcdir)/$$test"; \
+ cat errors-crtt.log ; \
+ result=1 ; \
+ elif cmp $(srcdir)/$$expected $$turtle >/dev/null 2>&1; then \
+ $(RECHO) "ok"; \
+ else \
+ $(RECHO) "FAILED"; \
+ $(RECHO) "$(RAPPER) $$opts file:$(srcdir)/$$test"; \
+ diff -u $(srcdir)/$$expected $$turtle; result=1; \
+ fi; \
+ rm -f errors-crtt.log ; \
+ printf '\tRAPPER_TEST(%s\n\t\t"%s"\n\t\t%s\n\t\t%s\n\t)\n\n' \
+ feeds.$$test \
+ "\$${RAPPER} $$opts file:\$${CMAKE_CURRENT_SOURCE_DIR}/$$test" \
+ $$turtle \
+ "\$${CMAKE_CURRENT_SOURCE_DIR}/$$expected" >>CMakeTests.txt; \
+ done; \
+ printf 'ENDIF(RAPTOR_PARSER_RDFXML)\n\n' >>CMakeTests.txt; \
+ set -e; exit $$result
+
+# Parser from Atom and Serialize to Turtle
+check-atom-to-turtle: $(check_atom_to_turtle_deps)
+ @set +e; result=0; \
+ $(RECHO) "Testing Atom to Turtle"; \
+ printf 'IF(RAPTOR_PARSER_RSS)\n\n' >>CMakeTests.txt; \
+ for test in $(TEST_IN_ATOMS); do \
+ parser=rss-tag-soup; \
+ name=`basename $$test .atom` ; \
+ turtle="$$name.ttl"; \
+ expected="$$name-result.ttl"; \
+ opts="-f writeBaseURI=0"; \
+ baseuri="http://www.example.org/blog/"; \
+ if test $$name = test04; then \
+ baseuri="http://www.example.org/blog/"; \
+ fi; \
+ opts="-q -i $$parser -o turtle $$opts -O $$baseuri"; \
+ $(RECHO) $(RECHO_N) "Checking $$test $(RECHO_C)"; \
+ $(RAPPER) $$opts file:$(srcdir)/$$test > $$turtle 2> errors-catt.log; \
+ status=$$?; \
+ if test $$status != 0; then \
+ $(RECHO) "FAILED with code $$status"; \
+ $(RECHO) "$(RAPPER) $$opts file:$(srcdir)/$$test"; \
+ cat errors-catt.log ; \
+ result=1 ; \
+ elif cmp $(srcdir)/$$expected $$turtle >/dev/null 2>&1; then \
+ $(RECHO) "ok"; \
+ else \
+ $(RECHO) "FAILED"; \
+ $(RECHO) "$(RAPPER) $$opts file:$(srcdir)/$$test"; \
+ diff -u $(srcdir)/$$expected $$turtle; result=1; \
+ fi; \
+ rm -f errors-catt.log ; \
+ printf '\tRAPPER_TEST(%s\n\t\t"%s"\n\t\t%s\n\t\t%s\n\t)\n\n' \
+ feeds.$$test \
+ "\$${RAPPER} $$opts file:\$${CMAKE_CURRENT_SOURCE_DIR}/$$test" \
+ $$turtle \
+ "\$${CMAKE_CURRENT_SOURCE_DIR}/$$expected" >>CMakeTests.txt; \
+ done; \
+ printf 'ENDIF(RAPTOR_PARSER_RSS)\n\n' >>CMakeTests.txt; \
+ set -e; exit $$result
+
+# Parser from Turtle and Serialize to Atom
+check-serialize-atom: check-atom-to-turtle
+ @set +e; result=0; \
+ $(RECHO) "Testing Turtle to Atom XML"; \
+ printf 'IF(RAPTOR_SERIALIZER_ATOM)\n\n' >>CMakeTests.txt; \
+ for test in $(OUT_RDF_TTLS); do \
+ name=`basename $$test .ttl` ; \
+ atom="$$name.atom"; \
+ expected="$$name-result.atom"; \
+ opts="-f writeBaseURI=0 -f rssTriples=atom-triples"; \
+ if test $$name = test01; then \
+ baseuri="http://example.org/whatsnew"; \
+ opts="$$opts -f atomEntryUri=http://example.org/2006/03/28/blog-item"; \
+ elif test $$name = test02; then \
+ baseuri="http://example.org/news/"; \
+ elif test $$name = test03; then \
+ baseuri="http://example.org"; \
+ fi; \
+ opts="-q -i turtle -o atom $$opts -I $$baseuri -O $$baseuri"; \
+ $(RECHO) $(RECHO_N) "Checking $$test $(RECHO_C)"; \
+ $(RAPPER) $$opts file:$$test > $$atom 2> errors-csa.log; \
+ status=$$?; \
+ if test $$status != 0; then \
+ $(RECHO) "FAILED with code $$status"; \
+ $(RECHO) "$(RAPPER) $$opts file:$$test"; \
+ cat errors-csa.log ; \
+ result=1 ; \
+ elif cmp $(srcdir)/$$expected $$atom >/dev/null 2>&1; then \
+ $(RECHO) "ok"; \
+ else \
+ $(RECHO) "FAILED"; \
+ $(RECHO) "$(RAPPER) $$opts file:$(srcdir)/$$test"; \
+ diff -u $(srcdir)/$$expected $$atom; result=1; \
+ fi; \
+ rm -f errors-csa.log ; \
+ printf '\tRAPPER_TEST(%s\n\t\t"%s"\n\t\t%s\n\t\t%s\n\t)\n\n' \
+ feeds.$$test \
+ "\$${RAPPER} $$opts file:$$test" \
+ $$atom \
+ "\$${CMAKE_CURRENT_SOURCE_DIR}/$$expected" >>CMakeTests.txt; \
+ done; \
+ printf 'ENDIF(RAPTOR_SERIALIZER_ATOM)\n\n' >>CMakeTests.txt; \
+ set -e; exit $$result
+
+@MAINTAINER_MODE_TRUE@.rnc.rng:
+@MAINTAINER_MODE_TRUE@ $(TRANG) $< $@
+
+@MAINTAINER_MODE_TRUE@check-validate-atom: $(srcdir)/atom.rng check-serialize-atom $(TEST_IN_ATOMS)
+@MAINTAINER_MODE_TRUE@ @set +e; result=0; \
+@MAINTAINER_MODE_TRUE@ if test "X$(JING)" = X; then \
+@MAINTAINER_MODE_TRUE@ $(RECHO) "WARNING: Skipping feed validation RelaxNG tests - jing is missing"; \
+@MAINTAINER_MODE_TRUE@ else \
+@MAINTAINER_MODE_TRUE@ $(RECHO) "Validating Atom XML with RelaxNG"; \
+@MAINTAINER_MODE_TRUE@ for atom in $(OUT_ATOMS) $(TEST_IN_ATOMS); do \
+@MAINTAINER_MODE_TRUE@ test -f $$atom || atom=$(srcdir)/$$atom; \
+@MAINTAINER_MODE_TRUE@ $(RECHO) $(RECHO_N) "Validating $$atom $(RECHO_C)"; \
+@MAINTAINER_MODE_TRUE@ $(JING) $(srcdir)/atom.rng $$atom > errors-cva.log 2>&1; \
+@MAINTAINER_MODE_TRUE@ status=$$?; \
+@MAINTAINER_MODE_TRUE@ if test $$status != 0; then \
+@MAINTAINER_MODE_TRUE@ $(RECHO) "FAILED with code $$status"; result=1; \
+@MAINTAINER_MODE_TRUE@ $(RECHO) $(JING) $(srcdir)/atom.rng $$atom; \
+@MAINTAINER_MODE_TRUE@ sed -e "s,^.*$$atom,$$atom," errors-cva.log ; \
+@MAINTAINER_MODE_TRUE@ result=1 ; \
+@MAINTAINER_MODE_TRUE@ else \
+@MAINTAINER_MODE_TRUE@ $(RECHO) "ok"; \
+@MAINTAINER_MODE_TRUE@ fi; \
+@MAINTAINER_MODE_TRUE@ rm -f errors-cva.log; \
+@MAINTAINER_MODE_TRUE@ printf '\tADD_TEST(%s %s)\n' \
+@MAINTAINER_MODE_TRUE@ feeds.jing-$$atom \
+@MAINTAINER_MODE_TRUE@ "\$${JING} \$${CMAKE_CURRENT_SOURCE_DIR}/atom.rng $$atom" >>CMakeTests.txt; \
+@MAINTAINER_MODE_TRUE@ done; \
+@MAINTAINER_MODE_TRUE@ fi; \
+@MAINTAINER_MODE_TRUE@ set -e; exit $$result
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/tests/feeds/atom.rnc b/tests/feeds/atom.rnc
new file mode 100644
index 0000000..c657b24
--- /dev/null
+++ b/tests/feeds/atom.rnc
@@ -0,0 +1,334 @@
+# -*- rnc -*-
+# RELAX NG Compact Syntax Grammar for the
+# Atom Format Specification Version 11
+
+namespace atom = "http://www.w3.org/2005/Atom"
+namespace xhtml = "http://www.w3.org/1999/xhtml"
+namespace s = "http://www.ascc.net/xml/schematron"
+namespace local = ""
+
+start = atomFeed | atomEntry
+
+# Common attributes
+
+atomCommonAttributes =
+ attribute xml:base { atomUri }?,
+ attribute xml:lang { atomLanguageTag }?,
+ undefinedAttribute*
+
+# Text Constructs
+atomPlainTextConstruct =
+ atomCommonAttributes,
+ attribute type { "text" | "html" }?,
+ text
+
+atomXHTMLTextConstruct =
+ atomCommonAttributes,
+ attribute type { "xhtml" },
+ xhtmlDiv
+
+atomTextConstruct = atomPlainTextConstruct | atomXHTMLTextConstruct
+
+# Person Construct
+
+atomPersonConstruct =
+ atomCommonAttributes,
+ (element atom:name { text }
+ & element atom:uri { atomUri }?
+ & element atom:email { atomEmailAddress }?
+ & extensionElement*)
+
+# Date Construct
+
+atomDateConstruct =
+ atomCommonAttributes,
+ xsd:dateTime
+
+# atom:feed
+
+atomFeed =
+ [
+ s:rule [
+ context = "atom:feed"
+ s:assert [
+ test = "atom:author or not(atom:entry[not(atom:author)])"
+ "An atom:feed must have an atom:author unless all "
+ ~ "of its atom:entry children have an atom:author."
+ ]
+ ]
+ ]
+ element atom:feed {
+ atomCommonAttributes,
+ (atomAuthor*
+ & atomCategory*
+ & atomContributor*
+ & atomGenerator?
+ & atomIcon?
+ & atomId
+ & atomLink*
+ & atomLogo?
+ & atomRights?
+ & atomSubtitle?
+ & atomTitle
+ & atomUpdated
+ & extensionElement*),
+ atomEntry*
+ }
+
+# atom:entry
+
+atomEntry =
+ [
+ s:rule [
+ context = "atom:entry"
+ s:assert [
+ test = "atom:link[@rel='alternate'] "
+ ~ "or atom:link[not(@rel)] "
+ ~ "or atom:content"
+ "An atom:entry must have at least one atom:link element "
+ ~ "with a rel attribute of 'alternate' "
+ ~ "or an atom:content."
+ ]
+ ]
+ s:rule [
+ context = "atom:entry"
+ s:assert [
+ test = "atom:author or "
+ ~ "../atom:author or atom:source/atom:author"
+ "An atom:entry must have an atom:author "
+ ~ "if its feed does not."
+ ]
+ ]
+ ]
+ element atom:entry {
+ atomCommonAttributes,
+ (atomAuthor*
+ & atomCategory*
+ & atomContent?
+ & atomContributor*
+ & atomId
+ & atomLink*
+ & atomPublished?
+ & atomRights?
+ & atomSource?
+ & atomSummary?
+ & atomTitle
+ & atomUpdated
+ & extensionElement*)
+ }
+
+# atom:content
+
+atomInlineTextContent =
+ element atom:content {
+ atomCommonAttributes,
+ attribute type { "text" | "html" }?,
+ (text)*
+ }
+
+atomInlineXHTMLContent =
+ element atom:content {
+ atomCommonAttributes,
+ attribute type { "xhtml" },
+ xhtmlDiv
+ }
+
+atomInlineOtherContent =
+ element atom:content {
+ atomCommonAttributes,
+ attribute type { atomMediaType }?,
+ (text|anyElement)*
+ }
+
+atomOutOfLineContent =
+ element atom:content {
+ atomCommonAttributes,
+ attribute type { atomMediaType }?,
+ attribute src { atomUri },
+ empty
+ }
+
+atomContent = atomInlineTextContent
+ | atomInlineXHTMLContent
+ | atomInlineOtherContent
+ | atomOutOfLineContent
+
+# atom:author
+
+atomAuthor = element atom:author { atomPersonConstruct }
+
+# atom:category
+
+atomCategory =
+ element atom:category {
+ atomCommonAttributes,
+ attribute term { text },
+ attribute scheme { atomUri }?,
+ attribute label { text }?,
+ undefinedContent
+ }
+
+# atom:contributor
+
+atomContributor = element atom:contributor { atomPersonConstruct }
+
+# atom:generator
+
+atomGenerator = element atom:generator {
+ atomCommonAttributes,
+ attribute uri { atomUri }?,
+ attribute version { text }?,
+ text
+}
+
+# atom:icon
+
+atomIcon = element atom:icon {
+ atomCommonAttributes,
+ (atomUri)
+}
+
+# atom:id
+
+atomId = element atom:id {
+ atomCommonAttributes,
+ (atomUri)
+}
+
+# atom:logo
+
+atomLogo = element atom:logo {
+ atomCommonAttributes,
+ (atomUri)
+}
+
+# atom:link
+
+atomLink =
+ element atom:link {
+ atomCommonAttributes,
+ attribute href { atomUri },
+ attribute rel { atomNCName | atomUri }?,
+ attribute type { atomMediaType }?,
+ attribute hreflang { atomLanguageTag }?,
+ attribute title { text }?,
+ attribute length { text }?,
+ undefinedContent
+ }
+
+# atom:published
+
+atomPublished = element atom:published { atomDateConstruct }
+
+# atom:rights
+
+atomRights = element atom:rights { atomTextConstruct }
+
+# atom:source
+
+atomSource =
+ element atom:source {
+ atomCommonAttributes,
+ (atomAuthor*
+ & atomCategory*
+ & atomContributor*
+ & atomGenerator?
+ & atomIcon?
+ & atomId?
+ & atomLink*
+ & atomLogo?
+ & atomRights?
+ & atomSubtitle?
+ & atomTitle?
+ & atomUpdated?
+ & extensionElement*)
+ }
+
+# atom:subtitle
+
+atomSubtitle = element atom:subtitle { atomTextConstruct }
+
+# atom:summary
+
+atomSummary = element atom:summary { atomTextConstruct }
+
+# atom:title
+
+atomTitle = element atom:title { atomTextConstruct }
+
+# atom:updated
+atomUpdated = element atom:updated { atomDateConstruct }
+
+# Low-level simple types
+
+atomNCName = xsd:string { minLength = "1" pattern = "[^:]*" }
+
+# Whatever a media type is, it contains at least one slash
+atomMediaType = xsd:string { pattern = ".+/.+" }
+
+# As defined in RFC 3066
+atomLanguageTag = xsd:string {
+ pattern = "[A-Za-z]{1,8}(-[A-Za-z0-9]{1,8})*"
+}
+
+# Unconstrained; it's not entirely clear how IRI fit into
+# xsd:anyURI so let's not try to constrain it here
+atomUri = text
+
+# Whatever an email address is, it contains at least one @
+atomEmailAddress = xsd:string { pattern = ".+@.+" }
+
+# Simple Extension
+
+simpleExtensionElement =
+ element * - atom:* {
+ text
+ }
+
+# Structured Extension
+
+structuredExtensionElement =
+ element * - atom:* {
+ (attribute * { text }+,
+ (text|anyElement)*)
+ | (attribute * { text }*,
+ (text?, anyElement+, (text|anyElement)*))
+ }
+
+# Other Extensibility
+
+extensionElement =
+ simpleExtensionElement | structuredExtensionElement
+
+undefinedAttribute =
+ attribute * - (xml:base | xml:lang | local:*) { text }
+
+undefinedContent = (text|anyForeignElement)*
+
+anyElement =
+ element * {
+ (attribute * { text }
+ | text
+ | anyElement)*
+ }
+
+anyForeignElement =
+ element * - atom:* {
+ (attribute * { text }
+ | text
+ | anyElement)*
+ }
+
+# XHTML
+
+anyXHTML = element xhtml:* {
+ (attribute * { text }
+ | text
+ | anyXHTML)*
+}
+
+xhtmlDiv = element xhtml:div {
+ (attribute * { text }
+ | text
+ | anyXHTML)*
+}
diff --git a/tests/feeds/atom.rng b/tests/feeds/atom.rng
new file mode 100644
index 0000000..c2df4e4
--- /dev/null
+++ b/tests/feeds/atom.rng
@@ -0,0 +1,597 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ -*- rnc -*-
+ RELAX NG Compact Syntax Grammar for the
+ Atom Format Specification Version 11
+-->
+<grammar xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:s="http://www.ascc.net/xml/schematron" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <start>
+ <choice>
+ <ref name="atomFeed"/>
+ <ref name="atomEntry"/>
+ </choice>
+ </start>
+ <!-- Common attributes -->
+ <define name="atomCommonAttributes">
+ <optional>
+ <attribute name="xml:base">
+ <ref name="atomUri"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="xml:lang">
+ <ref name="atomLanguageTag"/>
+ </attribute>
+ </optional>
+ <zeroOrMore>
+ <ref name="undefinedAttribute"/>
+ </zeroOrMore>
+ </define>
+ <!-- Text Constructs -->
+ <define name="atomPlainTextConstruct">
+ <ref name="atomCommonAttributes"/>
+ <optional>
+ <attribute name="type">
+ <choice>
+ <value>text</value>
+ <value>html</value>
+ </choice>
+ </attribute>
+ </optional>
+ <text/>
+ </define>
+ <define name="atomXHTMLTextConstruct">
+ <ref name="atomCommonAttributes"/>
+ <attribute name="type">
+ <value>xhtml</value>
+ </attribute>
+ <ref name="xhtmlDiv"/>
+ </define>
+ <define name="atomTextConstruct">
+ <choice>
+ <ref name="atomPlainTextConstruct"/>
+ <ref name="atomXHTMLTextConstruct"/>
+ </choice>
+ </define>
+ <!-- Person Construct -->
+ <define name="atomPersonConstruct">
+ <ref name="atomCommonAttributes"/>
+ <interleave>
+ <element name="atom:name">
+ <text/>
+ </element>
+ <optional>
+ <element name="atom:uri">
+ <ref name="atomUri"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="atom:email">
+ <ref name="atomEmailAddress"/>
+ </element>
+ </optional>
+ <zeroOrMore>
+ <ref name="extensionElement"/>
+ </zeroOrMore>
+ </interleave>
+ </define>
+ <!-- Date Construct -->
+ <define name="atomDateConstruct">
+ <ref name="atomCommonAttributes"/>
+ <data type="dateTime"/>
+ </define>
+ <!-- atom:feed -->
+ <define name="atomFeed">
+ <element name="atom:feed">
+ <s:rule context="atom:feed">
+ <s:assert test="atom:author or not(atom:entry[not(atom:author)])">An atom:feed must have an atom:author unless all of its atom:entry children have an atom:author.</s:assert>
+ </s:rule>
+ <ref name="atomCommonAttributes"/>
+ <interleave>
+ <zeroOrMore>
+ <ref name="atomAuthor"/>
+ </zeroOrMore>
+ <zeroOrMore>
+ <ref name="atomCategory"/>
+ </zeroOrMore>
+ <zeroOrMore>
+ <ref name="atomContributor"/>
+ </zeroOrMore>
+ <optional>
+ <ref name="atomGenerator"/>
+ </optional>
+ <optional>
+ <ref name="atomIcon"/>
+ </optional>
+ <ref name="atomId"/>
+ <zeroOrMore>
+ <ref name="atomLink"/>
+ </zeroOrMore>
+ <optional>
+ <ref name="atomLogo"/>
+ </optional>
+ <optional>
+ <ref name="atomRights"/>
+ </optional>
+ <optional>
+ <ref name="atomSubtitle"/>
+ </optional>
+ <ref name="atomTitle"/>
+ <ref name="atomUpdated"/>
+ <zeroOrMore>
+ <ref name="extensionElement"/>
+ </zeroOrMore>
+ </interleave>
+ <zeroOrMore>
+ <ref name="atomEntry"/>
+ </zeroOrMore>
+ </element>
+ </define>
+ <!-- atom:entry -->
+ <define name="atomEntry">
+ <element name="atom:entry">
+ <s:rule context="atom:entry">
+ <s:assert test="atom:link[@rel='alternate'] or atom:link[not(@rel)] or atom:content">An atom:entry must have at least one atom:link element with a rel attribute of 'alternate' or an atom:content.</s:assert>
+ </s:rule>
+ <s:rule context="atom:entry">
+ <s:assert test="atom:author or ../atom:author or atom:source/atom:author">An atom:entry must have an atom:author if its feed does not.</s:assert>
+ </s:rule>
+ <ref name="atomCommonAttributes"/>
+ <interleave>
+ <zeroOrMore>
+ <ref name="atomAuthor"/>
+ </zeroOrMore>
+ <zeroOrMore>
+ <ref name="atomCategory"/>
+ </zeroOrMore>
+ <optional>
+ <ref name="atomContent"/>
+ </optional>
+ <zeroOrMore>
+ <ref name="atomContributor"/>
+ </zeroOrMore>
+ <ref name="atomId"/>
+ <zeroOrMore>
+ <ref name="atomLink"/>
+ </zeroOrMore>
+ <optional>
+ <ref name="atomPublished"/>
+ </optional>
+ <optional>
+ <ref name="atomRights"/>
+ </optional>
+ <optional>
+ <ref name="atomSource"/>
+ </optional>
+ <optional>
+ <ref name="atomSummary"/>
+ </optional>
+ <ref name="atomTitle"/>
+ <ref name="atomUpdated"/>
+ <zeroOrMore>
+ <ref name="extensionElement"/>
+ </zeroOrMore>
+ </interleave>
+ </element>
+ </define>
+ <!-- atom:content -->
+ <define name="atomInlineTextContent">
+ <element name="atom:content">
+ <ref name="atomCommonAttributes"/>
+ <optional>
+ <attribute name="type">
+ <choice>
+ <value>text</value>
+ <value>html</value>
+ </choice>
+ </attribute>
+ </optional>
+ <zeroOrMore>
+ <text/>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="atomInlineXHTMLContent">
+ <element name="atom:content">
+ <ref name="atomCommonAttributes"/>
+ <attribute name="type">
+ <value>xhtml</value>
+ </attribute>
+ <ref name="xhtmlDiv"/>
+ </element>
+ </define>
+ <define name="atomInlineOtherContent">
+ <element name="atom:content">
+ <ref name="atomCommonAttributes"/>
+ <optional>
+ <attribute name="type">
+ <ref name="atomMediaType"/>
+ </attribute>
+ </optional>
+ <zeroOrMore>
+ <choice>
+ <text/>
+ <ref name="anyElement"/>
+ </choice>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="atomOutOfLineContent">
+ <element name="atom:content">
+ <ref name="atomCommonAttributes"/>
+ <optional>
+ <attribute name="type">
+ <ref name="atomMediaType"/>
+ </attribute>
+ </optional>
+ <attribute name="src">
+ <ref name="atomUri"/>
+ </attribute>
+ <empty/>
+ </element>
+ </define>
+ <define name="atomContent">
+ <choice>
+ <ref name="atomInlineTextContent"/>
+ <ref name="atomInlineXHTMLContent"/>
+ <ref name="atomInlineOtherContent"/>
+ <ref name="atomOutOfLineContent"/>
+ </choice>
+ </define>
+ <!-- atom:author -->
+ <define name="atomAuthor">
+ <element name="atom:author">
+ <ref name="atomPersonConstruct"/>
+ </element>
+ </define>
+ <!-- atom:category -->
+ <define name="atomCategory">
+ <element name="atom:category">
+ <ref name="atomCommonAttributes"/>
+ <attribute name="term"/>
+ <optional>
+ <attribute name="scheme">
+ <ref name="atomUri"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="label"/>
+ </optional>
+ <ref name="undefinedContent"/>
+ </element>
+ </define>
+ <!-- atom:contributor -->
+ <define name="atomContributor">
+ <element name="atom:contributor">
+ <ref name="atomPersonConstruct"/>
+ </element>
+ </define>
+ <!-- atom:generator -->
+ <define name="atomGenerator">
+ <element name="atom:generator">
+ <ref name="atomCommonAttributes"/>
+ <optional>
+ <attribute name="uri">
+ <ref name="atomUri"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="version"/>
+ </optional>
+ <text/>
+ </element>
+ </define>
+ <!-- atom:icon -->
+ <define name="atomIcon">
+ <element name="atom:icon">
+ <ref name="atomCommonAttributes"/>
+ <ref name="atomUri"/>
+ </element>
+ </define>
+ <!-- atom:id -->
+ <define name="atomId">
+ <element name="atom:id">
+ <ref name="atomCommonAttributes"/>
+ <ref name="atomUri"/>
+ </element>
+ </define>
+ <!-- atom:logo -->
+ <define name="atomLogo">
+ <element name="atom:logo">
+ <ref name="atomCommonAttributes"/>
+ <ref name="atomUri"/>
+ </element>
+ </define>
+ <!-- atom:link -->
+ <define name="atomLink">
+ <element name="atom:link">
+ <ref name="atomCommonAttributes"/>
+ <attribute name="href">
+ <ref name="atomUri"/>
+ </attribute>
+ <optional>
+ <attribute name="rel">
+ <choice>
+ <ref name="atomNCName"/>
+ <ref name="atomUri"/>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="type">
+ <ref name="atomMediaType"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="hreflang">
+ <ref name="atomLanguageTag"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="title"/>
+ </optional>
+ <optional>
+ <attribute name="length"/>
+ </optional>
+ <ref name="undefinedContent"/>
+ </element>
+ </define>
+ <!-- atom:published -->
+ <define name="atomPublished">
+ <element name="atom:published">
+ <ref name="atomDateConstruct"/>
+ </element>
+ </define>
+ <!-- atom:rights -->
+ <define name="atomRights">
+ <element name="atom:rights">
+ <ref name="atomTextConstruct"/>
+ </element>
+ </define>
+ <!-- atom:source -->
+ <define name="atomSource">
+ <element name="atom:source">
+ <ref name="atomCommonAttributes"/>
+ <interleave>
+ <zeroOrMore>
+ <ref name="atomAuthor"/>
+ </zeroOrMore>
+ <zeroOrMore>
+ <ref name="atomCategory"/>
+ </zeroOrMore>
+ <zeroOrMore>
+ <ref name="atomContributor"/>
+ </zeroOrMore>
+ <optional>
+ <ref name="atomGenerator"/>
+ </optional>
+ <optional>
+ <ref name="atomIcon"/>
+ </optional>
+ <optional>
+ <ref name="atomId"/>
+ </optional>
+ <zeroOrMore>
+ <ref name="atomLink"/>
+ </zeroOrMore>
+ <optional>
+ <ref name="atomLogo"/>
+ </optional>
+ <optional>
+ <ref name="atomRights"/>
+ </optional>
+ <optional>
+ <ref name="atomSubtitle"/>
+ </optional>
+ <optional>
+ <ref name="atomTitle"/>
+ </optional>
+ <optional>
+ <ref name="atomUpdated"/>
+ </optional>
+ <zeroOrMore>
+ <ref name="extensionElement"/>
+ </zeroOrMore>
+ </interleave>
+ </element>
+ </define>
+ <!-- atom:subtitle -->
+ <define name="atomSubtitle">
+ <element name="atom:subtitle">
+ <ref name="atomTextConstruct"/>
+ </element>
+ </define>
+ <!-- atom:summary -->
+ <define name="atomSummary">
+ <element name="atom:summary">
+ <ref name="atomTextConstruct"/>
+ </element>
+ </define>
+ <!-- atom:title -->
+ <define name="atomTitle">
+ <element name="atom:title">
+ <ref name="atomTextConstruct"/>
+ </element>
+ </define>
+ <!-- atom:updated -->
+ <define name="atomUpdated">
+ <element name="atom:updated">
+ <ref name="atomDateConstruct"/>
+ </element>
+ </define>
+ <!-- Low-level simple types -->
+ <define name="atomNCName">
+ <data type="string">
+ <param name="minLength">1</param>
+ <param name="pattern">[^:]*</param>
+ </data>
+ </define>
+ <!-- Whatever a media type is, it contains at least one slash -->
+ <define name="atomMediaType">
+ <data type="string">
+ <param name="pattern">.+/.+</param>
+ </data>
+ </define>
+ <!-- As defined in RFC 3066 -->
+ <define name="atomLanguageTag">
+ <data type="string">
+ <param name="pattern">[A-Za-z]{1,8}(-[A-Za-z0-9]{1,8})*</param>
+ </data>
+ </define>
+ <!--
+ Unconstrained; it's not entirely clear how IRI fit into
+ xsd:anyURI so let's not try to constrain it here
+ -->
+ <define name="atomUri">
+ <text/>
+ </define>
+ <!-- Whatever an email address is, it contains at least one @ -->
+ <define name="atomEmailAddress">
+ <data type="string">
+ <param name="pattern">.+@.+</param>
+ </data>
+ </define>
+ <!-- Simple Extension -->
+ <define name="simpleExtensionElement">
+ <element>
+ <anyName>
+ <except>
+ <nsName ns="http://www.w3.org/2005/Atom"/>
+ </except>
+ </anyName>
+ <text/>
+ </element>
+ </define>
+ <!-- Structured Extension -->
+ <define name="structuredExtensionElement">
+ <element>
+ <anyName>
+ <except>
+ <nsName ns="http://www.w3.org/2005/Atom"/>
+ </except>
+ </anyName>
+ <choice>
+ <group>
+ <oneOrMore>
+ <attribute>
+ <anyName/>
+ </attribute>
+ </oneOrMore>
+ <zeroOrMore>
+ <choice>
+ <text/>
+ <ref name="anyElement"/>
+ </choice>
+ </zeroOrMore>
+ </group>
+ <group>
+ <zeroOrMore>
+ <attribute>
+ <anyName/>
+ </attribute>
+ </zeroOrMore>
+ <group>
+ <optional>
+ <text/>
+ </optional>
+ <oneOrMore>
+ <ref name="anyElement"/>
+ </oneOrMore>
+ <zeroOrMore>
+ <choice>
+ <text/>
+ <ref name="anyElement"/>
+ </choice>
+ </zeroOrMore>
+ </group>
+ </group>
+ </choice>
+ </element>
+ </define>
+ <!-- Other Extensibility -->
+ <define name="extensionElement">
+ <choice>
+ <ref name="simpleExtensionElement"/>
+ <ref name="structuredExtensionElement"/>
+ </choice>
+ </define>
+ <define name="undefinedAttribute">
+ <attribute>
+ <anyName>
+ <except>
+ <name>xml:base</name>
+ <name>xml:lang</name>
+ <nsName ns=""/>
+ </except>
+ </anyName>
+ </attribute>
+ </define>
+ <define name="undefinedContent">
+ <zeroOrMore>
+ <choice>
+ <text/>
+ <ref name="anyForeignElement"/>
+ </choice>
+ </zeroOrMore>
+ </define>
+ <define name="anyElement">
+ <element>
+ <anyName/>
+ <zeroOrMore>
+ <choice>
+ <attribute>
+ <anyName/>
+ </attribute>
+ <text/>
+ <ref name="anyElement"/>
+ </choice>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="anyForeignElement">
+ <element>
+ <anyName>
+ <except>
+ <nsName ns="http://www.w3.org/2005/Atom"/>
+ </except>
+ </anyName>
+ <zeroOrMore>
+ <choice>
+ <attribute>
+ <anyName/>
+ </attribute>
+ <text/>
+ <ref name="anyElement"/>
+ </choice>
+ </zeroOrMore>
+ </element>
+ </define>
+ <!-- XHTML -->
+ <define name="anyXHTML">
+ <element>
+ <nsName ns="http://www.w3.org/1999/xhtml"/>
+ <zeroOrMore>
+ <choice>
+ <attribute>
+ <anyName/>
+ </attribute>
+ <text/>
+ <ref name="anyXHTML"/>
+ </choice>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="xhtmlDiv">
+ <element name="xhtml:div">
+ <zeroOrMore>
+ <choice>
+ <attribute>
+ <anyName/>
+ </attribute>
+ <text/>
+ <ref name="anyXHTML"/>
+ </choice>
+ </zeroOrMore>
+ </element>
+ </define>
+</grammar>
diff --git a/tests/feeds/test01-result.atom b/tests/feeds/test01-result.atom
new file mode 100644
index 0000000..644f4a1
--- /dev/null
+++ b/tests/feeds/test01-result.atom
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<entry xmlns:at="http://purl.org/syndication/atomtriples/1"
+ xmlns:atom="http://www.w3.org/2005/Atom"
+ xmlns:content="http://purl.org/rss/1.0/modules/content/"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:enc="http://purl.oclc.org/net/rss_2.0/enc#"
+ xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rss091="http://purl.org/rss/1.0/modules/rss091#"
+ xmlns:rss="http://purl.org/rss/1.0/"
+ xmlns="http://www.w3.org/2005/Atom">
+ <id>http://example.org/2006/03/28/blog-item</id>
+ <title>atomic blog item title</title>
+ <updated>2006-03-28T20:57:15Z</updated>
+ <link href="2006/03/28/blog-item"
+ rel="alternate"/>
+ <summary>rss:description here</summary>
+ <at:md>
+ <dc:creator>
+ <dc:Person>
+ <dc:title>Example</dc:title>
+ </dc:Person>
+ </dc:creator>
+ </at:md>
+
+</entry>
diff --git a/tests/feeds/test01-result.ttl b/tests/feeds/test01-result.ttl
new file mode 100644
index 0000000..ed1399e
--- /dev/null
+++ b/tests/feeds/test01-result.ttl
@@ -0,0 +1,40 @@
+@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+@prefix atom: <http://www.w3.org/2005/Atom> .
+@prefix content: <http://purl.org/rss/1.0/modules/content/> .
+@prefix dc: <http://purl.org/dc/elements/1.1/> .
+@prefix enc: <http://purl.oclc.org/net/rss_2.0/enc#> .
+@prefix rss091: <http://purl.org/rss/1.0/modules/rss091#> .
+@prefix : <http://purl.org/rss/1.0/> .
+
+<2006/03/28/blog-item>
+ dc:creator [
+ dc:title "Example" ;
+ a dc:Person
+ ] ;
+ dc:date "2006-03-28T20:57:15Z" ;
+ :description "rss:description here" ;
+ :link "http://example.org/2006/03/28/blog-item" ;
+ :title "Original blog item title 2006-03" ;
+ a :item ;
+ atom:summary """<div xmlns=\"http://www.w3.org/1999/xhtml\">The atom:summary description including
+<b>tags</b>
+over several lines.
+</div>"""^^rdf:XMLLiteral ;
+ atom:title "atomic blog item title" ;
+ atom:updated "2006-03-28T20:57:15Z" .
+
+<>
+ dc:date "2006-03-28T17:05:01-05:00" ;
+ :items [
+ rdf:_1 <2006/03/28/blog-item> ;
+ a rdf:Seq
+ ] ;
+ :link "http://example.org/whatsnew" ;
+ :title "example feed with 1 item" ;
+ a :channel ;
+ atom:author "example" ;
+ atom:email "example@example.com" ;
+ atom:title "atomic title" ;
+ atom:updated "2006-03-28T20:57:15Z" ;
+ atom:uri "http://example.com/" .
+
diff --git a/tests/feeds/test01.rdf b/tests/feeds/test01.rdf
new file mode 100644
index 0000000..bb26a6e
--- /dev/null
+++ b/tests/feeds/test01.rdf
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<rdf:RDF
+ xmlns:atom="http://www.w3.org/2005/Atom"
+ xmlns:content="http://purl.org/rss/1.0/modules/content/"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:enc="http://purl.oclc.org/net/rss_2.0/enc#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rss091="http://purl.org/rss/1.0/modules/rss091#"
+ xmlns="http://purl.org/rss/1.0/">
+ <channel rdf:about="http://example.org/whatsnew">
+ <title>example feed with 1 item</title>
+ <atom:title>atomic title</atom:title>
+ <atom:updated>2006-03-28T20:57:15Z</atom:updated>
+ <atom:author>example</atom:author>
+ <atom:email>example@example.com</atom:email>
+ <atom:uri>http://example.com/</atom:uri>
+ <link>http://example.org/whatsnew</link>
+ <dc:date>2006-03-28T17:05:01-05:00</dc:date>
+ <items>
+ <rdf:Seq>
+ <rdf:li rdf:resource="http://example.org/2006/03/28/blog-item"/>
+ </rdf:Seq>
+ </items>
+ </channel>
+
+ <item rdf:about="http://example.org/2006/03/28/blog-item">
+ <title>Original blog item title 2006-03</title>
+ <description>rss:description here</description>
+ <atom:summary rdf:parseType="Literal"><div xmlns="http://www.w3.org/1999/xhtml">The atom:summary description including
+<b>tags</b>
+over several lines.
+</div></atom:summary>
+ <atom:title>atomic blog item title</atom:title>
+ <link>http://example.org/2006/03/28/blog-item</link>
+ <atom:updated>2006-03-28T20:57:15Z</atom:updated>
+ <dc:date>2006-03-28T20:57:15Z</dc:date>
+ <dc:creator>
+ <dc:Person>
+ <dc:title>Example</dc:title>
+ </dc:Person>
+ </dc:creator>
+ </item>
+
+</rdf:RDF>
diff --git a/tests/feeds/test02-result.atom b/tests/feeds/test02-result.atom
new file mode 100644
index 0000000..35c58ee
--- /dev/null
+++ b/tests/feeds/test02-result.atom
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8"?>
+<feed xmlns:at="http://purl.org/syndication/atomtriples/1"
+ xmlns:content="http://purl.org/rss/1.0/modules/content/"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:enc="http://purl.oclc.org/net/rss_2.0/enc#"
+ xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rss091="http://purl.org/rss/1.0/modules/rss091#"
+ xmlns:rss="http://purl.org/rss/1.0/"
+ xmlns="http://www.w3.org/2005/Atom">
+ <id>http://example.org/news/</id>
+ <title>Example News</title>
+ <updated>2008-03-30T05:52:06Z</updated>
+ <author>
+ <name>unknown</name>
+ </author>
+ <link href=""
+ rel="self"/>
+ <at:feedmap>
+ <at:feedmap property="http://purl.org/rss/1.0/link">atom:id</at:feedmap>
+ <at:feedmap property="http://purl.org/dc/elements/1.1/date">atom:updated</at:feedmap>
+ <at:feedmap property="http://purl.org/dc/elements/1.1/rights">atom:rights</at:feedmap>
+ <at:feedmap property="http://purl.org/rss/1.0/title">atom:title</at:feedmap>
+ </at:feedmap>
+ <at:entrymap>
+ <at:entrymap property="http://purl.org/rss/1.0/description">atom:summary</at:entrymap>
+ <at:entrymap property="http://purl.org/rss/1.0/link">atom:id</at:entrymap>
+ <at:entrymap property="http://purl.org/dc/elements/1.1/date">atom:updated</at:entrymap>
+ <at:entrymap property="http://purl.org/dc/elements/1.1/rights">atom:rights</at:entrymap>
+ <at:entrymap property="http://purl.org/rss/1.0/title">atom:title</at:entrymap>
+ <at:entrymap property="http://purl.org/rss/1.0/modules/content/encoded">atom:summary</at:entrymap>
+ <at:entrymap property="http://purl.org/dc/elements/1.1/date">rss091:pubDate</at:entrymap>
+ <at:entrymap property="http://purl.org/rss/1.0/modules/content/encoded">rss:description</at:entrymap>
+ </at:entrymap>
+
+ <entry>
+ <id>http://example.org/news/2008-03-30</id>
+ <title>News for 2008-03-30</title>
+ <updated>2008-03-30T06:07:28Z</updated>
+ <link href="2008-03-30"
+ rel="alternate"/>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
+html description 2
+</div></summary>
+ <at:md/>
+ </entry>
+
+ <entry>
+ <id>http://example.org/news/2007-10-01</id>
+ <title>News for 2007-10-01</title>
+ <updated>2007-10-01T06:56:58Z</updated>
+ <link href="2007-10-01"
+ rel="alternate"/>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
+html description 4
+</div></summary>
+ <at:md/>
+ </entry>
+
+</feed>
diff --git a/tests/feeds/test02-result.ttl b/tests/feeds/test02-result.ttl
new file mode 100644
index 0000000..ea74c59
--- /dev/null
+++ b/tests/feeds/test02-result.ttl
@@ -0,0 +1,41 @@
+@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+@prefix content: <http://purl.org/rss/1.0/modules/content/> .
+@prefix dc: <http://purl.org/dc/elements/1.1/> .
+@prefix : <http://purl.org/rss/1.0/> .
+
+<>
+ dc:date "2008-03-30T05:52:06Z" ;
+ :description "Example News feed." ;
+ :items [
+ rdf:_1 <2008-03-30> ;
+ rdf:_2 <2007-10-01> ;
+ a rdf:Seq
+ ] ;
+ :link "http://example.org/news/" ;
+ :title "Example News" ;
+ a :channel .
+
+<2007-10-01>
+ dc:date "2007-10-01T06:56:58Z" ;
+ :description """<div xmlns=\"http://www.w3.org/1999/xhtml\">
+html description 4
+</div>""" ;
+ :link "http://example.org/news/2007-10-01" ;
+ content:encoded """<div xmlns=\"http://www.w3.org/1999/xhtml\">
+html description 3
+</div>""" ;
+ :title "News for 2007-10-01" ;
+ a :item .
+
+<2008-03-30>
+ dc:date "2008-03-30T06:07:28Z" ;
+ :description """<div xmlns=\"http://www.w3.org/1999/xhtml\">
+html description 2
+</div>""" ;
+ :link "http://example.org/news/2008-03-30" ;
+ content:encoded """<div xmlns=\"http://www.w3.org/1999/xhtml\">
+html description 1
+</div>""" ;
+ :title "News for 2008-03-30" ;
+ a :item .
+
diff --git a/tests/feeds/test02.rdf b/tests/feeds/test02.rdf
new file mode 100644
index 0000000..d761513
--- /dev/null
+++ b/tests/feeds/test02.rdf
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<rdf:RDF xml:base="http://example.org/news/NEWS.rdf"
+ xmlns:content="http://purl.org/rss/1.0/modules/content/"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns="http://purl.org/rss/1.0/">
+ <channel rdf:about="http://example.org/news/">
+ <title>Example News</title>
+ <link>http://example.org/news/</link>
+ <description>Example News feed.</description>
+ <dc:date>2008-03-30T05:52:06Z</dc:date>
+ <items>
+ <rdf:Seq>
+ <rdf:li rdf:resource="http://example.org/news/2008-03-30"/>
+ <rdf:li rdf:resource="http://example.org/news/2007-10-01"/>
+ </rdf:Seq>
+ </items>
+ </channel>
+
+ <item rdf:about="http://example.org/news/2008-03-30">
+ <link>http://example.org/news/2008-03-30</link>
+ <title>News for 2008-03-30</title>
+ <content:encoded><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">
+html description 1
+</div>]]></content:encoded>
+ <description>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
+html description 2
+&lt;/div&gt;</description>
+ <dc:date>2008-03-30T06:07:28Z</dc:date>
+ </item>
+
+ <item rdf:about="http://example.org/news/2007-10-01">
+ <link>http://example.org/news/2007-10-01</link>
+ <title>News for 2007-10-01</title>
+ <content:encoded><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">
+html description 3
+</div>]]></content:encoded>
+ <description>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
+html description 4
+&lt;/div&gt;</description>
+ <dc:date>2007-10-01T06:56:58Z</dc:date>
+ </item>
+
+</rdf:RDF>
diff --git a/tests/feeds/test03-result.atom b/tests/feeds/test03-result.atom
new file mode 100644
index 0000000..ef0b16e
--- /dev/null
+++ b/tests/feeds/test03-result.atom
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="utf-8"?>
+<feed xmlns:at="http://purl.org/syndication/atomtriples/1"
+ xmlns:atom="http://www.w3.org/2005/Atom"
+ xmlns:content="http://purl.org/rss/1.0/modules/content/"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:enc="http://purl.oclc.org/net/rss_2.0/enc#"
+ xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rss091="http://purl.org/rss/1.0/modules/rss091#"
+ xmlns:rss="http://purl.org/rss/1.0/"
+ xmlns="http://www.w3.org/2005/Atom">
+ <id>http://example.org/whatsnew</id>
+ <title>example feed with 3 items</title>
+ <updated>2006-03-28T20:57:15Z</updated>
+ <author>
+ <email>bob@bob.com</email>
+ <name>unknown</name>
+ <uri>http://bob.com/</uri>
+ </author>
+ <link href="/whatsnew"
+ rel="self"/>
+ <at:feedmap>
+ <at:feedmap property="http://purl.org/rss/1.0/link">atom:id</at:feedmap>
+ <at:feedmap property="http://purl.org/dc/elements/1.1/date">atom:updated</at:feedmap>
+ <at:feedmap property="http://purl.org/dc/elements/1.1/rights">atom:rights</at:feedmap>
+ <at:feedmap property="http://purl.org/rss/1.0/title">atom:title</at:feedmap>
+ </at:feedmap>
+ <at:entrymap>
+ <at:entrymap property="http://purl.org/rss/1.0/description">atom:summary</at:entrymap>
+ <at:entrymap property="http://purl.org/rss/1.0/link">atom:id</at:entrymap>
+ <at:entrymap property="http://purl.org/dc/elements/1.1/date">atom:updated</at:entrymap>
+ <at:entrymap property="http://purl.org/dc/elements/1.1/rights">atom:rights</at:entrymap>
+ <at:entrymap property="http://purl.org/rss/1.0/title">atom:title</at:entrymap>
+ <at:entrymap property="http://purl.org/rss/1.0/modules/content/encoded">atom:summary</at:entrymap>
+ <at:entrymap property="http://purl.org/dc/elements/1.1/date">rss091:pubDate</at:entrymap>
+ <at:entrymap property="http://purl.org/rss/1.0/modules/content/encoded">rss:description</at:entrymap>
+ </at:entrymap>
+
+ <entry>
+ <id>http://example.org/2006/03/03/blog-item</id>
+ <title>blog item title 2006-02</title>
+ <updated>2006-03-03T23:59:59Z</updated>
+ <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">a literal XML atom:content with
+<b>tags</b> and
+newlines</div></content>
+ <summary>the summary of the item</summary>
+ <at:md/>
+ </entry>
+
+ <entry>
+ <id>http://example.org/2006/02/02/blog-item</id>
+ <title>blog item title 2006-02</title>
+ <updated>2006-02-02T00:00:02Z</updated>
+ <link href="/2006/02/02/blog-item"
+ rel="alternate"/>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">a content:encoded description with
+<b xmlns="http://www.w3.org/1999/xhtml">tags</b> and
+newlines</div></summary>
+ <at:md/>
+ </entry>
+
+ <entry>
+ <id>http://example.org/2006/01/01/blog-item</id>
+ <title>blog item title 2006-01</title>
+ <updated>2006-01-01T00:00:01Z</updated>
+ <link href="/2006/01/01/blog-item"
+ rel="alternate"/>
+ <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">The atom:summary description including
+<b>tags</b>
+over several lines.</div></summary>
+ <at:md/>
+ </entry>
+
+ <entry>
+ <id>http://example.org/2005/12/12/blog-item</id>
+ <title>blog item title 2005-12</title>
+ <updated>2005-12-12T00:00:00Z</updated>
+ <content src="http://external.example.org/"
+ type="text/html"/>
+ <summary>the rss description</summary>
+ <at:md/>
+ </entry>
+
+</feed>
diff --git a/tests/feeds/test03-result.ttl b/tests/feeds/test03-result.ttl
new file mode 100644
index 0000000..45c0455
--- /dev/null
+++ b/tests/feeds/test03-result.ttl
@@ -0,0 +1,57 @@
+@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+@prefix atom: <http://www.w3.org/2005/Atom> .
+@prefix content: <http://purl.org/rss/1.0/modules/content/> .
+@prefix dc: <http://purl.org/dc/elements/1.1/> .
+@prefix at: <http://purl.org/syndication/atomtriples/1> .
+@prefix : <http://purl.org/rss/1.0/> .
+
+</2005/12/12/blog-item>
+ dc:date "2005-12-12T00:00:00Z" ;
+ :description "the rss description" ;
+ :title "blog item title 2005-12" ;
+ at:contentType "text/html" ;
+ a :item ;
+ atom:content <http://external.example.org/> .
+
+</2006/01/01/blog-item>
+ dc:date "2006-01-01T00:00:01Z" ;
+ :title "blog item title 2006-01" ;
+ a :item ;
+ atom:summary """<div xmlns=\"http://www.w3.org/1999/xhtml\">The atom:summary description including
+<b>tags</b>
+over several lines.</div>"""^^rdf:XMLLiteral .
+
+</2006/02/02/blog-item>
+ dc:date "2006-02-02T00:00:02Z" ;
+ content:encoded """<div xmlns=\"http://www.w3.org/1999/xhtml\">a content:encoded description with
+<b xmlns=\"http://www.w3.org/1999/xhtml\">tags</b> and
+newlines</div>""" ;
+ :title "blog item title 2006-02" ;
+ a :item .
+
+</2006/03/03/blog-item>
+ dc:date "2006-03-03T12:00:005Z" ;
+ :description "the summary of the item" ;
+ :title "blog item title 2006-02" ;
+ a :item ;
+ atom:content """<div xmlns=\"http://www.w3.org/1999/xhtml\">a literal XML atom:content with
+<b>tags</b> and
+newlines</div>"""^^rdf:XMLLiteral ;
+ atom:updated "2006-03-03T23:59:59Z" .
+
+</whatsnew>
+ dc:date "2006-03-28T17:05:01-05:00" ;
+ :items [
+ rdf:_1 </2006/03/03/blog-item> ;
+ rdf:_2 </2006/02/02/blog-item> ;
+ rdf:_3 </2006/01/01/blog-item> ;
+ rdf:_4 </2005/12/12/blog-item> ;
+ a rdf:Seq
+ ] ;
+ :title "example feed with 3 items" ;
+ a :channel ;
+ atom:author "bob" ;
+ atom:email "bob@bob.com" ;
+ atom:updated "2006-03-28T20:57:15Z" ;
+ atom:uri "http://bob.com/" .
+
diff --git a/tests/feeds/test03.rdf b/tests/feeds/test03.rdf
new file mode 100644
index 0000000..6a47edd
--- /dev/null
+++ b/tests/feeds/test03.rdf
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="utf-8"?>
+<rdf:RDF
+ xmlns:atom="http://www.w3.org/2005/Atom"
+ xmlns:content="http://purl.org/rss/1.0/modules/content/"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:at="http://purl.org/syndication/atomtriples/1"
+ xmlns="http://purl.org/rss/1.0/">
+ <channel rdf:about="http://example.org/whatsnew">
+ <title>example feed with 3 items</title>
+ <atom:updated>2006-03-28T20:57:15Z</atom:updated>
+ <atom:author>bob</atom:author>
+ <atom:email>bob@bob.com</atom:email>
+ <atom:uri>http://bob.com/</atom:uri>
+ <dc:date>2006-03-28T17:05:01-05:00</dc:date>
+ <items>
+ <rdf:Seq>
+ <rdf:li rdf:resource="http://example.org/2006/03/03/blog-item"/>
+ <rdf:li rdf:resource="http://example.org/2006/02/02/blog-item"/>
+ <rdf:li rdf:resource="http://example.org/2006/01/01/blog-item"/>
+ <rdf:li rdf:resource="http://example.org/2005/12/12/blog-item"/>
+ </rdf:Seq>
+ </items>
+ </channel>
+
+ <item rdf:about="http://example.org/2006/03/03/blog-item">
+ <!-- this is used as atom:title -->
+ <title>blog item title 2006-02</title>
+ <!-- this is used as atom:summary -->
+ <description>the summary of the item</description>
+ <atom:content rdf:parseType="Literal"><div xmlns="http://www.w3.org/1999/xhtml">a literal XML atom:content with
+<b xmlns="http://www.w3.org/1999/xhtml">tags</b> and
+newlines</div></atom:content>
+ <!-- this overrides the dc:date -->
+ <atom:updated>2006-03-03T23:59:59Z</atom:updated>
+ <dc:date>2006-03-03T12:00:005Z</dc:date>
+ </item>
+
+ <!-- recommended rss & atom form with no content -->
+ <item rdf:about="http://example.org/2006/02/02/blog-item">
+ <title>blog item title 2006-02</title>
+ <!-- this is used as atom:summary -->
+ <content:encoded><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">a content:encoded description with
+<b xmlns="http://www.w3.org/1999/xhtml">tags</b> and
+newlines</div>]]></content:encoded>
+ <dc:date>2006-02-02T00:00:02Z</dc:date>
+ <!-- content is link to URI of item/@rdf:about -->
+ </item>
+
+
+ <item rdf:about="http://example.org/2006/01/01/blog-item">
+ <title>blog item title 2006-01</title>
+ <atom:summary rdf:parseType="Literal"><div xmlns="http://www.w3.org/1999/xhtml">The atom:summary description including
+<b>tags</b>
+over several lines.</div></atom:summary>
+ <dc:date>2006-01-01T00:00:01Z</dc:date>
+ <!-- content is link to URI of item/@rdf:about -->
+ </item>
+
+
+ <!-- atom only form with external content -->
+ <item rdf:about="http://example.org/2005/12/12/blog-item">
+ <title>blog item title 2005-12</title>
+ <!-- this is used as atom:summary -->
+ <description>the rss description</description>
+ <!-- external content -->
+ <atom:content rdf:resource="http://external.example.org/"/>
+ <at:contentType>text/html</at:contentType>
+ <dc:date>2005-12-12T00:00:00Z</dc:date>
+ </item>
+
+</rdf:RDF>
diff --git a/tests/feeds/test04-result.ttl b/tests/feeds/test04-result.ttl
new file mode 100644
index 0000000..8977a78
--- /dev/null
+++ b/tests/feeds/test04-result.ttl
@@ -0,0 +1,67 @@
+@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+@prefix rss091: <http://purl.org/rss/1.0/modules/rss091#> .
+@prefix rss: <http://purl.org/rss/1.0/> .
+@prefix dc: <http://purl.org/dc/elements/1.1/> .
+@prefix content: <http://purl.org/rss/1.0/modules/content/> .
+@prefix atom: <http://www.w3.org/2005/Atom> .
+
+<2006/04/01/More-Stuff>
+ dc:date "2006-04-01T08:03:19-05:00" ;
+ rss:link "http://www.example.org/blog/2006/04/01/More-Stuff" ;
+ rss:title "More stuff" ;
+ a rss:item ;
+ atom:content "<div xmlns=\"http://www.w3.org/1999/xhtml\"><em>More stuff</em></div>" ;
+ atom:id <tag:example.org,2004:2216> ;
+ atom:link [
+ a atom:Link ;
+ atom:href <2006/04/01/More-Stuff>
+ ] ;
+ atom:title "More stuff" ;
+ atom:updated "2006-04-01T08:03:19-05:00" .
+
+<2006/04/02/Blah-Blah>
+ dc:date "2006-04-02T07:06:12-04:00" ;
+ rss:description "Blah blah summary." ;
+ rss:link "http://www.example.org/blog/2006/04/02/Blah-Blah" ;
+ content:encoded "Blah blah summary." ;
+ rss:title "Blah Blah" ;
+ a rss:item ;
+ atom:content "<div xmlns=\"http://www.w3.org/1999/xhtml\"><p>Blah blah</p></div>" ;
+ atom:id <tag:example.org,2004:2217> ;
+ atom:link [
+ a atom:Link ;
+ atom:href <2006/04/02/Blah-Blah>
+ ] ;
+ atom:summary "Blah blah summary." ;
+ atom:title "Blah Blah" ;
+ atom:updated "2006-04-02T07:06:12-04:00" .
+
+<index.atom>
+ dc:date "2006-04-02T22:15:25-04:00" ;
+ rss:items [
+ rdf:_1 <2006/04/02/Blah-Blah> ;
+ rdf:_2 <2006/04/01/More-Stuff> ;
+ a rdf:Seq
+ ] ;
+ rss:link "http://www.example.org/blog/index.atom" ;
+ rss:title "Kim Doe" ;
+ a rss:channel ;
+ atom:author [
+ a atom:Author ;
+ atom:email "me@example.org" ;
+ atom:name "Kim Doe" ;
+ atom:uri "http://www.example.org/blog/"
+ ] ;
+ atom:id <index.atom> ;
+ atom:link [
+ a atom:Link ;
+ atom:href <index.atom> ;
+ atom:rel "self"
+ ], [
+ a atom:Link ;
+ atom:href <>
+ ] ;
+ atom:subtitle "Blog subtitle" ;
+ atom:title "Kim Doe" ;
+ atom:updated "2006-04-02T22:15:25-04:00" .
+
diff --git a/tests/feeds/test04.atom b/tests/feeds/test04.atom
new file mode 100644
index 0000000..ac547c4
--- /dev/null
+++ b/tests/feeds/test04.atom
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<feed
+ xmlns:at="http://purl.org/syndication/atomtriples/1"
+ xmlns:atom="http://www.w3.org/2005/Atom"
+ xmlns:content="http://purl.org/rss/1.0/modules/content/"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:enc="http://purl.oclc.org/net/rss_2.0/enc#"
+ xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rss091="http://purl.org/rss/1.0/modules/rss091#"
+ xmlns:rss="http://purl.org/rss/1.0/"
+ xmlns="http://www.w3.org/2005/Atom">
+
+ <link rel="self" href="http://www.example.org/blog/index.atom"/>
+ <id>http://www.example.org/blog/index.atom</id>
+
+ <title>Kim Doe</title>
+ <subtitle>Blog subtitle</subtitle>
+ <author>
+ <name>Kim Doe</name>
+ <email>me@example.org</email>
+ <uri>http://www.example.org/blog/</uri>
+ </author>
+ <updated>2006-04-02T22:15:25-04:00</updated>
+ <link href="http://www.example.org/blog/"/>
+
+ <entry>
+ <id>tag:example.org,2004:2217</id>
+ <link href="http://www.example.org/blog/2006/04/02/Blah-Blah"/>
+ <title>Blah Blah</title>
+ <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Blah blah</p></div></content>
+ <summary>Blah blah summary.</summary>
+ <updated>2006-04-02T07:06:12-04:00</updated>
+ </entry>
+
+ <entry>
+ <id>tag:example.org,2004:2216</id>
+ <link href="http://www.example.org/blog/2006/04/01/More-Stuff"/>
+ <title>More stuff</title>
+ <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><em>More stuff</em></div></content>
+ <updated>2006-04-01T08:03:19-05:00</updated>
+ </entry>
+
+</feed>
diff --git a/tests/feeds/test05-result.ttl b/tests/feeds/test05-result.ttl
new file mode 100644
index 0000000..e40cf91
--- /dev/null
+++ b/tests/feeds/test05-result.ttl
@@ -0,0 +1,24 @@
+@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+@prefix rss091: <http://purl.org/rss/1.0/modules/rss091#> .
+@prefix rss: <http://purl.org/rss/1.0/> .
+@prefix dc: <http://purl.org/dc/elements/1.1/> .
+@prefix atom: <http://www.w3.org/2005/Atom> .
+
+<index.atom>
+ dc:date "2009-01-01T00:00:00-00:00" ;
+ rss:link "http://www.example.org/blog/index.atom" ;
+ rss:title "Kim Doe" ;
+ a rss:channel ;
+ atom:author [
+ a atom:Author ;
+ atom:name "Kim Doe"
+ ] ;
+ atom:id <index.atom> ;
+ atom:link [
+ a atom:Link ;
+ atom:href <index.atom> ;
+ atom:rel "self"
+ ] ;
+ atom:title "Kim Doe" ;
+ atom:updated "2009-01-01T00:00:00-00:00" .
+
diff --git a/tests/feeds/test05.atom b/tests/feeds/test05.atom
new file mode 100644
index 0000000..e76a6bb
--- /dev/null
+++ b/tests/feeds/test05.atom
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom">
+ <link rel="self" href="http://www.example.org/blog/index.atom"/>
+ <id>http://www.example.org/blog/index.atom</id>
+
+ <title>Kim Doe</title>
+ <author><name>Kim Doe</name></author>
+ <updated>2009-01-01T00:00:00-00:00</updated>
+</feed>