이 페이지에서

네임스페이스 소개

Qt XML 모듈 문서의 일부 내용은 사용자가 XML 네임스페이스에 익숙하다고 가정하고 있습니다. 여기서는 이에 대한 간략한 소개를 제공합니다. 이미 이 내용을 알고 계신다면 ‘Qt XML ’ 문서 작성 규칙 부분으로 건너뛰시기 바랍니다.

네임스페이스는 보다 모듈화된 설계를 가능하게 하기 위해 XML에 도입된 개념입니다. 이를 통해 데이터 처리 소프트웨어는 XML 문서 내의 명명 충돌을 쉽게 해결할 수 있습니다.

다음 예제를 살펴보겠습니다.

<document>
<book>
  <title>Practical XML</title>
  <author title="Ms" name="Eris Kallisti"/>
  <chapter>
    <title>A Namespace Called fnord</title>
  </chapter>
</book>
</document>

여기에서는 ‘title’이라는 이름이 세 가지 다른 용도로 사용되고 있습니다. 이 문서를 처리하려고 하면, 이름은 같더라도 각 제목은 서로 다른 방식으로 표시되어야 하므로 문제가 발생할 것입니다.

해결책은 첫 번째로 등장하는 ‘title’을 책의 제목으로 식별할 수 있는 방법을 마련하는 것입니다. 즉, 책 네임스페이스의 ‘title’ 요소를 사용하여, 예를 들어 챕터 제목과 구별하는 것입니다. 예를 들면 다음과 같습니다:

<book:title>Practical XML</book:title>

이 경우‘book’은 네임스페이스를 나타내는 접두사입니다.

네임스페이스를 요소나 속성 이름에 적용하기 전에 먼저 이를 선언해야 합니다.

네임스페이스는 http://www.example.com/fnord/book/와 같은 URI입니다. 이는 데이터가 반드시 이 주소에서 이용 가능해야 한다는 의미는 아니며, URI는 단순히 고유한 이름을 제공하기 위해 사용됩니다.

네임스페이스는 속성과 동일한 방식으로 선언하며, 엄밀히 말해 네임스페이스 자체도 속성입니다. 예를 들어 http://www.example.com/fnord/을 문서의 기본 XML 네임스페이스 xmlns로 설정하려면 다음과 같이 작성합니다.

xmlns="http://example.com/fnord/"

http://www.example.com/fnord/book/ 네임스페이스를 기본 네임스페이스와 구별하기 위해서는 접두사를 지정해야 합니다:

xmlns:book="http://example.com/fnord/book/"

이와 같이 선언된 네임스페이스는 적절한 접두사와 ":" 구분자를 앞에 붙여 요소 및 속성 이름에 적용할 수 있습니다. 우리는 이미 book:title 요소에서 이를 살펴보았습니다.

접두사가 없는 요소 이름은 기본 네임스페이스에 속합니다. 이 규칙은 속성에는 적용되지 않습니다. 즉, 접두사가 없는 속성은 선언된 XML 네임스페이스 중 어느 것에도 속하지 않습니다. 속성은 항상 해당 속성이 나타나는 요소의 “전통적인” 네임스페이스에 속합니다. “전통적인” 네임스페이스는 XML 네임스페이스가 아니며, 단순히 하나의 요소에 속하는 모든 속성 이름이 서로 달라야 함을 의미합니다. 나중에 속성에 XML 네임스페이스를 할당하는 방법을 살펴보겠습니다.

접두사가 없는 속성은 어떤 XML 네임스페이스에도 속하지 않기 때문에, author 요소에 속하는 title 속성과 예를 들어 chapter 내의 title 요소 사이에는 충돌이 발생하지 않습니다.

예를 들어 이를 명확히 살펴보겠습니다:

<document xmlns:book = 'http://example.com/fnord/book/'
          xmlns      = 'http://example.com/fnord/' >
<book>
  <book:title>Practical XML</book:title>
  <book:author xmlns:fnord = 'http://example.com/fnord/'
               title="Ms"
               fnord:title="Goddess"
               name="Eris Kallisti"/>
  <chapter>
    <title>A Namespace Called fnord</title>
  </chapter>
</book>
</document>

document 요소 내부에는 두 개의 네임스페이스가 선언되어 있습니다. 기본 네임스페이스 http://www.example.com/fnord/는 book 요소, chapter 요소, 해당 title 요소, 그리고 물론 document 자체에도 적용됩니다.

book:author 및 book:title 요소는 URI http://www.example.com/fnord/book/를 갖는 네임스페이스에 속합니다.

book:author 요소의 두 속성인 title과 name에는 XML 네임스페이스가 할당되어 있지 않습니다. 이 속성들은 book:author 요소의 “전통적인” 네임스페이스에 속할 뿐이며, 이는 예를 들어 book:author 요소 내에 title 속성이 두 개 존재하는 것이 허용되지 않음을 의미합니다.

위의 예시에서는 book:author에 http://www.example.com/fnord/ 네임스페이스의 title 속성을 추가함으로써 마지막 규칙을 우회합니다. fnord:title은 book:author 요소에 선언된 접두사 fnord를 가진 네임스페이스에서 비롯된 것입니다.

분명히 fnord 네임스페이스는 기본 네임스페이스와 동일한 네임스페이스 URI를 가지고 있습니다. 그렇다면 왜 이미 선언해 둔 기본 네임스페이스를 그대로 사용하지 않았을까요? 그 이유는 꽤 복잡합니다:

  • 접두사가 없는 속성은 어떤 XML 네임스페이스에도 속하지 않으며, 기본 네임스페이스에도 속하지 않습니다;
  • 또한 접두사를 생략하면 title-title 간 충돌이 발생하게 됩니다;
  • 이를 xmlns:title로 작성하면 기본 xmlns 네임스페이스를 적용하는 대신 title이라는 접두사를 가진 새로운 네임스페이스를 선언하게 됩니다.

Qt XML 클래스를 사용하면 요소와 속성에 두 가지 방법으로 접근할 수 있습니다. 하나는 네임스페이스 접두사와 “실제” 이름(또는 로컬 이름)으로 구성된 정규화된 이름을 참조하는 방법이고, 다른 하나는 로컬 이름과 네임스페이스 URI의 조합을 사용하는 방법입니다.

XML 네임스페이스에 대한 자세한 정보는 http://www.w3.org/TR/REC-xml-names/에서 확인할 수 있습니다.

Qt XML 문서에서 사용된 규칙

네임스페이스 맥락에서 이름의 각 부분을 구분하기 위해 다음 용어들이 사용됩니다:

  • ‘정규화된 이름’은 문서에 표시되는 그대로의 이름을 말합니다. (위의 예에서 book:title은 정규화된 이름입니다.)
  • 정규화된 이름에서 네임스페이스 접두사는 ":"의 왼쪽에 있는 부분입니다. ( book:title에서book이 네임스페이스 접두사입니다.)
  • 이름의 로컬 부분 ( 로컬 이름이라고도 함)은 “:”의 오른쪽에 나타납니다. (따라서 title은 book:title의 로컬 부분입니다.)
  • 네임스페이스 URI ("Uniform Resource Identifier")는 네임스페이스를 고유하게 식별하는 식별자입니다. URL과 유사한 형태(예: http://www.example.com/fnord/ )를 띠지만, 지정된 주소에서 해당 프로토콜을 통해 데이터에 접근할 수 있어야 할 필요는 없습니다.

":"가 없는 요소(예시의 chapter와 같이)는 네임스페이스 접두사가 없습니다. 이 경우 로컬 부분과 정규화된 이름은 동일합니다(즉, chapter).

DOM 북마크 애플리케이션항목도 참조하십시오 .

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.