README
file,
plus some extra information on the tests.
SC14N can be downloaded from here.
Contains example XML files derived from [XML-C14N] examples, including required DTD and TXT files, together with the "correct" results.
The Windows batch file testcanon.bat
uses SC14N.exe
to compute the SHA-1 digest of the C14N transformed data, then computes the digest value directly of the "OK" file.
These values should be the same.
sc14n -d <XML-file>
digestvalue <OK-file>
Requires the utility digestvalue.exe
(included).
Two exceptions:
testcanon4.xml - removed the normId and normNames elements because we do not support the XML-C14N rules for "character references to whitespace characters other than space (#x20)" in ID and NMREF elements.
testcanon7.xml - we do not support XPath subset expressions like the original, so we've just canonicalized the entire file. You could verify this using XML Starlet.
Open a command-line console in the directory C:\Program Files (x86)\Sc14n\TestFiles\testcanon
and run the testcanon.bat batch file.
Or use Start > All Programs > Sc14n > Sc14n Reference Files then Ctrl-right-click on the TestFiles folder and select "Open command window here".
(Hint: you may want to copy this folder to a less-protected place.)
C:\Program Files (x86)\Sc14n>cd TestFiles\testcanon C:\Program Files (x86)\Sc14n\TestFiles\testcanon>testcanon testcanon1.xml R8S/QfGgzSmfIg0qpQthdjJQGuk= R8S/QfGgzSmfIg0qpQthdjJQGuk= testcanon2.xml tEt2bMl/u+uTyPWQTBtI24eXVGE= tEt2bMl/u+uTyPWQTBtI24eXVGE= testcanon3.xml QW9fG5yWDn/iTWUVciixUn7cwRo= QW9fG5yWDn/iTWUVciixUn7cwRo= testcanon4.xml oXv0p+UBJ1RTI8JpA1wElJ+zKiA= oXv0p+UBJ1RTI8JpA1wElJ+zKiA= testcanon5.xml j8qKxUkEAp7CxOYVzaV/XZvo5YM= j8qKxUkEAp7CxOYVzaV/XZvo5YM= testcanon6.xml YdFUlxBqm1OaTMh6VV2H4clo2Co= YdFUlxBqm1OaTMh6VV2H4clo2Co= testcanon7.xml iCAqgq/WXbQgvvizBdlG+fL0PLY= iCAqgq/WXbQgvvizBdlG+fL0PLY=
Source: [XML-C14N] section 3 Examples of XML Canonicalization. HTML highlighting generated by highlight 3.35.
sc14n testcanonN.xml
for N = 1 to 7.
N | Input | C14N output |
---|---|---|
1 |
<?xml version="1.0"?> <?xml-stylesheet href="doc.xsl" type="text/xsl" ?> <!DOCTYPE doc SYSTEM "doc.dtd"> <doc>Hello, world!<!-- Comment 1 --></doc> <?pi-without-data ?> <!-- Comment 2 --> <!-- Comment 3 --> |
<?xml-stylesheet href="doc.xsl" type="text/xsl" ?> <doc>Hello, world!</doc> <?pi-without-data?> |
2 |
<doc> <clean> </clean> <dirty> A B </dirty> <mixed> A <clean> </clean> B <dirty> A B </dirty> C </mixed> </doc> |
<doc> <clean> </clean> <dirty> A B </dirty> <mixed> A <clean> </clean> B <dirty> A B </dirty> C </mixed> </doc> |
3 |
<!DOCTYPE doc [<!ATTLIST e9 attr CDATA "default">]> <doc> <e1 /> <e2 ></e2> <e3 name = "elem3" id="elem3" /> <e4 name="elem4" id="elem4" ></e4> <e5 a:attr="out" b:attr="sorted" attr2="all" attr="I'm" xmlns:b="http://www.ietf.org" xmlns:a="http://www.w3.org" xmlns="http://example.org"/> <e6 xmlns="" xmlns:a="http://www.w3.org"> <e7 xmlns="http://www.ietf.org"> <e8 xmlns="" xmlns:a="http://www.w3.org"> <e9 xmlns="" xmlns:a="http://www.ietf.org"/> </e8> </e7> </e6> </doc> |
<doc> <e1></e1> <e2></e2> <e3 id="elem3" name="elem3"></e3> <e4 id="elem4" name="elem4"></e4> <e5 xmlns="http://example.org" xmlns:a="http://www.w3.org" xmlns:b="http://www.ietf.org" attr="I'm" attr2="all" b:attr="sorted" a:attr="out"></e5> <e6 xmlns:a="http://www.w3.org"> <e7 xmlns="http://www.ietf.org"> <e8 xmlns=""> <e9 xmlns:a="http://www.ietf.org" attr="default"></e9> </e8> </e7> </e6> </doc> |
4 |
<?xml version="1.0"?> <!DOCTYPE doc [ <!ATTLIST normId id ID #IMPLIED> <!ATTLIST normNames attr NMTOKENS #IMPLIED> ]><!-- normNames and normID elements removed --> <doc> <text>First line
 Second line</text> <value>2</value> <compute><![CDATA[value>"0" && value<"10" ?"valid":"error"]]></compute> <compute expr='value>"0" && value<"10" ?"valid":"error"'>valid</compute> <norm attr=' '   
	 ' '/> </doc> |
<doc> <text>First line
 Second line</text> <value>2</value> <compute>value>"0" && value<"10" ?"valid":"error"</compute> <compute expr="value>"0" && value<"10" ?"valid":"error"">valid</compute> <norm attr=" ' 
	 ' "></norm> </doc> |
5 |
<!DOCTYPE doc [ <!ATTLIST doc attrExtEnt ENTITY #IMPLIED> <!ENTITY ent1 "Hello"> <!ENTITY ent2 SYSTEM "world.txt"> <!ENTITY entExt SYSTEM "earth.gif" NDATA gif> <!NOTATION gif SYSTEM "viewgif.exe"> ]> <doc attrExtEnt="entExt"> &ent1;, &ent2;! </doc> <!-- Let world.txt contain "world" (excluding the quotes) --> |
<doc attrExtEnt="entExt"> Hello, world! </doc> |
6 |
<?xml version="1.0" encoding="ISO-8859-1"?> <doc>©</doc> |
<doc>©</doc> |
7 |
<!DOCTYPE doc [ <!ATTLIST e2 xml:space (default|preserve) 'preserve'> <!ATTLIST e3 id ID #IMPLIED> ]> <doc xmlns="http://www.ietf.org" xmlns:w3c="http://www.w3.org"> <e1> <e2 xmlns=""> <e3 id="E3"/> </e2> </e1> </doc> |
<doc xmlns="http://www.ietf.org" xmlns:w3c="http://www.w3.org"> <e1> <e2 xmlns="" xml:space="preserve"> <e3 id="E3"></e3> </e2> </e1> </doc> |
To comment on this page, please send us a message.
This page last updated 17 June 2020.