>  기사  >  백엔드 개발  >  스키마 검증 XML 개념에 대한 예제 코드에 대한 자세한 설명

스키마 검증 XML 개념에 대한 예제 코드에 대한 자세한 설명

黄舟
黄舟원래의
2018-05-28 10:47:392160검색

1.스키마 파일 구조
스키마 파일은 여러 요소의 집합으로 구성되며 루트 요소는 "스키마"입니다. . "스키마" 요소는 XML 스키마에 나타나는 첫 번째 요소이며 XML 문서가 스키마 문서임을 나타내는 데 사용됩니다. 따라서 "스키마"의 종료 태그는 일반적으로 문서 끝에 있습니다. 이러한 방식으로 스키마의 구조는 다음과 같습니다.

<Schema name="schema-name" xmlns="namespace" >

</Schema>

스키마에는 두 가지 속성이 있습니다. name은 스키마의 이름을 지정하고 xmlns는 스키마에 포함된 네임스페이스 를 지정합니다. 개요. XML 스키마 문서에는 여러 네임스페이스가 포함될 수 있습니다. 예를 들어 다음 문은 세 개의 네임스페이스를 지정합니다.

<Schema name="mySchema" 
        xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes" xmlns:myNS=http://www.xml_step_by_step.edu\ns.xml
>

첫 번째는 xmlns="urn:schemas-microsoft-com:xml-data "입니다. 이 문서는 XML 스키마 문서입니다. 두 번째는 이 문서에서 사용할 수 있는 데이터 유형을 정의하는 xmlns:dt="urn:schemas-microsoft-com:datatypes"입니다. xmlns:myNS="http://www.xml_step_by_step.eduns.xml"이며, 이는 myNS에 정의된 요소나 속성이 아래에서 사용될 수 있음을 나타냅니다.
2.스키마를 사용하여 요소와 해당 내용 정의
ETD 정의에 해당하는 스키마의 다양한 정의 방법을 설명하기 전에 먼저 관련된 세 가지 스키마 요소인 ElementType, 요소, 그룹.
1.ElementType 요소
Schema 문서의 ElementType을 사용하여 XML 파일에 나타날 요소를 선언합니다.

<ElementType 
    name="元素名" 
    content="{ empty | textOnly | eltOnly | mixed }" 
    dt:type="元素类型" 
    order="{ one | seq | many }" 
    model="{ open | closed }" 
>

ElementType의 여러 속성 중 name의 의미는 자명하며, 선언된 요소의 이름이므로 반드시 필요합니다. content는 ElementType에 의해 선언된 요소가 비어 있는지, 텍스트가 포함되어 있는지, 하위 요소가 포함되어 있는지, 텍스트와 하위 요소가 모두 포함되어 있는지를 나타내는 ElementType의 중요한 속성입니다. dt:type요소의 데이터 유형을 지정합니다. order는 이 요소의 하위 요소에 대한 순서 규칙을 지정합니다. 마지막으로 model은 요소가 이 스키마에 정의되지 않은 요소와 속성을 포함할 수 있는지 여부를 지정합니다. 이는 주로 다른 스키마의 도입, 즉 다른 "네임스페이스"의 도입에 사용됩니다. "네임스페이스"라는 개념은 아직 낯설 수 있습니다. 이제 XML 파일에서 여러 가지 DTD 또는 스키마 정의를 동시에 사용할 수 있다는 점만 이해하면 됩니다.
다음 표에는 가능한 모델 값이 나열되어 있습니다.

取 值

释  意

open 表明该元素可以包含其它未在XML Schema中定义的元素和属性
closed 表明该元素只能包含在本XML Schema中定义过的元素和属性

설명

open 요소에 정의되지 않은 다른 요소가 포함될 수 있음을 나타냅니다. XML 스키마에 정의된 요소와 속성
closed 는 요소가 이 XML 스키마에 정의된 요소와 속성만 포함할 수 있습니다.

缺省状态下,XML Schema的model取值"open",也就是说,该元素可以包含其它未在XML Schema中定义的元素和属性。但是,这并不意味着任何元素和属性都可在Schema中出现,允许出现的前提是这些"异类"元素和属性必须在单独的XML Schema中加以定义,并且必须在引用的它们的元素中以命名空间形式指定其出处。
      2. element元素 
       ElementType只是起到声明元素的作用,至于元素的内容究竟是什么,则要靠它的子元素element来说明。element的语法表达如下:  

<element 
    type="元素类型" 
    [minOccurs="{ 0 | 1 }"] 
    [maxOccurs="{ 1 | * }"] 
>

element实际上是对该Schema中ElementType声明的引用,而具体引用什么元素类型,就要靠type属性指定了。type属性不可缺少,并且为了保证type指定的是已经声明过的元素,要求它的取值必须同某个ElementType中的name属性严格一致。至于其它两个属性倒是可有可无。minOccurs指定该元素在其父元素中出现的最小次数,缺省值为1,表明该元素至少出现一次;也可以取值为0,表明该元素是可选的,可以不出现。maxOccurs则指定了该元素出现的最大次数,缺省值同样为1,表明该元素至多出现一次;也可取值为“*”,表明该元素在XML实例文档中出现次数不受限制。

    3.group元素 
   DTD中有成组的概念,相应的,Schema中也有“group”元素。它的语法表达类似element元素:

<group
    order="{one | seq | many}" 
    [minOccurs="{ 0 | 1 }"] 
    [maxOccurs="{ 1 | * }"] 
>

스키마 검증 XML 개념에 대한 예제 코드에 대한 자세한 설명<AttributeType 和DTD的规定相同,组里的内容可以是元素,也可以是另一个子组。属性order指定该组中的元素或子组的顺序,minOccursmaxOccurs分别指定了该组在其父元素中出现的最小次数和最大次数。

4.用Schema定义元素属性   
    
Schema中用来定义属性的元素有两个,AttributeType元素是声明属性的,attribute元素则是说明一个元素中究竟包含那些属性。 
    AttributeType元素 
   AttributeType元素也是Schema中的重要元素之一,用于定义该Schema文档中出现的属性类型。AttributeType的语法表达如下:

  name="属性名" 
  dt:type="属性类型" 
  dt:values="枚举值列表" 
  default="缺省值" 
  required="{yes | no}" 
>
  1. name
    name不言而喻,自然是所声明的属性类型的名称。注意,该属性是必须的。

  2. dt:type
    dt:type指定所声明属性的数据类型,它除了支持DTD中包含的全部十大数据类型外,还支持一些扩展属性。Schema中的十个基本属性与DTD中属性的对应关系请见下表:

Schema中基本类型 DTD中数据类型
string #PCDATA
enumeration ENUMERATED
id ID
idref IDREF
idrefs IDREFS
nmtoken NMTOKEN
nmtokens NMTOKENS
entity ENTITY
entities EMTITIES
notation NOTATION

3.dt:value
dt:value는 dt:type이 "enumeration" 값을 사용하는 경우에만 유효합니다. 이때 dt:value는 가능한 모든 값을 나열해야 합니다.

4.default
default는 이 속성 유형의 기본값을 지정합니다. 예를 들어 dt:type이 "enumeration" 값을 사용하는 경우 기본값은 dt:value에 나열된 값에서 나와야 합니다.

5.required
required는 이 속성을 참조하는 요소에 이 속성이 필요한지 여부를 지정합니다. yes 값은 필수임을 나타내고, no 값은 필요하지 않음을 나타냅니다.

6. Attribute 요소
AttributeType과 attribute의 관계는 ElementType과 element의 관계와 동일하며, AttributeType은 속성을 선언하는 역할만 하며 실제로 지정할 필요는 없습니다. 요소에 어떤 속성이 있는지, 속성 요소에 의존해야 합니다.

위 내용은 스키마 검증 XML 개념에 대한 예제 코드에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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