Table des matières
Historique du développement
XMLComparaison avec HTML Extensible
XML et détails de la syntaxe de comparaison HTML
DTD de validation XML
XMLStructure syntaxique
XMLEspace de noms
DOM4JLire et écrire le fichier de configuration
À propos de SLT
Comme mentionné dans le tutoriel précédent, le rôle le plus important de XML est de stocker, transmettre et échanger des données. Durant cette période, l'exactitude de XML était cruciale et des mesures correspondantes ont été prises pour garantir l'exactitude de XML.
L'exactitude de XML est divisée en deux aspects : l'un est la syntaxe de XML et l'autre est le contenu de XML. Les gens qualifient le XML avec une syntaxe correcte de XML « bien formé ». Pour un document XML bien formé, nous pouvons seulement garantir que le format du document est conforme à la spécification XML. pas d'erreurs grammaticales, mais la relation entre les éléments et si les valeurs des attributs sont correctes ne peuvent pas être connues. Pour un document bien formé, s'il n'est utilisé que dans des applications limitées, comme comme fichier de configuration dans un système auto-développé, ou comme stockage et transmission de données, il peut bien répondre à notre application. Mais si vous souhaitez que d'autres utilisateurs comprennent ou que le système utilise votre document XML, ou échange des données, vous devez alors vous assurer que le XML est « légal ». De cette manière, il est nécessaire de fournir un mécanisme de vérification XML. Le but est de garantir que la structure du document XML que nous écrivons et celle du document XML écrit par d'autres sont les mêmes, que la relation entre les éléments est correcte et que le document XML écrit par d'autres est identique. les valeurs des attributs sont correctes.
Ce mécanisme nous a été fourni dans le standard XML, qui est la DTD (Document Type Definition) dont nous avons parlé plus tôt. En d’autres termes, vous pouvez vérifier si votre propre XML est un XML « légal » via DTD.
Nous pouvons définir la DTD directement dans le document XML, ou introduire des fichiers DTD externes via l'URI. Bien que la DTD interne soit pratique, elle augmentera la charge de transmission en raison de la longueur du document lui-même, et si plusieurs documents XML souhaitent partager une DTD, nous devons ajouter la DTD à chaque document, ce qui est assez fastidieux. Par conséquent, l'approche recommandée consiste à définir la DTD dans un fichier séparé et à référencer le fichier DTD externe via l'URI dans le document XML.
Ce qui suit montre comment utiliser un fichier DTD pour vérifier la légitimité d'un fichier XML
code de fichier test.xml
<?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)!