XML 이름 공간

XML 이름 공간은 XML 문서에서 요소 유형 및 속성 이름으로 사용되는 이름 콜렉션으로서, URI 참조로 식별됩니다.

XML 이름 공간은 W3C 권장사항에서 정의되었으며, 1999년 1월 14일 제정되어, XML의 이름 공간이라 칭합니다. XML 태그 이름은 전체적으로 고유하고 단순해야 하며 이는 성능상의 이유입니다. 이러한 충돌을 해결하기 위해 W3C 이름 공간 권장사항은 XML 요소를 수정할 수 있는 xmlns 속성을 정의합니다. 이 속성이 요소에 있는 경우, 이 요소의 이름 공간을 식별합니다.

xmlns 속성은 다음과 같은 구문을 사용합니다.

xmlns:prefix=namespace

여기서, namespace는 고유 URI(예: www.ibm.com)이며 prefix는 해당 이름 공간을 나타내고 해당 포인터를 제공합니다.

다음 고객 요소 정의에서는 해당 요소 태그와 다른 비즈니스 응용프로그램에서 작성한 고객 레코드에 나타나는 요소 태그를 구분하기 위해 회계 이름 공간이 정의됩니다.

<acct:customer xmlns:acct="http://www.my.com/acct-REV10">
	<acct:name>Corporation</acct:name>
	<acct:order acct:ref="5566"/>
	<acct:status>invoice</acct:status>
</acct:customer>  

첫 번째 행의 이름 공간 정의는 이름 공간 http://www.my.com/acct-REV10을 접두부에 지정합니다. 이 접두부는 name과 같은 요소 이름에서 해당 이름을 이름 공간에 첨부하기 위해 사용됩니다. 예를 들어, 두 번째 응용 프로그램인 이행 시스템은 해당 고객 요소에 다른 이름 공간을 지정할 수 있습니다.

<ful:customer xmlns:ful="http://www.your.com/ful">
	<ful:name>Corporation</ful:name>
	<ful:order ful:ref="A98756"/>
	<ful:status>shipped</ful:status>
 </ful:customer>

두 데이터 구조를 모두 처리하는 응용프로그램은 이제 회계 데이터와 이행 데이터를 다르게 처리할 수 있습니다. 기본 이름 공간이 존재합니다. 기본 이름 공간은 이름 공간 정의에 로컬 이름이 지정되지 않을 때 설정됩니다.

<acct:customer xmlns="http://www.my.com/acct-REV10" xmlns:acct="http://www.my.com/acct-REV10 ">
<name>Corporation</name>
<order acct:ref="5566"/>
<status>invoice</status>
</customer>

이 예제에서, 고객 레코드의 모든 태그는 이름 공간 http://www.my.com/acct-REV10에 상주하는 것으로 규정됩니다. 기본 이름 공간이 사용되므로 명시적인 접두부는 필요하지 않습니다. 기본 이름 공간은 모든 속성 정의에 적용될 수 있습니다.

XML 스키마 및 이름 공간

다음 XML 스키마에서 스키마의 기본 이름 공간은 표준 XML 스키마 이름 공간인 http://www.w3.org/2001/XMLSchema로 정의됩니다. 스키마 특정 이름 공간 http://www.ibm.com도 존재합니다.

<?xml version="1.0"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.ibm.com" xmlns:TestSchema="http://www.ibm.com">
 <simpleType name="ZipCodeType">
 <restriction base="integer">
  <minInclusive value="10000"/>
 <maxInclusive value="99999"/>
</restriction>
 </simpleType> 
 <!--element definitions skipped -->  
</schema> 

앞의 XML 스키마가 C:\temp\TestSchema.xsd로 저장되는 것으로 가정할 때 이 스키마에 대해 유효성을 검증하는 샘플 XML 파일은 다음과 같습니다.

<?xml version="1.0"?>
<x:addressList xmlns:x="http://www.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://www.ibm.com file:///C:/temp/TestSchema.xsd">
 xsi:schemaLocation="http://www.ibm.com file:///C:/temp/TestSchema.xsd">
<x:address> 
 <x:street>x:Vangerowstrasse</x:street>
  <x:zipCode>69115</x:zipCode>
 <x:city>x:Heidelberg</x:city>
 </x:address>
    <x:address> 
<x:street>x:Bernal Road</x:street> 
<x:zipCode>90375</x:zipCode>
     <x:city>x:San Jose</x:city>
 </x:address>
</x:addressList> 

대상 이름 공간

대상 이름 공간은 요소와 해당 이름이 연관되는 이름 공간을 식별하는 데 사용됩니다. 선언의 경우, 이 연관은 XML 파일에서 스키마를 준수하는 요소의 이름 공간을 판별합니다. 스키마를 가져오는 XML 파일은 schemaLocation 속성에서 해당 대상 이름 공간을 참조해야 합니다. 요소의 대상 이름 공간과 실제 이름 공간이 일치하지 않는 경우 스키마 유효성 검증 오류로 보고됩니다. 예제에서, 대상 이름 공간은 http://www.ibm.com이며 XML 스키마 파일에서 정의되고 XML 파일에서 두 번 참조됩니다. 이 세 가지 이름 공간 발생이 일치하지 않는 경우 유효성 검증 오류가 발생합니다.

다음 예제는 XML 스키마 및 해당 XML 인스턴스 문서에서 대상 이름 공간과 이름 공간 접두부의 동작 방법을 보여줍니다.

샘플 1 - 기본/대상 이름 공간 및 규정되지 않은 로컬 요소가 모두 있는 스키마

XML 스키마:

<?xml version="1.0"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.ibm.com" xmlns:x="http://www.ibm.com">
<complexType name="AddressType">
<sequence>
<element name="name" type="string"></element>
</sequence>
</complexType>
<element name="MyAddress" type="x:AddressType"></element>
</schema> 

이 샘플은 이 스키마에서 작성된 올바른 XML 인스턴스 문서를 나타냅니다. 로컬 요소 및 속성은 규정되지 않습니다.

<?xml version="1.0"?>
<x:MyAddress xmlns:x="http://www.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ibm.com x.xsd ">
<name>Peter Smith</name>
</x:MyAddress> 

로컬 요소(예 "name" 요소) 및 속성이 XML 파일에 규정되지 않는 경우 루트 요소만 규정됩니다. 따라서 이 예제에서 "x" 이름 공간 접두부는 루트 요소 "MyAddress"에 지정되며 이 요소를 이름 공간 "http://www.ibm.com"과 연관시킵니다. 그러나 "x" 접두부는 로컬 요소 "name"에 지정되지 않습니다.

샘플 2 - 기본/대상 이름 공간 및 규정된 로컬 요소가 모두 있는 스키마

<?xml version="1.0"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.ibm.com" xmlns:x="http://www.ibm.com" elementFormDefault="qualified">
<complexType name="AddressType">
<sequence>
<element name="name" type="string"></element>
</sequence>
</complexType>
<element name="MyAddress" type="x:AddressType"></element>
 </schema> 

이 샘플은 이 스키마에서 작성된 올바른 XML 인스턴스 문서를 나타냅니다. 로컬 요소 및 속성이 규정됩니다. 이는 elementFormDefault 속성이 XML 스키마에서 규정됨으로 설정되기 때문입니다.

<?xml version="1.0"?>
  <x:MyAddress xmlns:x="http://www.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.ibm.com x.xsd "> 
<x:name>Peter Smith</x:name>
 </x:MyAddress>

이 예제에서 "x" 이름 공간 접두부는 루트 요소 "MyAddress" 및 로컬 요소 "name"에 모두 지정되며 이 요소를 이름 공간 "http://www.ibm.com"에 연관시킵니다.

샘플 3 - 대상 이름 공간이 있고 xmlns:xsd를 명시적으로 정의하는 스키마

이 XML 스키마는 다음 속성을 추가합니다.

xmlns:xsd="http://www.w3.org/2001/XMLSchema

이는 XML 스키마 언어로 정의되는 각 구성을 "xsd" 접두부로 규정해야 함을 의미합니다 (예: xsd:complexType 및 xsd:string)

. 선언 및 사용법에서 "xs" 또는 "foobar"와 같은 다른 접두부를 선택할 수 있습니다.

이 접두부는 XML 스키마 환경 설정 페이지에서 지정할 수 있습니다. 자세한 정보는 관련 타스크를 참조하십시오.

모든 사용자 정의 유형은 targetNamespace 속성 정의에 따라 이름 공간 http://www.ibm.com에 속하며 접두부는 xmlns:x 속성 정의에 따라 "x"입니다.

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.ibm.com" xmlns:x="http://www.ibm.com">
<xsd:complexType name="AddressType">
		<xsd:sequence>		 <xsd:element name="name" type="xsd:string"></xsd:element>
				</xsd:sequence> 	</xsd:complexType> <xsd:element name="MyAddress" type="x:AddressType"></xsd:element>
</xsd:schema>

이 샘플은 이 스키마에서 작성된 올바른 XML 인스턴스 문서를 나타냅니다. 로컬 요소 및 속성은 규정되지 않습니다. 규정 시맨틱은 샘플 1과 동일합니다.

<?xml version="1.0"?>
 <x:MyAddress xmlns:x="http://www.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.ibm.com x.xsd ">
<name>Peter Smith</name>
 </x:MyAddress>

샘플 4 - xmlns:xsd를 명시적으로 정의하는 대상 이름 공간이 선언되지 않은 스키마

이 XML 스키마는 해당 대상 이름 공간이 없습니다. 이 경우 "xsd"와 같은 접두부로 모든 XML 스키마 구성을 명시적으로 규정하도록 권장합니다. 이름 공간 접두부가 없으므로 AddressType과 같은 이 스키마의 정의 및 선언은 이름 공간 규정 없이 참조됩니다.

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:complexType name="AddressType">
		<xsd:sequence><xsd:element name="name" type="xsd:string"></xsd:element> 
<xsd:element name="name" type="xsd:string"></xsd:element> 
<xsd:element name="name" type="xsd:string"></xsd:element> 
				</xsd:sequence>	</xsd:complexType><xsd:element name="MyAddress" type="AddressType"></xsd:element>
</xsd:schema> 

이 샘플은 스키마에서 작성된 올바른 XML 인스턴스 문서를 나타냅니다. 모든 요소는 규정되지 않습니다.

<?xml version="1.0"?>
<MyAddress xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="x.xsd">
<name>name</name>
</MyAddress>

샘플 5 - 대상 이름 공간이 기본 이름 공간인 스키마

이 스키마는 대상 이름 공간이 기본 이름 공간인 XML 스키마입니다. 역시 이 이름 공간에는 이름 공간 접두부가 없습니다.

<?xml version="1.0"?>
 <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.ibm.com" xmlns="http://www.ibm.com">
<xsd:complexType name="AddressType">
		<xsd:sequence><xsd:element name="name" type="xsd:string"></xsd:element> 
				</xsd:sequence>	</xsd:complexType> <xsd:element name="MyAddress" type="AddressType"></xsd:element>
 </xsd:schema> 

이 샘플은 스키마에서 작성된 올바른 XML 인스턴스 문서를 나타냅니다.

<?xml version="1.0" encoding="UTF-8"?>
<MyAddress xmlns="http://www.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ibm.com NewXMLSchema.xsd">
<name>name</name>
 </MyAddress>  
관련 태스크
XML 스키마 파일 환경 설정 편집