XML validation: Difference between revisions

(Added Wren)
Line 570:
Element 'a': Element content is not allowed, because the type definition is simple.</pre>
 
=={{header|phpPhix}}==
{{trans|C}}
Note that error handling has been delegated to within libxml.e, specifically
xmlSchemaNewParserCtxt() and xmlSchemaNewValidCtxt() assign an internal handler,
which resorts to xmlGetLastError() and therefore needs to use a bit of cffi,
that is rather than using the (odd-looking) error it is actually passed.
The libxml.e wrapper was penned specifically for this task and is just about as
bare-bones as it could ever possibly be, and win32-only, for now.
<!--<lang Phix>(notonline)-->
<span style="color: #000080;font-style:italic;">--
-- demo\rosetta\Validate_XML.exw
-- =============================
--</span>
<span style="color: #008080;">without</span> <span style="color: #008080;">js</span>
<span style="color: #7060A8;">requires</span><span style="color: #0000FF;">(</span><span style="color: #000000;">32</span><span style="color: #0000FF;">)</span> <span style="color: #000080;font-style:italic;">-- let me know if you can get this to work on 64bit</span>
<span style="color: #7060A8;">requires</span><span style="color: #0000FF;">(</span><span style="color: #004600;">WINDOWS</span><span style="color: #0000FF;">)</span> <span style="color: #000080;font-style:italic;">-- "" if you can get this to work on linux</span>
<span style="color: #008080;">constant</span> <span style="color: #000000;">dl</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">`Download rosetta\libxml\ from http://phix.x10.mx/pmwiki/pmwiki.php?n=Main.libxml`</span>
<span style="color: #7060A8;">assert</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">get_file_type</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"libxml"</span><span style="color: #0000FF;">)=</span><span style="color: #004600;">FILETYPE_DIRECTORY</span><span style="color: #0000FF;">,</span><span style="color: #000000;">dl</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">include</span> <span style="color: #000000;">libxml</span><span style="color: #0000FF;">\</span><span style="color: #000000;">libxml</span><span style="color: #0000FF;">.</span><span style="color: #000000;">e</span>
<span style="color: #008080;">constant</span> <span style="color: #000000;">XSDFileName</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">`libxml\shiporder.xsd`</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- (versions 2 & 3 also included in "")</span>
<span style="color: #000000;">XMLFileName</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">`libxml\shiporder.xml`</span>
<span style="color: #000000;">xmlLineNumbersDefault</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span>
<span style="color: #004080;">atom</span> <span style="color: #000000;">pctxt</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">xmlSchemaNewParserCtxt</span><span style="color: #0000FF;">(</span><span style="color: #000000;">XSDFileName</span><span style="color: #0000FF;">),</span>
<span style="color: #000000;">schema</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">xmlSchemaParse</span><span style="color: #0000FF;">(</span><span style="color: #000000;">pctxt</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">xmlSchemaFreeParserCtxt</span><span style="color: #0000FF;">(</span><span style="color: #000000;">pctxt</span><span style="color: #0000FF;">)</span>
<span style="color: #004080;">atom</span> <span style="color: #000000;">doc</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">xmlReadFile</span><span style="color: #0000FF;">(</span><span style="color: #000000;">XMLFileName</span><span style="color: #0000FF;">,</span> <span style="color: #004600;">NULL</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">doc</span><span style="color: #0000FF;">=</span><span style="color: #004600;">NULL</span> <span style="color: #008080;">then</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"Could not parse %s\n"</span><span style="color: #0000FF;">,</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">XMLFileName</span><span style="color: #0000FF;">})</span>
<span style="color: #008080;">else</span>
<span style="color: #004080;">atom</span> <span style="color: #000000;">vctxt</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">xmlSchemaNewValidCtxt</span><span style="color: #0000FF;">(</span><span style="color: #000000;">schema</span><span style="color: #0000FF;">)</span>
<span style="color: #004080;">integer</span> <span style="color: #000000;">ret</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">xmlSchemaValidateDoc</span><span style="color: #0000FF;">(</span><span style="color: #000000;">vctxt</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">doc</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">ret</span><span style="color: #0000FF;">=</span><span style="color: #000000;">0</span> <span style="color: #008080;">then</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"%s validates\n"</span><span style="color: #0000FF;">,</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">XMLFileName</span><span style="color: #0000FF;">})</span>
<span style="color: #008080;">elsif</span> <span style="color: #000000;">ret</span><span style="color: #0000FF;">></span><span style="color: #000000;">0</span> <span style="color: #008080;">then</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"%s fails to validate\n"</span><span style="color: #0000FF;">,</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">XMLFileName</span><span style="color: #0000FF;">})</span>
<span style="color: #008080;">else</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"%s validation generated an internal error\n"</span><span style="color: #0000FF;">,</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">XMLFileName</span><span style="color: #0000FF;">})</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #000000;">xmlSchemaFreeValidCtxt</span><span style="color: #0000FF;">(</span><span style="color: #000000;">vctxt</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">xmlFreeDoc</span><span style="color: #0000FF;">(</span><span style="color: #000000;">doc</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">schema</span><span style="color: #0000FF;">!=</span><span style="color: #004600;">NULL</span> <span style="color: #008080;">then</span>
<span style="color: #000000;">xmlSchemaFree</span><span style="color: #0000FF;">(</span><span style="color: #000000;">schema</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #000000;">xmlSchemaCleanupTypes</span><span style="color: #0000FF;">()</span>
<span style="color: #000000;">xmlCleanupParser</span><span style="color: #0000FF;">()</span>
<span style="color: #000000;">xmlMemoryDump</span><span style="color: #0000FF;">()</span>
<!--</lang>-->
{{out}}
<pre>
libxml\shiporder.xml validates
</pre>
Performing the same error handling check as Nim, ie changing orderperson to orderperson1 (twice) results in:
<pre>
Error/Warning in line 6
Element 'orderperson1': This element is not expected. Expected is ( orderperson ).
libxml\shiporder.xml fails to validate
</pre>
All three formats of the xsd file as given on the W3 page give identical results, for both with and without that error.
 
=={{header|PHP}}==
<lang php>
libxml_use_internal_errors(true);
Line 609 ⟶ 671:
Done.
</pre>
 
=={{header|Python}}==
 
7,806

edits