Introduction détaillée aux espaces de noms XML et Schema

黄舟
Libérer: 2017-04-01 13:51:25
original
1755 Les gens l'ont consulté

XML et Schema ont les caractéristiques d'être indépendants de la plate-forme, du fournisseur de technologie, simples et unifiés dans leurs spécifications. Ils sont extrêmement ouverts, ils sont donc largement utilisés et faciles à utiliser. . En XML, schéma et personnel Une chose que je pense difficile à comprendre est le espace de noms . problème, qui est détaillé dans ce blog Comprendre.

L'espace de noms est un élément de dénomination unifié fourni par la norme de recommandation du W3C. et Mécanisme pour les attributs Utilisez des espaces de noms pour identifier et combiner sans ambiguïté des éléments et des attributs de différents vocabulaires de balisage dans des documents XML, en évitant les conflits de noms 🎜>
Les personnes qui ont utilisé
DTD<.> Il faut savoir que les conflits de noms sont un problème majeur en DTD, et l'introduction du concept d'espace de noms dans Schema résout très bien ce problème :

. 1. Déclarer l'espace de noms

La forme générale d'une déclaration d'espace de noms est : la première partie est un mot clé xmlns :, la deuxième partie est le préfixe de l'espace de noms, la troisième partie est un signe égal, la quatrième partie est constituée de guillemets doubles et la cinquième partie est L'URI de l'identifiant de l'espace de noms est inclus. Il convient de noter que le préfixe de l'espace de noms ne peut pas être XML. , car cette chaîne

est réservée à des fins spéciales en XML. Exemple :


. Vous pouvez également déclarer l'espace de noms implicitement, c'est-à-dire omettre les deux points et le préfixe de l'espace de noms. Exemple :

xmlns:tns="http://www.whtest.com/"    
//其中tns为前缀。
Copier après la connexion


.

xmlns="http://www.whtest.com/"   //注意在一个文档中只能有一个隐式声明的命名空间
Copier après la connexion

2.
Espace de noms dans le schéma :

(1)Composants globaux dans le schéma

Les composants globaux font référence aux nœuds enfants directs de l'élément xsd:schema, y ​​compris les déclarations d'éléments, les déclarations d'attributs, les définitions de types complexes/simples, les définitions de groupes et les définitions de groupes d'attributs. >

(2)
Composants non globaux dans le schéma

Parfois, vous souhaitez définir des composants non globaux dans l'espace cible, vous pouvez utiliser la méthode suivante >

<?xml version=”1.0”>
<xsd:schema xmlns:xsd=”http://www.w3.org/XML_Schema”
targetNamespace=“http://www.test.com/ns/ns_test“>
   // Schema的目标名称空间用属性targetNamespace在根元素上定义。
   //Schema的全局成分被放在名称空间http://www.test.com/ns/ns_test里。
Copier après la connexion

<🎜. >

La valeur par défaut de l'attribut elementFormDefault n'est pas qualifiée, ce qui signifie que seuls les composants globaux sont définis dans l'espace de noms cible. Attribuez la valeur de elementFormDefault à qualifié afin que l'espace de noms cible contienne des définitions d'éléments non globales. De même, l'attribution de la valeur d'attributFormDefault à qualifié fait que l'espace de noms cible contient des définitions d'attribut non

globales. Comme suit :

Vous pouvez également modifier la valeur de la forme de l'attribut afin que certains composants non globaux ne soient pas inclus dans l'espace de noms. . Comme suit :

<?xml version=”1.0”>
<xsd:schema xmlns:xsd=”http://www.w3.org/XML_Schema”
targetNamespace=“http://www.test.com/ns/ns_test“
elementFormDefault=“qualified“>
Copier après la connexion

<xsd:element name=”name” type=”xsd:string” form=”unqualified”/>
Copier après la connexion

(3)targetNamespace

xsd文件中定义了一个targetNameSpace后,其内部定义的元素,属性,类型等都属于该targetNameSpace,其自身或外部xsd文件使用这些元素,属性等都必须从定义的targetNameSpace中找。

targetNamespace定义了Schema定义的新元素与属性的名称空间。而"www.w3.org/2001/XMLSchema"名称空间则定义了element, attribute, complexType, group, simpleType等元素。

若自身并不使用重用组件,仅供外部使用的话,则只定义targetNameSpace就可以,不用指定别名。

3、XML文档中命名空间

在XML中,名称空间的使用涉及范畴的概念,范畴即名称空间的覆盖范围,它指的是哪些元素和属性在该名称空间中,哪些不在该名称空间中。名称空间既可以限定整个XML文档,也可以只针对XML文档中的一部分。

(1).名称空间限定整个XML文档

<?xml version=”1.0”?>
<member_details xmlns=”http://www.testns.com/ns.xsd”>
   <name>Tom</name>
   <age>12</age>
   <sex>male</sex>
</member_details>
Copier après la connexion

(2)名称空间只针对XML文档中的一部分

<?xml version=”1.0”?>
<member_details>
   <name xmlns=”http://www.testns.com/ns.xsd”>Tom</name>
   <age>12</age>
   <sex>male</sex>
</member_details>
Copier après la connexion

(3)嵌套的命名空间

<?xml version=”1.0”?>
<member_details xmlns=”http://www.testns.com/ns.xsd”
xmlns:newns=”http://www.testns/newns.xsd”>
   <name>Tom</name>
   <age>12</age>
   <newns:sex>male</sex>
</member_details>
// 此例中,除了元素sex被定义在新的名称空间中外,其余的元素仍然使用原来的名称空间。
Copier après la connexion

(4)schemaLocation

schemaLocation 属性引用具有目标名称空间的 XML 架构文档(.xsd)。该xml文件中用到的所有新创的元素、属性等的.xsd文件都必须在这里声明。

<xsi:schemaLocation="list of anyURI" >
Copier après la connexion

其中的anyURI是一个架构位置,该架构包含限定的(具有名称空间的架构)架构构造。每一对中的第一个 URI 引用是名称空间名称,第二个则是描述名称空间的架构的位置。

将具有目标名称空间的架构文档与实例文档相关联。可以列出多对 URI 引用,每一对都有不同的名称空间名称部分。
根据万维网联合会 (W3C) XML 架构建议,XML 实例文档可以同时指定 xsi:schemaLocation 和 xsi:noNamespaceSchemaLocation 属性。此外,还可以多次列出同一个命名空间。

以下示例显示如何使用 xsi:schemaLocation 属性为多个 XML 架构文档提供位置信息。

<p:Person
   xmlns:p="http://contoso.com/People"
   xmlns:v="http://contoso.com /Vehicles"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation=
     "http://contoso.com/People 
      http://contoso.com/schemas/people.xsd 
      http://contoso.com/schemas/Vehicles
      http://contoso.com/schemas/vehicles.xsd
      http://contoso.com/schemas/People
      http://contoso.com/schemas/people.xsd">
   <name>John</name>
   <age>28</age>
   <height>59</height>
   ....
</p:Person>
Copier après la connexion

(5)noNamespaceSchemaLocation

noNamespaceSchemaLocation 属性引用没有目标名称空间的 XML 架构文档。

    <xsi:noNamespaceSchemaLocation="anyURI" >
Copier après la connexion

与SchemaLocation相同anyURI是一个架构位置,该架构包含非限定的(没有名称空间的架构)架构构造。

不要求 XML 架构有名称空间。若要为没有目标名称空间的 XML 架构指定位置,请使用 noNamespaceSchemaLocation 属性。此属性中引用的 XML 架构不能有目标名称空间。因为此属性不接受 URL 列表,所以只能指定一个架构位置。
根据万维网联合会 (W3C) XML 架构建议,XML 实例文档可以同时指定 xsi:schemaLocation 和 xsi:noNamespaceSchemaLocation 属性。

以下示例显示如何对包含非限定元素的实例文档使用 xsi:noNamespaceSchemaLocation 属性。

<?xml version="1.0" encoding="UTF-8"?>
<book:books xmlns:book="http://www.example.org/02"
	  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	  xsi:noNamespaceSchemaLocation="02.xsd">
	<book:book id="1">
		<book:title>Java in action</book:title>
		<book:content>Java is good</book:content>
		<book:author>Bruce</book:author>
	</book:book>
</book:books>
Copier après la connexion


     通过上边的分析,我们可以看到,XML和Schema的命名空间标签使用格式是相同的(这也是Schema相对与DTD的优势),但XML和Schema都有各自的独特的属性,这也是由他们不同的功能决定的,Schema主要给XML提供服务,所以会规定好targetNameSpace来声明命名空间的名字,而XML需要使用schema的服务,所以需要SchemaLocation来声明使用的命名空间。

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal