2009年1月15日木曜日

NSXMLDocumentをXHTML+SVGをXSDでValidateしてみる

  NSError *err=nil;

NSString *xmlPath= @"/path/to/xhtml_svg.xml";
NSXMLDocument *xmlDoc = [[NSXMLDocument alloc] initWithContentsOfURL:[NSURL fileURLWithPath:xmlPath]
options:(NSXMLDocumentValidate)
error:&err];
if (err) {
NSLog(@"ERROR:\t%@", err);
if (!xmlDoc) return 1;
}

NSLog(@"%@", [xmlDoc XMLString]);


xhtml_svg.xml
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml"
schemaLocation=
"http://www.w3.org/1999/xhtml xhtml.xsd
http://www.w3.org/2000/svg svg.xsd"
>
<head><title/></head>
<body>
<h1>XHTML にインラインで埋め込まれた SVG</h1>
<svg xmlns="http://www.w3.org/2000/svg" width="300px" height="200px">
<circle cx="150" cy="100" r="50" fill="#ff0000"/>
</svg>
</body>
</html>



NVDL的なValidateなのかしら?これで通ったw.
と思ったら
<svg xmlns="http://www.w3.org/2000/xsvg" width="300px" height="200px">

とか
<svg xmlns="http://www.w3.org/2000/svg" xwidth="300px" height="200px">

とか
<svg xmlns="http://www.w3.org/2000/svg" xwidth="300xpx" height="200px">

とかERRORにならない.
(javaならERRORとなる.)
さすがに要素名はわかるみたい.
<xsvg xmlns="http://www.w3.org/2000/svg" xwidth="300xpx" height="200px">

結果:
ERROR: Error Domain=NSXMLParserErrorDomain Code=76 UserInfo=0x11aa60 "Line 10: Opening and ending tag mismatch: xsvg line 0 and svg
Line 10: Opening and ending tag mismatch: xsvg line 0 and svg


ちなみに
xhtml_svg.xml - 2
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml"
schemaLocation=
"http://www.w3.org/1999/xhtml xhtml_svg.xsd"
>
<head><title/></head>
<body>
<h1>XHTML にインラインで埋め込まれた SVG</h1>
<svg xmlns="http://www.w3.org/2000/svg" width="300px" height="200px">
<circle cx="150" cy="100" r="50" fill="#ff0000"/>
</svg>
</body>
</html>


としても通るけど,やっぱり上のERROR対象はみつけられない.

ということでこのValidateはおおまかにしか利用しない方が良いのかしら.(まったく役に立たないわけではない).

.xsdファイルは以前のエントリ(1, 2)を参照してください.

問題等ございましたらコメントいただければ幸いです.

0 件のコメント: