네임스페이스 소개
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>
여기에는 제목이라는 이름의 세 가지 용도가 있습니다. 이 문서를 처리하려는 경우 이름이 같더라도 각 제목이 다른 방식으로 표시되어야 하므로 문제가 발생할 수 있습니다.
해결책은 제목의 첫 번째 발생을 책의 제목으로 식별하는 수단, 즉 책 네임스페이스의 제목 요소를 사용하여 예를 들어 장 제목과 구별하는 것입니다:
<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/"
이렇게 선언된 네임스페이스는 적절한 접두사와 ":" 구분 기호를 앞에 붙여 요소 및 속성 이름에 적용할 수 있습니다. 이미 책:title 요소에서 이를 살펴본 바 있습니다.
접두사가 없는 요소 이름은 기본 네임스페이스에 속합니다. 이 규칙은 어트리뷰트에는 적용되지 않습니다. 접두사가 없는 어트리뷰트는 선언된 XML 네임스페이스 중 어느 곳에도 속하지 않습니다. 속성은 항상 해당 속성이 표시되는 요소의 "기존" 네임스페이스에 속합니다. "기존" 네임스페이스는 XML 네임스페이스가 아니라 단순히 한 요소에 속하는 모든 속성 이름이 달라야 한다는 의미입니다. 나중에 속성에 XML 네임스페이스를 할당하는 방법을 살펴보겠습니다.
접두사가 없는 속성은 XML 네임스페이스에 속하지 않기 때문에 ( 저자 요소에 속하는) 속성 제목과 예를 들어 장 내의 제목 요소 간에 충돌이 발생하지 않습니다.
예를 들어 이를 명확히 설명해 보겠습니다:
<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>
문서 요소 내에 두 개의 네임스페이스가 선언되어 있습니다. 기본 네임스페이스 http://www.example.com/fnord/ 는 책 요소, 챕터 요소, 적절한 제목 요소 및 문서 자체에 적용됩니다.
책:저자 및 책:제목 요소는 URI http://www.example.com/fnord/book/ 네임스페이스에 속합니다.
두 책:저자 속성 title과 name에는 XML 네임스페이스가 할당되어 있지 않습니다. 이들은 책:저자 요소의 "전통적인" 네임스페이스의 멤버일 뿐이며, 예를 들어 책:저자에서 두 개의 제목 속성은 금지되어 있습니다.
위의 예에서는 http://www.example.com/fnord/ 네임스페이스의 title 속성을 book:author에 추가하여 마지막 규칙을 우회합니다. fnord:title은 책:저자 요소에 선언된 접두사 fnord가 있는 네임스페이스에서 가져옵니다.
분명히 fnord 네임스페이스는 기본 네임스페이스와 동일한 네임스페이스 URI를 가집니다. 그렇다면 왜 이미 선언한 기본 네임스페이스를 사용하지 않았을까요? 답은 꽤 복잡합니다:
- 접두사가 없는 어트리뷰트는 기본 네임스페이스는 물론이고 어떤 XML 네임스페이스에도 속하지 않습니다;
- 접두사를 추가로 생략하면 제목과 제목이 충돌하게 됩니다;
- xmlns:title로 작성하면 기본 xmlns 네임스페이스를 적용하는 대신 접두사 title이 붙은 새 네임스페이스가 선언됩니다.
Qt XML 클래스의 요소와 속성은 네임스페이스 접두사와 "실제" 이름(또는 로컬 이름)으로 구성된 정규화된 이름을 참조하거나 로컬 이름과 네임스페이스 URI의 조합으로 액세스하는 두 가지 방법으로 액세스할 수 있습니다.
XML 네임스페이스에 대한 자세한 내용은 http://www.w3.org/TR/REC-xml-names/ 에서 확인할 수 있습니다.
Qt XML 문서에 사용된 규칙
다음 용어는 네임스페이스의 컨텍스트 내에서 이름의 일부를 구분하는 데 사용됩니다:
- 정규화된 이름은 문서에 표시되는 이름입니다. (위의 예에서 book:title은 정규화된 이름입니다.)
- 한정된 이름의 네임스페이스 접두사는 ":" 왼쪽에 있는 부분입니다( 책:제목에서 책이 네임스페이스 접두사입니다).
- 이름의 로컬 부분 ( 로컬 이름이라고도 함)은 ":" 오른쪽에 나타납니다. (따라서 title은 book:title의 로컬 부분입니다.)
- 네임스페이스 URI ("유니폼 리소스 식별자")는 네임스페이스의 고유 식별자입니다. URL(예: http: //www.example.com/fnord/ )처럼 보이지만 지정된 프로토콜이 명명된 주소에서 데이터에 액세스할 수 있어야 하는 것은 아닙니다.
":"가 없는 요소(예: 예제에서 chapter )에는 네임스페이스 접두사가 없습니다. 이 경우 로컬 부분과 정규화된 이름이 동일합니다(예: chapter).
DOM 북마크 애플리케이션도참조하세요 .
© 2025 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.