XML validation: Difference between revisions
Content added Content deleted
(Added Wren) |
|||
Line 570: | Line 570: | ||
Element 'a': Element content is not allowed, because the type definition is simple.</pre> |
Element 'a': Element content is not allowed, because the type definition is simple.</pre> |
||
=={{header| |
=={{header|Phix}}== |
||
{{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> |
<lang php> |
||
libxml_use_internal_errors(true); |
libxml_use_internal_errors(true); |
||
Line 609: | Line 671: | ||
Done. |
Done. |
||
</pre> |
</pre> |
||
=={{header|Python}}== |
=={{header|Python}}== |
||