目次
開発履歴
XMLと拡張可能なHTMLの比較
XMLと構文詳細のHTML比較
XML 検証 DTD
XML
XML 検証スキーマ
前回の記事で述べたように、検証対象の XML が定義した仕様(要素間の関係、しかし、要素の内容を検証したい場合、DTD は無力であるため、人々は新しい検証方法であるスキーマを研究しました。
上記の利点に加えて、スキーマ
はDTDよりも優れています
それ自体が整形式のを書くことができるということですとても簡単です。独自の独立した構文
DTD
と比較すると、記述と保守が非常に困難です。スキーマファイルはXMLファイルなので、XMLに対応するXMLを記述するプロセスは、このようにXMLに対してXMLを記述することになります。とても簡単です。以下は、XML に基づいて対応するスキーマを記述する方法を示しています元の XML ファイル (test2.xml) 上記のXMLのために、スキーマの作成を始めましょう。従うべき原則は、人と対面して説明するのと同じように、元のXMLを記述し、対応するスキーマを記述する方法です。 スキーマコードは次のとおりです(shiporder。XML のステートメントは詳しく説明する必要はありません。 2行目は、この XML Schema自体は です)。 4 行目から始まるのは、元の のいくつかの要件です: 首先定义了根元素为shiporder(行4),其次因为shiporder元素有一个属性,其中包含其他的元素所以其为复合类型(行5)。然后通过sequence元素按照顺序包围其子元素(行10---行15),描述元素的名称以及元素的类型(行11----行14),如果需要描述元素的限制条件(行22)。描述根元素的属性,由于是必选属性所以选择required关键字,需要注意的是这个属性必须放在最后(行29) 通过Schema验证XML的代码和前面文章中的DTD验证大同小异,代码如下:
如果原XML文件符合Schema文件中的描述则返回true;否则抛出异常进行描述哪里不符合,并且返回false。(具体的操作可在实际工程中自行定制,这里只是进行简单的描述)
以上就是XML简明教程(7) 的内容,更多相关内容请关注PHP中文网(www.php.cn)!<?xml version="1.0"encoding="ISO-8859-1"?>
<shiporder orderid="889923"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="shiporder.xsd">
<orderperson>George Bush</orderperson>
<shipto>
<name>John Adams</name>
<address>Oxford Street</address>
<city>London</city>
<country>UK</country>
</shipto>
<item>
<title>Empire Burlesque</title>
<note>Special Edition</note>
<quantity>1</quantity>
<price>10.90</price>
</item>
<item>
<title>Hide your heart</title>
<quantity>1</quantity>
<price>9.90</price>
</item>
</shiporder>
package ValidateXml;
import java.io.File;
import java.io.IOException;
import javax.xml.XMLConstants;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;
import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXException;
importcom.sun.org.apache.xml.internal.utils.DefaultErrorHandler;
public class XmlValidator
{
private String xsdFilePath;
public XmlValidator(String xsdFilePath)
{
this.xsdFilePath =xsdFilePath;
}
public String validata(String xmlFilePath,ErrorHandler errorHandler)
{
String msg = null;
SchemaFactoryfactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
try
{
Schema schema = factory.newSchema(new File(xsdFilePath));
Validator validator = schema.newValidator();
validator.setErrorHandler(errorHandler);
validator.validate(new StreamSource(new File(xmlFilePath)));
}
catch (SAXExceptione)
{
msg = e.getMessage();
e.printStackTrace();
}
catch (IOExceptione)
{
msg = e.getMessage();
e.printStackTrace();
}
return msg;
}
public static void main(String[] args)
{
String xmlFilePath ="d://test2.xml";
String xsdFilePath ="d://shiporder.xsd";
XmlValidator my =new XmlValidator(xsdFilePath);
String msg =my.validata(xmlFilePath, new DefaultErrorHandler());
System.out.println(msg == null);
}
}