>백엔드 개발 >XML/RSS 튜토리얼 >XML 및 스키마 네임스페이스의 특정 예제 코드 공유

XML 및 스키마 네임스페이스의 특정 예제 코드 공유

黄舟
黄舟원래의
2017-04-01 13:55:431963검색

위에서 언급한 XML과 Schema의 네임스페이스와 관련된 내용을 예시를 통해 자세히 소개합니다.

예시 1: 핵심 사항 네임스페이스 관련 개념 이해

다음 예는 "note.xsd"라는 XML 스키마 파일입니다.

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

아래의 XML 문서와 위에 제공된 문서입니다. "note.xml"이라는 XML 스키마와 연관되어 있으며 다음 논의에서는 이 두 문서에 중점을 둘 것입니다. "www.w3.org/2001/XMLSchema", 이 스키마가 사용됨을 나타냅니다. 요소와

데이터 유형

은 "www.w3.org/2001/에서 옵니다. XMLSchema" 네임스페이스("www.w3.org"에서 가져온 것으로 명시되어 있음). /2001/XMLSchema"네임스페이스 요소 및 데이터 유형은 "xsd: " 접두사. 네임스페이스 식별자(요소 또는 속성 에 대한 접두사로 선언에서)로 xsd 또는 xsi 없이 사용할 수도 있습니다. 이 xmlns 속성에는 요소, attribute, complexType, group, simpleType 등


모든 XML 스키마 정의 문서(XSD)에는 최상위 스키마(XSD) 요소가 있습니다. 정의에는 이 네임스페이스가 포함되어야 합니다. : www.w3.org/2001/XMLSchema. 즉, 이 네임스페이스는 XML 스키마 사양에 의해 정의된 표준 네임스페이스입니다. 모든 XML 스키마 요소는 이 네임스페이스에 속해야 합니다. targetNamespace=" www.w3schools.com"은 이 스키마를 나타냅니다. (note, to, from, Heading, body)로 정의된 요소는 "www.w3schools.com" 네임스페이스에서 나옵니다. targetNamespace 속성은 스키마에 해당하는 네임스페이스의 URI를 나타냅니다. 즉, 네임스페이스는 스키마를 참조하는 다른 문서(자체 문서 포함)에서 선언되어야 하며 해당 URI는 targetNamespace의 속성 값이어야 합니다. 예를 들어 여기서는 note.xsd에 의해 정의된 확장 데이터 유형을 사용해야 합니다(참고, to, from, header, body)이므로 네임스페이스 xmlns="www.w3schools.com"도 선언됩니다. 그리고 네임스페이스는 기본 네임스페이스입니다(접두사 없음). targetNamespace 특성은 스키마에서 명시적으로 생성된 모든 새 유형에 대한 XML 네임스페이스를 선언합니다.

이 스키마로 지정된 XML 문서 note.xml의 시작 부분이 어떻게 보이는지 살펴보겠습니다.

<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的命名空间的内容应该就明了了。



위 내용은 XML 및 스키마 네임스페이스의 특정 예제 코드 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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