>  기사  >  백엔드 개발  >  XML 및 스키마 네임스페이스에 대한 자세한 소개

XML 및 스키마 네임스페이스에 대한 자세한 소개

黄舟
黄舟원래의
2017-04-01 13:51:251710검색

XML과 스키마는 플랫폼 독립적, 기술 공급업체 독립적, 단순성, 사양 통일성이라는 특징을 갖고 있으며 매우 개방적이어서 널리 사용되고 사용하기 쉽습니다. . XML, 스키마 및 개인에서 이해하기 어려운 것 중 하나는 네임스페이스 입니다.

네임스페이스는 W3C 권장 표준에서 제공하는 통합 명명 요소입니다. 및 속성 메커니즘 . 이름 충돌을 피하면서 XML 문서의 다양한 마크업 어휘의 요소와 속성을 명확하게 식별하고 결합하려면 DTD는 이름 충돌이 DTD의 주요 문제라는 점을 알아야 하며, 스키마에 네임스페이스 개념을 도입하면 이 문제가 매우 잘 해결됩니다.

1. 네임스페이스 선언

네임스페이스 선언의 일반적인 형식은 다음과 같습니다. 첫 번째 부분은 키워드 xmlns입니다. 두 번째 부분은 네임스페이스의 접두사, 세 번째 부분은 등호, 네 번째 부분은 큰따옴표, 다섯 번째 부분은 네임스페이스 식별자 URI가 포함될 수 없다는 점에 유의해야 합니다. , 이 문자열 은 XML에서 특별한 목적으로 예약되어 있기 때문입니다. 예:

xmlns:tns="http://www.whtest.com/"    
//其中tns为前缀。
또한 암시적으로 네임스페이스를 선언합니다. 즉, 콜론과 네임스페이스 접두사를 생략합니다. 예:

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

2. 스키마 네임스페이스 위치:

(1) 스키마

의 전역 구성 요소는 xsd 요소의 직접 하위 노드를 참조합니다. 요소 선언, 속성 선언, 복합/단순 유형 정의, 그룹 정의 및 속성 그룹 정의를 포함한 스키마. >
<?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里。

(2)

스키마의 비전역 구성 요소
때로는 비전역 구성 요소를 정의하고 싶을 때가 있습니다. 대상 공간에서 다음 방법을 사용할 수 있습니다

<?xml version=”1.0”>
<xsd:schema xmlns:xsd=”http://www.w3.org/XML_Schema”
targetNamespace=“http://www.test.com/ns/ns_test“
elementFormDefault=“qualified“>
elementFormDefault 속성의 기본값은 unqualified입니다. 이는 공백의 대상 이름에 전역 구성 요소만 정의된다는 의미입니다. 대상 네임스페이스에 비전역 요소 정의가 포함되도록 elementFormDefault 값을qualified에 할당합니다. 마찬가지로, attributeFormDefault 값을qualified에 할당하면 대상 네임스페이스에 비전역 특성

정의가 포함됩니다. 다음과 같습니다.

<?xml version=”1.0”>
<xsd:schema xmlns:xsd=”http://www.w3.org/XML_Schema”
targetNamespace=“http://www.test.com/ns/ns_test“
attributeFormDefault=“qualified“>

일부 비전역 구성 요소가 네임스페이스에 포함되지 않도록 특성 양식의 값을 수정할 수도 있습니다. 다음과 같습니다.

<xsd:element name=”name” type=”xsd:string” form=”unqualified”/>

     (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>

     (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>

     (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被定义在新的名称空间中外,其余的元素仍然使用原来的名称空间。

     (4)schemaLocation

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

<xsi:schemaLocation="list of anyURI" >

    其中的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>

   (5)noNamespaceSchemaLocation 

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

    <xsi:noNamespaceSchemaLocation="anyURI" >

与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>


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

위 내용은 XML 및 스키마 네임스페이스에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.