XML 이름 공간
XML 명명 공간은 요소 이름 충돌을 피하는 방법을 제공합니다.
이름 충돌
XML에서는 요소 이름이 개발자가 정의합니다. 두 개의 다른 문서가 동일한 요소 이름을 사용하면 이름 충돌이 발생합니다.
이 XML 문서는 특정 테이블의 정보를 포함하고 있습니다:
<table> <tr> <td>Apples</td> <td>Bananas</td> </tr> </table>
이 XML 문서는 탁자(가구)에 대한 정보를 포함하고 있습니다:
<table> <name>African Coffee Table</name> <width>80</width> <length>120</length> </table>
이 두 개의 XML 문서가 함께 사용되면, 두 문서가 다른 내용과 정의를 가진 <table> 요소를 포함하고 있기 때문에 명명 충돌이 발생합니다.
사용자나 XML 애플리케이션은 이러한 충돌을 어떻게 처리할지 결정할 수 없습니다.
이름 충돌을 해결하기 위해 접두사 사용
이름 접두사를 사용하여 XML에서 이름 충돌을 쉽게 피할 수 있습니다.
이 XML은 HTML 테이블과 가구에 대한 정보를 포함하고 있습니다:
xmlns:f="https://www.codew3c.com/furniture"> <h:table> <h:tr> <h:td>Apples</h:td> <h:td>Bananas</h:td> </h:tr> </h:table> <f:table> <f:name>African Coffee Table</f:name> <f:width>80</f:width> <f:length>120</f:length>
이제, 명명 충돌이 없습니다. 이는 두 문서가 각각의 <table> 요소에 다른 이름을 사용했기 때문입니다 (xmlns:f="https://www.codew3c.com/furniture">
와 </h:table>
)。
접두사를 사용하여 두 가지 다른 유형의 <table> 요소를 생성했습니다.
XML 명명 공간 - xmlns 속성
XML에서 접두사를 사용할 때, 접두사의 정의가 필요합니다。이름 공간(Namespaces)
를 통해 정의됩니다。 두 번째 <table> 요소에서
이름 공간은 요소 시작 태그의
속성을 사용하여 정의됩니다。(Uniform Resource Identifier,이름 공간 선언은 다음과 같은 문법을 사용합니다:xmlns:prefix="
". <root> <h:table> <h:tr> <h:td>Apples</h:td> <h:td>Bananas</h:td> </h:tr> <h:table xmlns:h="http://www.w3.org/TR/html4/"> <f:table> <f:name>African Coffee Table</f:name> <f:width>80</f:width> <f:length>120</f:length> </f:table>
<f:table xmlns:f="https://www.codew3c.com/furniture">
위의 예제에서: 두 번째 <table> 요소에서
xmlns 첫 번째 <table> 요소에서
f:
h: 두 번째 <table> 요소에서
xmlns 속성은
f:
접두사는 명시된 이름 공간을 제공합니다。
요소에 이름 공간이 정의되면, 같은 접두사를 가진 모든 자식 요소는 같은 이름 공간과 연결됩니다。
이름 공간은 XML 루트 요소에서도 선언될 수 있습니다: <root xmlns:h="http://www.w3.org/TR/html4/" xmlns:f="https://www.codew3c.com/furniture"> <h:table> <h:tr> <h:td>Apples</h:td> <h:td>Bananas</h:td> </h:tr> </h:table> <f:table> <f:name>African Coffee Table</f:name> <f:width>80</f:width> <f:length>120</f:length> </f:table>
</root>주의:
파서는 이름 공간 URI를 사용하여 정보를 찾지 않습니다。
URI를 사용하는 목적은 이름 공간에 독특한 이름을 제공하는 것입니다。
하지만, 많은 회사는 실제 존재하는 웹 페이지를 가리키는 가이드로 이름 공간을 사용하기를 자주 합니다. 이 웹 페이지는 이름 공간에 대한 정보를 포함하고 있습니다。
일반 자원 식별자 (URI) 일반 자원 식별자(Uniform Resource Identifier,URI
)는 인터넷 자원을 식별하는 문자열입니다。일반 자원 위치 지정자 (Uniform Resource Locator,URL),그것은 인터넷 도메인 주소를 식별합니다。
또는 덜 일반적인 URI 유형은일반 자원 이름 (Uniform Resource Name,URN)。
기본 이름 공간(Default Namespaces)
요소에 기본적인 이름 공간을 정의하면 모든 자식 요소에서 접두사를 사용하지 않아도 됩니다。
아래의 문법을 사용하십시오:
xmlns="namespaceURI"
이 XML 문서는 HTML 테이블 정보를 포함하고 있습니다:
<table xmlns="http://www.w3.org/TR/html4/"> <tr> <td>Apples</td> <td>Bananas</td> </tr> </table>
이 XML은 한 가지 가구에 대한 정보를 포함하고 있습니다:
<table xmlns="https://www.codew3c.com/furniture"> <name>African Coffee Table</name> <width>80</width> <length>120</length> </table>
이름 공간의 실제 사용
XSLT는 XML 문서를 다른 형식으로 변환할 수 있는 언어입니다.
아래의 XML 문서는 XML을 HTML로 변환하는 문서입니다.
아래의 XSL 문서를 주의 깊게 살펴보면 대부분의 태그가 HTML 태그임을 알 수 있습니다.
HTML이 아닌 태그는 모두 xsl 접두사를 가지고 있으며, 이 이름 공간으로 표시됩니다: "http://www.w3.org/1999/XSL/Transform":
이 이름 공간 "http://www.w3.org/1999/XSL/Transform"은 HTML 문서에서 XSLT 요소를 표시합니다:
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <h2>My CD Collection</h2> <table border="1"> <tr> <th style="text-align:left">Title</th> <th style="text-align:left">Artist</th> </tr> <xsl:for-each select="catalog/cd"> <tr> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="artist"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
XSLT에 대해 더 깊이 배우고 싶다면, 우리의 XSLT 강의.