Maison  >  Article  >  développement back-end  >  Tutoriel concis XML (7)

Tutoriel concis XML (7)

黄舟
黄舟original
2017-02-18 15:39:281639parcourir

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

XMLEspace de noms

XMLStructure syntaxique

Schéma de validation XML

DOM4JLire et écrire le fichier de configuration

À propos de SLT

Schéma de validation XML



Comme mentionné dans l'article précédent Oui, via DTD nous pouvons facilement juger si le XML à vérifier est conforme aux spécifications que nous avons définies (la relation entre les éléments, si les valeurs des attributs sont correctes), mais si nous voulons vérifier le contenu des éléments, DTD est impuissant, donc les gens étudient Une nouvelle méthode de vérification - Schema.

En plus des avantages ci-dessus, Schema est encore plus impressionnant que DTD Ce qui est excitant, c'est qu'il s'agit en soi d'un document XML bien formé, donc écrire un Schéma est très simple. Par rapport à , qui a sa propre syntaxe indépendante , la DTD est très difficile à écrire et à maintenir.

Un fichier Schéma est un fichier XML, donc le XML correspondant au SchémaLe processus consiste à écrire XML contre XML Dans ce cas, il est très simple d'écrire Schema. Ce qui suit montre comment écrire le schéma correspondant selon XML

Fichier XML original (test2.xml)

Pour ce

XML ci-dessus, nous commençons à créer un

Schéma
<?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>

. Le principe à suivre est de savoir comment écrire le

XML

original puis décrire le

Schéma

correspondant comme si vous étiez face à face avec un personne. La description est la même. Le code schéma est le suivant (shiporder.xsd)

Analyse du code :

La première ligne est entièrement XML

La déclaration n’a pas besoin d’être davantage développée.
 <?xml version="1.0"encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="shiporder">
 <xs:complexType>
  <xs:sequence>
   <xs:element name="orderperson"type="xs:string"/>
   <xs:element name="shipto">
    <xs:complexType>
     <xs:sequence>
      <xs:elementname="name" type="xs:string"/>
      <xs:elementname="address" type="xs:string"/>
      <xs:elementname="city" type="xs:string"/>
      <xs:elementname="country" type="xs:string"/>
     </xs:sequence>
    </xs:complexType>
   </xs:element>
   <xs:element name="item"maxOccurs="unbounded">
    <xs:complexType>
     <xs:sequence>
      <xs:elementname="title" type="xs:string"/>
      <xs:elementname="note" type="xs:string" minOccurs="0"/>
      <xs:elementname="quantity" type="xs:positiveInteger"/>
      <xs:element name="price"type="xs:decimal"/>
     </xs:sequence>
    </xs:complexType>
   </xs:element>
  </xs:sequence>
  <xs:attribute name="orderid"type="xs:string" use="required"/>
 </xs:complexType>
</xs:element>
 
</xs:schema>


La deuxième ligne est ceci

XML (

Schéma

lui-même est un XML) définit un espace de noms.

À partir de la quatrième ligne, voici quelques exigences pour le 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)!


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:Tutoriel concis XML (6)Article suivant:Tutoriel concis XML (6)