Heim >Backend-Entwicklung >XML/RSS-Tutorial >Kurzes XML-Tutorial (4)
Inhaltsverzeichnis
Entwicklungsgeschichte
XMLVergleich mit HTML Extensible
XML und HTML-Vergleichssyntaxdetails
XML-Validierungs-DTD
XMLSyntaxstruktur
XMLNamespace
DOM4JKonfigurationsdatei lesen und schreiben
Über SLT
Wie im vorherigen Tutorial erwähnt, besteht die größte Rolle von XML darin, Daten zu speichern, zu übertragen und auszutauschen. In dieser Zeit war die Korrektheit von XML von entscheidender Bedeutung und es wurden entsprechende Maßnahmen ergriffen, um die Korrektheit von XML sicherzustellen.
Die Korrektheit von XML gliedert sich in zwei Aspekte: Der eine ist die Syntax von XML und der andere der Inhalt von XML. Menschen bezeichnen XML mit korrekter Syntax als „wohlgeformtes“ XML. Bei einem wohlgeformten XML-Dokument können wir nur sicherstellen, dass das Format des Dokuments der XML-Spezifikation entspricht Keine Grammatikfehler, aber die Beziehung zwischen Elementen und ob die Werte der Attribute korrekt sind, kann nicht bekannt sein. Wenn ein wohlgeformtes Dokument nur in begrenzten Anwendungen verwendet wird, z. B. als Konfigurationsdatei in einem selbst entwickelten System oder zum Speichern und Übertragen von Daten, kann es möglicherweise unsere Anwendung gut erfüllen. Wenn Sie jedoch möchten, dass andere Benutzer Ihr XML-Dokument verstehen oder das System es verwenden oder einen Datenaustausch durchführen soll, müssen Sie sicherstellen, dass das XML „legal“ ist. Auf diese Weise ist es notwendig, einen XML-Überprüfungsmechanismus bereitzustellen. Der Zweck besteht darin, sicherzustellen, dass die Struktur des von uns geschriebenen XML-Dokuments und des von anderen geschriebenen XML-Dokuments identisch ist, dass die Beziehung zwischen den Elementen korrekt ist und dass die Die Werte der Attribute entsprechen den Anforderungen.
Dieser Mechanismus wurde für uns im XML-Standard bereitgestellt, der DTD (Document Type Definition), die wir zuvor erwähnt haben. Mit anderen Worten: Sie können über die DTD überprüfen, ob Ihr eigenes XML „legales“ XML ist.
Wir können DTD direkt im XML-Dokument definieren oder externe DTD-Dateien über URI einführen. Obwohl die interne DTD praktisch ist, erhöht sie aufgrund der Länge des Dokuments selbst den Übertragungsaufwand. Wenn mehrere XML-Dokumente eine DTD gemeinsam nutzen möchten, müssen wir die DTD zu jedem Dokument hinzufügen, was ziemlich umständlich ist. Daher besteht der empfohlene Ansatz darin, die DTD in einer separaten Datei zu definieren und über den URI im XML-Dokument auf die externe DTD-Datei zu verweisen.
Im Folgenden wird gezeigt, wie eine DTD-Datei verwendet wird, um die Legitimität einer XML-Datei zu überprüfen
test.xml-Dateicode
<?xml version="1.0" encoding="gb2312" standalone="no"?> <!DOCTYPE student SYSTEM "test.dtd"> <!--这是XML文档--> <student> <name>张三</name> <age>24</age> </student>
代码解析:在第二行中将外部的DTD文档引入,用于判断XML是否合法。其中用的路径为相对路径,网上很多XML中引入的DTD是一个URI,无论是相对还是绝对的路径,总之只要XML能找到其对应的DTD就是可行的。
test.dtd文件代码
<!ELEMENT student (name,age)> <!ELEMENT name (#PCDATA)> <!ELEMENT age (#PCDATA)> <!ATTLIST student sex (man | woman) 'man'>
代码解析:第一行至第三行定义了XML文件中的元素,以及元素之间的关系。在第四行定义了student属性中对sex的限制内容,其默认为man而且只能选取两个值man或者woman。
下面开始验证XML的合法性:
package ValidateXml; import java.io.FileNotFoundException; import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.xml.sax.InputSource; import org.xml.sax.SAXException; public class ValidateXMLDTD { public static void main(String[] args) { // test1XML(); test2XML(); } public static void test1XML() { try { InputSource ips=new InputSource(); ips.setSystemId("d:\\test.xml"); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setValidating(true); DocumentBuilder db = dbf.newDocumentBuilder(); db.parse(ips); System.out.println("xml 正确!"); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public static void test2XML() { try { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setValidating(true); DocumentBuilder db = dbf.newDocumentBuilder(); db.parse(new java.io.FileInputStream("d:\\test.xml")); System.out.println("xml 正确!"); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
代码解析:上面的代码验证XML是否为合法,需要注意的是不要直接将XML读入到输入流中,那样的话会找不到相对路径下的DTD,调用test2XML会报错如下,如果调用test1XML则会正确验证XML。
直接用输入流读入的话XML寻找相对路径会在eclipse的环境下进行寻找DTD,如果用setSystemId进行设置的话会根据XML自己存在的目录中寻找DTD(参看具体解释),很显然后一种方式才是我们想要的。
通过DTD我们可以很容易的判断要验证的XML是否符合我们所定义的规范(元素之间的关系,属性的取值是否正确)但是如果要验证元素的内容DTD就无能为力了,于是人们研究了新的验证方法——Schema。就像人们远行一样,当对时间要求不苛刻的时候,火车便宜而且安全;当对时间有严格要求的时候,飞机也是不错的选择。根据实际需要改进技术,根据实际需要选择技术。量体裁衣,明智之举。
以上就是XML简明教程(4) 的内容,更多相关内容请关注PHP中文网(www.php.cn)!