国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

模式驗(yàn)證結(jié)構(gòu)-JAXP 1.3 的特性

2019-11-18 12:46:51
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  xml 處理的java API (JAXP) 1.3在Java 2 平臺(tái)里已經(jīng)首先引入了, 標(biāo)準(zhǔn)版(J2SE) 5.0 并且同樣也在目前已可使用的Java Web Services Developer Pack (Java WSDP)中 。 JAXP 1.3 新增了一個(gè)模式驗(yàn)證結(jié)構(gòu)(SVF), 也叫驗(yàn)證API, 它提供了依靠模式高效驗(yàn)證XML的高級(jí)能力。SVF同樣也提供了比JAXP 1.2中更高的執(zhí)行效率。
  
  在考察SVF之前, 我們看看早期的模式驗(yàn)證方法。以下的代碼片斷示范了SAX解析的方法:
  SAXParserFactory sf = SAXParserFactory.newInstance();
  sf.setNamespaceAware(true);
  sf.setValidating(true);
  SAXParser sp = sf.newSAXParser();
  sp.setPRoperty(
  SCHEMA_LANGUAGE, XMLConstants.W3C_XML_SCHEMA_NS_URI);
  sp.setProperty(SCHEMA_SOURCE, schema);  sp.parse(new File(xml), dh);
  
  基本的步驟是:
  
  1.創(chuàng)建一個(gè)SAXParserFactory 對(duì)象。
  
  2.配置SAXParserFactory對(duì)象來(lái)生成支持XML命名空間的分析程序, 以及需要解析的驗(yàn)證文檔。
  
  3.創(chuàng)建一個(gè)SAX 分析程序。
  
  4.設(shè)置SAX 分析程序?qū)傩缘哪J秸Z(yǔ)言和模式來(lái)源。在本例中為W3C XML模式。
  
  5.解析文件。
  
  注重,這個(gè)過(guò)程的耦合驗(yàn)證和XML處理。
  
  作為比較, SVF方法中, XML文件模式驗(yàn)證從XML 處理中分離出來(lái)。SVP方法的第一步是編譯模式:
  
  final String sl = XMLConstants.W3C_XML_SCHEMA_NS_URI;  SchemaFactory factory = SchemaFactory.newInstance(sl);  StreamSource ss = new StreamSource("mySchema.xsd");  Schema schema = factory.newSchema(ss);
  
  SchemaFactory是一個(gè)模式編譯器。它讀指定的模式, 根據(jù)指定的模式語(yǔ)言的約束來(lái)檢查模式語(yǔ)法和語(yǔ)義, 并且返回一個(gè)在內(nèi)存中不變的Schema對(duì)象。不可變意味著一旦創(chuàng)建了Schema對(duì)象約束設(shè)置就不可改變。一個(gè)應(yīng)用程序使用同一個(gè)Schema對(duì)象驗(yàn)證同樣的文件兩次也總會(huì)得到同樣的結(jié)果。
  
  然后,您使用模式驗(yàn)證一個(gè)XML文件。根據(jù)你的需要將有三個(gè)方法可供選擇:
  
  ·在DocumentBuilderFactory 或SAXParserFactory上設(shè)置了Schema實(shí)例
  
  ·創(chuàng)建一個(gè)Validator
  
  ·創(chuàng)建一個(gè)ValidatorHandler (驗(yàn)證SAX流)
  
  所有這三個(gè)方法都保證, XML文件只在從Schema實(shí)例中獲得的模式中有效。
  
  查看第一種方法, 在一個(gè)factory上設(shè)置Schema實(shí)例:
  
  SAXParserFactory spf = SAXParserFactory.newInstance();  spf.setSchema(schema);  SAXParser parser = spf.newSAXParser();  parser.parse(<XML DOCUMENT>);
  
  在這里, 同一個(gè)Schema實(shí)例傳輸?shù)剿械挠蒘AXParserFactory創(chuàng)建的SAXParser實(shí)例中。SAXParser對(duì)象解析XML 文件并且同時(shí)驗(yàn)證它所依靠的Schema實(shí)例。 由于SAXParser并不為需要解析的每個(gè)XML文件都反復(fù)裝載模式,這個(gè)方法可為整個(gè)模式處理提高相當(dāng)?shù)男省Ec前面的方法比較,前面需要為每個(gè)需要驗(yàn)證的XML文件重復(fù)的裝載指定的模式。
  
  在您裝載一個(gè)Schema對(duì)象到內(nèi)存以后, 您能采用第二個(gè)方法,通過(guò)Schema對(duì)象使用Validator 驗(yàn)證XML 文件。首先您從Schema對(duì)象中創(chuàng)建一個(gè)Validator 對(duì)象。 然后調(diào)用在Validator 對(duì)象中的validate() 方法來(lái)驗(yàn)證:
  
  Validator v = schema.newValidator();  v.validate(new StreamSource(xml));
  
  Validator對(duì)象接受java.xml.transform.Source作為輸入。 這意味著, 它可接受基于事件, SAX 源(SAXSource) 和基于對(duì)象, 文檔對(duì)象模型(DOM) 源(DOMSource) 。 接受DOMSource作為輸入, Validator能由指定的Schema對(duì)象驗(yàn)證一個(gè)在內(nèi)存中的DOM文件或節(jié)點(diǎn)。
  
  Validator v = schema.newValidator();  v.validate(new DOMSource(<DOM NODE>));
  
  假如要驗(yàn)證一個(gè)DOM 節(jié)點(diǎn)或指定的SAXSource,您也可考慮Validator方法。既使SAX 驅(qū)動(dòng)器的執(zhí)行是來(lái)自另外的一個(gè)供營(yíng)商這個(gè)方法仍然可以運(yùn)作。
  
  第三個(gè)方法是創(chuàng)建一個(gè)非凡設(shè)計(jì)的javax.xml.validation.ValidatorHandler來(lái)驗(yàn)證SAX 事件:
  
  SAXParserFactory spf = SAXParserFactory.newInstance();  spf.setNamespaceAware(true);  XMLReader reader = spf.newSAXParser().getXMLReader();  ValidatorHandler vh = schema.newValidatorHandler();  //key is to set "ValidatorHandler" as ContentHandler  //so that SAX event can be validated  reader.setContentHandler(vh);  reader.parse(xml);
  
  注重驗(yàn)證SAX事件, 您需要設(shè)置ValidatorHandler 為ContentHandler 。
  
  使用ValidatorHandler, 您也能利用模式驗(yàn)證一個(gè)JDOM 文件。 實(shí)際上, 任一個(gè)可在一個(gè)SAX流頂部建立或可產(chǎn)生SAX事件的對(duì)象模型(譬如XOM 和DOM4J)能由SVF利用一個(gè)模式來(lái)驗(yàn)證XML 文件。 這是可能的,因?yàn)閂alidationHandler 能驗(yàn)證一個(gè)SAX流。 以下代碼片斷說(shuō)明了一個(gè)JDOM文件是如何利用一個(gè)模式來(lái)驗(yàn)證的,假設(shè)你已經(jīng)獲取了前面例子中顯示的ValidatorHandler:
  
  SAXOutputter so = new SAXOutputter(vh);  so.output(jdomDocument);
  
  SAXOutputter 對(duì)象為JDOM 文件釋放SAX事件。 SAX 事件然后由ValidatorHandler驗(yàn)證。
  
  您能使用SVF做的其它事是, 譬如在轉(zhuǎn)換以后驗(yàn)證XML或獲得模式類(lèi)型信息。使用SVF的更多信息請(qǐng)參考:Easy and Efficient XML Processing: Upgrade to JAXP 1.3
  
  運(yùn)行例代碼
  
  范例程序包伴有本提示。 范例程序包中的代碼包括編碼實(shí)例和展示技術(shù)報(bào)道信息。在這個(gè)程序包里還有額外范例。 例如, 其中一個(gè)例子比較使用新的SVF模式驗(yàn)證性能和設(shè)置二個(gè)模式屬性的前面的方法。 其它范例顯示利用模式怎么驗(yàn)證Transformer的輸出。 安裝和運(yùn)行范例:
  
  1.下載sample file并解壓縮其內(nèi)容。你能在形如<install_dir>/ValidationFramework的目錄中看到解壓縮出來(lái)的目錄。例如,假如你解壓縮內(nèi)容到一臺(tái)Windows機(jī)器上的C:/中,你最近創(chuàng)造的目錄就應(yīng)該是C:/ValidationFramework 。解壓縮出來(lái)的內(nèi)容包括一個(gè)README文件,此文件中包括了運(yùn)行例子的介紹。你能使用在J2SE 5.0或者Java WSDP 1.6平臺(tái)上的JAXP 1.3來(lái)運(yùn)行例程序。你也能下載在java.net 上的JAXP 項(xiàng)目頁(yè)面中的standalone JAXP 1.3 implementation 。
  
  2.運(yùn)行ValidationFramework 目錄中的ant圖標(biāo)。要編譯使用如下的命令:
  ant compile
  
  反饋信息中,你會(huì)看到如下的內(nèi)容:
  Buildfile: build.xml
  
  init:
  
  [mkdir] Created dir: C:/ValidationFramework/build
  [mkdir] Created dir:
  C:/ValidationFramework/build/classes
  
  compile:
  
  [echo] C:/Program Files/Java/jdk1.5.0/jre
  ...
  
  BUILD SUCCESSFUL
  
  要運(yùn)行例子,利用適當(dāng)?shù)哪繕?biāo)來(lái)運(yùn)行ant命令,例如:
  ant ValidateSAXStream
  
  在反饋的信息中,你會(huì)看到如下的信息輸出:
  [java] startElement: personnel
  [java] startElement: person
  [java] startElement: name
  [java] startElement: family
  [java] characters: Boss
  [java] endElement: family
  ...
  
  [java] startElement: email
  [java] characters: five@foo.com
  [java] endElement: email
  [java] startElement: link
  [java] endElement: link
  [java] endElement: person
  [java] endElement: personnel
  
  BUILD SUCCESSFUL
  
  假如你在J2SE 5.0中運(yùn)行例子,不考慮JAXP jar的位置的'endorsed' 屬性。例如:
  ant -Dendorsed=/space/jaxp/jaxp-1_3/dist/ Validate

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 平阴县| 沙坪坝区| 淄博市| 滕州市| 新竹县| 建德市| 玉环县| 长泰县| 扎鲁特旗| 嵊州市| 巴林左旗| 孝昌县| 益阳市| 博白县| 寿宁县| 贵南县| 揭东县| 旌德县| 万荣县| 渭源县| 新巴尔虎右旗| 津市市| 如皋市| 江阴市| 屏南县| 玉山县| 新化县| 金沙县| 绥江县| 西充县| 罗平县| 济阳县| 北辰区| 边坝县| 商城县| 澜沧| 赤城县| 泰来县| 黔西| 克拉玛依市| 彭州市|