summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Beckett <dave@dajobe.org>2003-04-03 15:03:21 +0000
committerDave Beckett <dave@dajobe.org>2003-04-03 15:03:21 +0000
commit86c88359d6dc344c57e1000077073f13aea8a2a5 (patch)
tree0f91c84eab657b353ab748026bda8dd70dcac23e
parent5b128dc372709def5edcd4f086b878b1cdc1ff85 (diff)
downloadraptor-86c88359d6dc344c57e1000077073f13aea8a2a5.tar.gz
(raptor_xml_start_element_handler): Error recovery - try to hide that
a bad element was found from a parent element, it thinks the element is empty. See tests/warn-00.rdf
-rw-r--r--src/raptor_parse.c8
-rw-r--r--src/raptor_rdfxml.c8
-rw-r--r--tests/Makefile.am34
3 files changed, 47 insertions, 3 deletions
diff --git a/src/raptor_parse.c b/src/raptor_parse.c
index 19549e98..b3b121ac 100644
--- a/src/raptor_parse.c
+++ b/src/raptor_parse.c
@@ -831,6 +831,7 @@ raptor_xml_start_element_handler(void *user_data,
int non_nspaced_count=0;
unsigned char *xml_language=NULL;
raptor_uri *xml_base=NULL;
+ int count_bumped=0;
rdf_parser=(raptor_parser*)user_data;
rdf_xml_parser=(raptor_xml_parser*)rdf_parser->context;
@@ -1120,6 +1121,7 @@ raptor_xml_start_element_handler(void *user_data,
element->state=element->parent->child_state;
element->parent->content_element_seen++;
+ count_bumped++;
/* leave literal XML alone */
if (!rdf_content_type_info[element->content_type].cdata_allowed) {
@@ -1169,6 +1171,9 @@ raptor_xml_start_element_handler(void *user_data,
raptor_parser_warning(rdf_parser, "element %s has non-namespaced parts, skipping.",
element->name->local_name);
element->state=RAPTOR_STATE_SKIPPING;
+ /* Remove count above so that parent thinks this is empty */
+ if(count_bumped)
+ element->parent->content_element_seen--;
element->content_type=RAPTOR_ELEMENT_CONTENT_TYPE_PRESERVED;
}
@@ -1178,6 +1183,9 @@ raptor_xml_start_element_handler(void *user_data,
raptor_parser_warning(rdf_parser, "element %s has aboutEach / aboutEachPrefix, skipping.",
element->name->local_name);
element->state=RAPTOR_STATE_SKIPPING;
+ /* Remove count above so that parent thinks this is empty */
+ if(count_bumped)
+ element->parent->content_element_seen--;
element->content_type=RAPTOR_ELEMENT_CONTENT_TYPE_PRESERVED;
}
diff --git a/src/raptor_rdfxml.c b/src/raptor_rdfxml.c
index 19549e98..b3b121ac 100644
--- a/src/raptor_rdfxml.c
+++ b/src/raptor_rdfxml.c
@@ -831,6 +831,7 @@ raptor_xml_start_element_handler(void *user_data,
int non_nspaced_count=0;
unsigned char *xml_language=NULL;
raptor_uri *xml_base=NULL;
+ int count_bumped=0;
rdf_parser=(raptor_parser*)user_data;
rdf_xml_parser=(raptor_xml_parser*)rdf_parser->context;
@@ -1120,6 +1121,7 @@ raptor_xml_start_element_handler(void *user_data,
element->state=element->parent->child_state;
element->parent->content_element_seen++;
+ count_bumped++;
/* leave literal XML alone */
if (!rdf_content_type_info[element->content_type].cdata_allowed) {
@@ -1169,6 +1171,9 @@ raptor_xml_start_element_handler(void *user_data,
raptor_parser_warning(rdf_parser, "element %s has non-namespaced parts, skipping.",
element->name->local_name);
element->state=RAPTOR_STATE_SKIPPING;
+ /* Remove count above so that parent thinks this is empty */
+ if(count_bumped)
+ element->parent->content_element_seen--;
element->content_type=RAPTOR_ELEMENT_CONTENT_TYPE_PRESERVED;
}
@@ -1178,6 +1183,9 @@ raptor_xml_start_element_handler(void *user_data,
raptor_parser_warning(rdf_parser, "element %s has aboutEach / aboutEachPrefix, skipping.",
element->name->local_name);
element->state=RAPTOR_STATE_SKIPPING;
+ /* Remove count above so that parent thinks this is empty */
+ if(count_bumped)
+ element->parent->content_element_seen--;
element->content_type=RAPTOR_ELEMENT_CONTENT_TYPE_PRESERVED;
}
diff --git a/tests/Makefile.am b/tests/Makefile.am
index b91eeb4d..cee22842 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -4,7 +4,7 @@
#
# $Id$
#
-# Copyright (C) 2000-2001 David Beckett - http://purl.org/net/dajobe/
+# Copyright (C) 2000-2003 David Beckett - http://purl.org/net/dajobe/
# Institute for Learning and Research Technology - http://www.ilrt.org/
# University of Bristol - http://www.bristol.ac.uk/
#
@@ -33,6 +33,8 @@ RDF_BAD_TEST_FILES=bad-00.rdf bad-01.rdf bad-02.rdf bad-03.rdf \
bad-04.rdf bad-05.rdf bad-06.rdf bad-07.rdf bad-08.rdf bad-09.rdf \
bad-10.rdf bad-11.rdf
+RDF_WARN_TEST_FILES=warn-00.rdf
+
RDF_ASSUME_TEST_FILES=ex-19.rdf
RDF_OUT_FILES=ex-00.out ex-01.out ex-02.out ex-03.out ex-04.out ex-05.out \
@@ -46,6 +48,8 @@ ex-48.out ex-49.out \
22-rdf-syntax-ns.out rdfs-namespace.out rdf-schema.out \
owl-schema.out
+RDF_WARN_OUT_FILES=warn-00.out
+
RDF_ASSUME_OUT_FILES=ex-19.out
NT_TEST_FILES=test.nt
@@ -65,8 +69,10 @@ EXTRA_DIST = \
$(RDF_TEST_FILES) \
$(RDF_ASSUME_TEST_FILES) \
$(RDF_BAD_TEST_FILES) \
+ $(RDF_WARN_TEST_FILES) \
$(RDF_OUT_FILES) \
$(RDF_ASSUME_OUT_FILES) \
+ $(RDF_WARN_OUT_FILES) \
$(NT_TEST_FILES) \
$(NT_OUT_FILES)
@@ -74,7 +80,7 @@ EXTRA_DIST = \
$(top_builddir)/rapper:
@(cd .. ; $(MAKE) rapper)
-check-local: check-rdf check-assume-rdf check-bad-rdf check-nt
+check-local: check-rdf check-assume-rdf check-bad-rdf check-warn-rdf check-nt
check-rdf: $(top_builddir)/rapper $(RDF_TEST_FILES)
@result=0; \
@@ -125,7 +131,7 @@ check-assume-rdf: $(top_builddir)/rapper $(RDF_ASSUME_TEST_FILES)
done; \
exit $$result
-check-bad-rdf: $(top_builddir)/rapper $(RDF_TEST_FILES)
+check-bad-rdf: $(top_builddir)/rapper $(RDF_BAD_TEST_FILES)
@set +e; result=0; \
$(ECHO) "Testing bad rdf/xml fails"; \
for test in $(RDF_BAD_TEST_FILES); do \
@@ -147,6 +153,28 @@ check-bad-rdf: $(top_builddir)/rapper $(RDF_TEST_FILES)
done; \
set -e; exit $$result
+check-warn-rdf: $(top_builddir)/rapper $(RDF_WARN_TEST_FILES)
+ @set +e; result=0; \
+ $(ECHO) "Testing rdf/xml with warnings"; \
+ for test in $(RDF_WARN_TEST_FILES); do \
+ name=`basename $$test .rdf` ; \
+ baseuri=$(BASE_URI)$$name.rdf; \
+ $(ECHO) $(ECHO_N) "Checking $$test $(ECHO_C)"; \
+ $(top_builddir)/rapper -q -o ntriples file:$(srcdir)/$$test $$baseuri > $$name.res 2> $$name.err; \
+ status=$$?; \
+ if test $$status -eq 1 ; then \
+ $(ECHO) FAILED - parsing failed when should have warned; \
+ cat $$name.res; grep Error $$name.err; result=1; \
+ elif test $$status -eq 2 ; then \
+ $(ECHO) ok; \
+ else \
+ $(ECHO) FAILED - parsing failed with unknown status $$status; \
+ cat $$name.res; result=1; \
+ fi; \
+ rm -f $$name.res $$name.err ; \
+ done; \
+ set -e; exit $$result
+
check-nt: $(top_builddir)/rapper $(NT_TEST_FILES)
@result=0; \
$(ECHO) "Testing N-Triples"; \