Maison  >  Article  >  développement back-end  >  Exemple spécifique de partage de code d'espaces de noms XML et Schema

Exemple spécifique de partage de code d'espaces de noms XML et Schema

黄舟
黄舟original
2017-04-01 13:55:431937parcourir

La cible XML et Schema mentionnée ci-dessus Certains contenus associés à l'espace de noms sont présentés en détail. Apprenons-en davantage à travers des exemples :

Exemple 1 : Points clés. pour comprendre les Concepts associés aux espaces de noms

L'exemple suivant est un fichier de schéma XML nommé "note.xsd"

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
elementFormDefault="qualified">
<xsd:element name="note">
      <xsd:complexType>
         <xsd:sequence>
           <xsd:element name="to" type="xs:string"/>
           <xsd:element name="from" type="xs:string"/>
           <xsd:element name="heading" type="xs:string"/>
           <xsd:element name="body" type="xs:string"/>
        </xsd:sequence>
      </xsd:complexType>
</xsd:element>
</xsd:schema>

Le document XML ci-dessous et ci-dessus Il est associé au schéma XML donné dans l'article, nommé "note.xml", et la discussion suivante se concentrera sur ces deux documents

                                                                    Le les éléments et les types de données utilisés dans ce schéma proviennent de l'espace de noms "www.w3.org/2001/XMLSchema

" (il indique également qu'ils proviennent de "
<?xml version="1.0"?>
<note xmlns="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3schools.com note.xsd">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don&#39;t forget me this weekend!</body>
</note>
www") .w3.org/2001/XMLSchema

"Les éléments d'espace de noms et les types de données doivent être utilisés avec "xsd : " préfixe. En tant qu'identifiant d'espace de noms (dans une déclaration en tant que préfixe d'un élément ou d'un
attribut ), vous pouvez également l'utiliser sans xsd ou xsi. Cet attribut xmlns contient des éléments de schéma XML de base, tels que element, attribut, complexType, group, simpleType, etc. Pour tout document de définition de schéma XML (XSD), il existe un élément de schéma de niveau supérieur (XSD). La définition doit inclure cet espace de noms. : www.w3.org/2001/XMLSchema Autrement dit, cet espace de noms est l'espace de noms standard défini par la spécification XML Schema - tous les éléments XML Schema doivent appartenir à cet espace de noms > Ce fragment : targetNamespace=". www.w3schools.com" indique ce schéma Les éléments définis par (note, to, from, head, body) proviennent de l'espace de noms "www.w3schools.com". L'attribut targetNamespace représente l'URI de l'espace de noms correspondant au schéma. C'est-à-dire que l'espace de noms doit être déclaré dans d'autres

documents (y compris son propre document) qui font référence au

schéma, et son URI doit être la valeur d'attribut de targetNamespace. Par exemple, nous devons ici utiliser le type de données étendu défini par note.xsd (remarque, to, from, head, body), donc l'espace de noms xmlns="www.w3schools.com" est également déclaré. Et cet espace de noms est l'espace de noms par défaut (pas de préfixe). L'attribut targetNamespace déclare un espace de noms XML pour tous les nouveaux types explicitement créés dans le schéma.
Regardons à quoi ressemblera le début du document XML note.xml spécifié par ce schéma :

<note xmlns="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3schools.com note.xsd">

     其中缺省名称空间声明xmlns="www.w3schools.com"就是和刚刚声明的XML Schema的名称空间相结合来规定该XML文档。(即该文档用到了此名称空间中定义的数据) xmlns:xsi="www.w3.org/2001/XMLSchema-instance" 是任何XML实例文档固有的XML模式实例名称空间,它由XML模式规范定义。而xsi:schemaLocation="www.w3schools.com note.xsd"则规定了该名称空间所对应的schema的位置,即在相同路径的note.xsd文件。

     例二:重点理解Schema文档使用自身定义类型

     xsd文件中定义了一个targetNameSpace后,其内部定义的元素,属性,类型等都属于该targetNameSpace,其自身或外部xsd文件使用这些元素,属性等都必须从定义的targetNameSpace中找。修改一下note.xsd,去除默认名称空间的声明,并添加一个复杂类型:

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
elementFormDefault="qualified">
<xsd:element name="note">
      <xsd:complexType>
        <xsd:sequence>
       <xsd:element name="to" type="xs:string"/>
       <xsd:element name="from" type="xs:string"/>
<xsd:element name="heading" type="xs:string"/>
       <xsd:element name="body" type="xs:string"/>
       </xsd:sequence>
      </xsd:complexType>
</xsd:element>
<xsd:element name="Student" type="stu"/> 
  <xsd:complexType name="stu"> 
  <xsd:sequence> 
   <xsd:element name="Name" type="xs:string"/> 
   <xsd:element name="Class" type="xs:string"/> 
  </xsd:sequence> 
 </xsd:complexType> 
</xsd:schema>

        上述代码中,复杂类型stu是找不到的,因为你定义了一个名称空间"www.w3schools.com",该复杂类型存在于"www.w3schools.com"中,因此应该修改代码如下:

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns:student="http://www.w3schools.com"
elementFormDefault="qualified">
<xsd:element name="note">
      <xsd:complexType>
        <xsd:sequence>
       <xsd:element name="to" type="xs:string"/>
       <xsd:element name="from" type="xs:string"/>
<xsd:element name="heading" type="xs:string"/>
       <xsd:element name="body" type="xs:string"/>
       </xsd:sequence>
      </xsd:complexType>
</xsd:element>
<xsd:element name="Student" type="student:stu"/> 
  <xsd:complexType name="stu"> 
  <xsd:sequence> 
   <xsd:element name="Name" type="xs:string"/> 
   <xsd:element name="Class" type="xs:string"/> 
  </xsd:sequence> 
 </xsd:complexType> 
</xsd:schema>

        若自身并不使用重用组件,仅供外部使用的话,则只定义targetNameSpace就可以,不用指定别名。
        通过上面的例子,我们可以很深刻的理解targetNameSpace。targetNamespace定义了Schema定义的新元素与属性的名称空间。而"www.w3.org/2001/XMLSchema"名称空间则定义了element, attribute, complexType, group, simpleType等元素。

    理解了上面的两个例子,Schema的命名空间的内容应该就明了了。



Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

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