diff options
author | Dave Beckett <dave@dajobe.org> | 2003-04-03 15:03:21 +0000 |
---|---|---|
committer | Dave Beckett <dave@dajobe.org> | 2003-04-03 15:03:21 +0000 |
commit | 86c88359d6dc344c57e1000077073f13aea8a2a5 (patch) | |
tree | 0f91c84eab657b353ab748026bda8dd70dcac23e | |
parent | 5b128dc372709def5edcd4f086b878b1cdc1ff85 (diff) | |
download | raptor-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.c | 8 | ||||
-rw-r--r-- | src/raptor_rdfxml.c | 8 | ||||
-rw-r--r-- | tests/Makefile.am | 34 |
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"; \ |