목차
개발 내역
XML비교 HTML 확장 가능
XML 및 HTML 비교 구문 세부 정보
XML 유효성 검사 DTD
XML네임스페이스
XML구문 구조
XML 검증을 위한 스키마
DOM4J구성 파일 읽기 및 쓰기
SLT 정보
이전 기사에서 언급했듯이 예, DTD 검증할 XML이 우리가 정의한 사양(요소 간의 관계, 속성 값이 올바른지 여부)과 일치하는지 쉽게 판단할 수 있지만, 요소의 내용을 검증하려는 경우 DTD는 무력합니다. 그래서 사람들은 새로운 검증 방법인 스키마를 연구합니다.
위의 장점 외에도 스키마는 DTD보다 훨씬 인상적입니다. 흥미로운 점은 그 자체가 잘 구성된 XML 문서이므로 스키마 작성이 매우 쉽다는 점입니다. 독자적인 구문 을 갖는 에 비해 DTD 는 작성 및 유지 관리가 매우 어렵습니다.
스키마 파일은 XML 파일이므로 작성된 XML은 스키마에 해당합니다. 🎜 >XML을 XML에 대해 작성하는 과정입니다. 이 경우 Schema를 작성하는 것은 매우 쉽습니다. 다음은 XML
원본 XML 파일(test2.xml)에 따라 해당 Schema를 작성하는 방법을 보여줍니다.
아아앙
위의 경우 XML 다음으로 스키마 생성을 시작합니다. 따라야 할 원칙은 원본 XML을 작성한 후 해당 스키마를 기술하는 것입니다. 사람. 설명은 동일합니다.
스키마 코드는 다음과 같습니다(shiporder.xsd)
<?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>
코드 분석:
첫 번째 줄은 모두 XML 이 진술에는 자세한 설명이 필요하지 않습니다.
두 번째 줄은 XML입니다. (Schema 자체는 XML)은 네임스페이스를 정의합니다.
네 번째 줄부터 원본 XML에 대한 몇 가지 요구 사항이 있습니다.
首先定义了根元素为shiporder(行4),其次因为shiporder元素有一个属性,其中包含其他的元素所以其为复合类型(行5)。然后通过sequence元素按照顺序包围其子元素(行10---行15),描述元素的名称以及元素的类型(行11----行14),如果需要描述元素的限制条件(行22)。描述根元素的属性,由于是必选属性所以选择required关键字,需要注意的是这个属性必须放在最后(行29)
通过Schema验证XML的代码和前面文章中的DTD验证大同小异,代码如下:
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); } }
如果原XML文件符合Schema文件中的描述则返回true;否则抛出异常进行描述哪里不符合,并且返回false。(具体的操作可在实际工程中自行定制,这里只是进行简单的描述)
以上就是XML简明教程(7) 的内容,更多相关内容请关注PHP中文网(www.php.cn)!