XML에서 "xmlns"는 무엇을 의미합니까?


415

XML 파일에서 다음 줄을 보았습니다.

xmlns:android="http://schemas.android.com/apk/res/android"

또한 내가 본 xmlns다른 많은 XML 파일 에서도 보았습니다 .

무엇입니까?




이제 태그를 잘못 사용하거나 잘못된 위치에서 xml에 오류가 발생하는 이유를 알아야합니다. :)
Vaibs

답변:


299

XML 네임 스페이스를 정의합니다 .

귀하의 예에서 네임 스페이스 접두사 는 " android "이고 네임 스페이스 URI 는 " http://schemas.android.com/apk/res/android "입니다.

이 문서에는 다음과 같은 요소가 있습니다. <android:foo />

네임 스페이스 접두사를 전체 네임 스페이스 URI에 대한 짧은 이름 별칭을 가진 변수로 생각하십시오. <http://schemas.android.com/apk/res/android:foo />XML 파서가 문서를 읽을 때 "의미 한"내용과 관련하여 글을 쓰는 것과 같습니다 .

참고 : 실제로 XML 인스턴스 문서에서 네임 스페이스 접두사 대신 전체 네임 스페이스 URI를 사용할 수 없습니다.

네임 스페이스에서이 자습서를 확인하십시오. http://www.sitepoint.com/xml-namespaces-explained/


62
파서가보고있는 것을보기 위해 항상 이러한 URI를 웹 브라우저에 붙여 넣지 만 항상 404를 반환합니다. 끝까지 고정 된 표준 파일 이름이 필요한 실제 URI 여야합니까, 아니면 기술 일뿐입니다 고유 한 ID를 만들기 위해?
Patrick

36
@Patrick 네, 다른 URI와 별도의 네임 스페이스임을 나타 내기 위해 고유해야하는 URI 일 뿐이므로 잠재적 인 중복 태그가 올바르게 해석됩니다. 따라서 URI는 종종 아무것도 가리 키지 않습니다.
foochow

3
흠 ... 이름 공간이라는 것을 알게되어 기쁩니다. URI를 지정하면 HTML 페이지가 실제로 해당 웹 사이트에 액세스하여 스키마를 결정하는지 궁금해했습니다.
Nav

17
@Patrick, URI는 URL과 다릅니다. URL은 로케이터이고 URI는 식별자 일뿐입니다. GUID를 URI로 선택할 수 있습니다. 실제로 도서에 대한 ISBN은 URI 형식입니다.
Jaywalker

태그 작동 방식 <LinearLayout접두사가없는 작품을 의미 합니까?
Asif Mushtaq

676

XML 네임 스페이스를 의미 합니다 .

기본적으로 XML의 모든 요소 (또는 속성) 는 요소 이름을 "자격을 정하는"방법으로 네임 스페이스에 속합니다.

당신과 내가 우리 자신의 XML을 발명했다고 상상해보십시오. 당신은 사람들을 설명하기 위해 XML을 발명했습니다. 저는 도시를 설명하기 위해 발명했습니다. 우리 둘 다라는 요소를 포함합니다 name. 당신의 이름은 그 사람의 이름을 나타내며 나의 이름은 도시의 이름을 나타냅니다.

<person>
    <name>Rob</name>
    <age>37</age>
    <homecity>
        <name>London</name>
        <lat>123.000</lat>
        <long>0.00</long>
    </homecity>
</person>

두 XML이 단일 문서로 결합 된 경우 두 이름을 어떻게 구분할 수 있습니까? 위에서 볼 수 있듯이 두 가지 name요소가 있지만 둘 다 다른 의미를 갖습니다.

대답은 귀하와 저는 XML에 네임 스페이스를 할당한다는 것입니다.

<personxml:person xmlns:personxml="http://www.your.example.com/xml/person"
                  xmlns:cityxml="http://www.my.example.com/xml/cities">
    <personxml:name>Rob</personxml:name>
    <personxml:age>37</personxml:age>
    <cityxml:homecity>
        <cityxml:name>London</cityxml:name>
        <cityxml:lat>123.000</cityxml:lat>
        <cityxml:long>0.00</cityxml:long>
    </cityxml:homecity>
</personxml:person>

이제 우리는 XML을 완전히 검증했으며 각 name요소의 의미에 대해 모호하지 않습니다 . 로 시작하는 모든 태그는 personxml:XML에 속하는 태그이며, 시작하는 모든 태그 는 내 태그 cityxml:입니다.

몇 가지주의 할 사항이 있습니다.

  • 네임 스페이스 선언을 제외하면 기본 네임 스페이스에있는 것으로 간주됩니다.

  • 식별자가없는 네임 스페이스를 선언하면 즉 xmlns="http://somenamespace",이 아닌 xmlns:rob="somenamespace"문서의 기본 네임 스페이스를 지정합니다.

  • 실제 이름 공간 자체, 종종 IRI 는 실제 결과가 아닙니다. 고유해야하므로 사람들은 자신이 소유 한 IRI / URI를 선택하는 경향이 있지만 그보다 더 큰 의미는 없습니다. 때때로 사람들은 지정된 IRI에 XML에 대한 스키마 (정의)를 배치하지만 이는 일부 사람들의 관례 일뿐입니다.

  • 접두사도 아무런 영향을 미치지 않습니다. 중요한 것은 접두사가 정의 된 네임 스페이스입니다. 다른 접두어로 시작하는 여러 태그는 모두 동일한 네임 스페이스에 매핑되는 것으로 간주됩니다.

    접두사 경우 예를 들어, personxmlmycityxml같은 네임 스페이스에 매핑 모두 (아래 조각 같이)를, 다음은 당신이 주어진 요소를 접두사로 문제가되지 것입니다 경우 personxml또는 mycityxml, 그들은 모두 XML 파서로 같은 일로서 취급 할 것 . 요점은 XML 파서는 접두사로 선택한 것을 신경 쓰지 않고 매핑하는 네임 스페이스 만 신경 쓴다는 것입니다. 접두사는 네임 스페이스를 가리키는 간접적 입니다.

    <personxml:person 
         xmlns:personxml="http://example.com/same/url"
         xmlns:mycityxml="http://example.com/same/url" />
  • 속성은 규정 될 수 있지만 일반적으로 그렇지 않습니다. 또한 요소와 달리 현재 존재하는 요소에서 네임 스페이스를 상속 하지 않습니다 (아래 참조).

또한 요소 네임 스페이스는 부모 요소에서 상속됩니다. 즉, 위의 XML을 동등하게 작성할 수 있습니다.

<person xmlns="http://www.your.example.com/xml/person">
    <name>Rob</name>
    <age>37</age>
    <homecity xmlns="http://www.my.example.com/xml/cities">
        <name>London</name>
        <lat>123.000</lat>
        <long>0.00</long>
    </homecity>
</person>

13
+1 좋고 유용한 개념 답변. "기본적으로, xml의 모든 요소 (또는 속성)는 네임 스페이스에 속합니다"라는 자격을 부여 할 수 있습니다. 일부 요소 및 속성은 "네임 스페이스 없음"에 있다고합니다. 나는 당신이 기본을주는 것을 이해하지만.
LarsH

1
@Rob Levine "속성은 네임 스페이스가 될 수 있지만 일반적으로 그렇지 않습니다." 안드로이드는 어떻습니까?
Paul Brewczynski

1
예를 들어 " your.example.com/xml/person " 은 어떻게 사용됩니까? 좋아, <person : name> 태그가 있는데, 이제 무엇? 이것도 설명해 주시겠습니까?
Koray Tugay

1
@WORMSS-예-맞습니다. 쿼리를 정의 할 때는 접두사를 통해 네임 스페이스를 지정해야합니다. 예를 들어 C # System.Xml 세계에서는 XmlNamespaceManager.AddNamespace를 사용하여 네임 스페이스 관리자에 접두사를 등록한 다음이 접두사를 쿼리에 사용합니다. 접두사가 문서에 나타나지 않는다는 사실은 중요하지 않으며 매핑되는 네임 스페이스 만 중요합니다.
Rob Levine

2
이 Microsoft 문서 링크 : " msdn.microsoft.com/en-us/library/aa468565.aspx "는 XML의 네임 스페이스를 매우 잘 설명합니다.
Deen John

16

가장 큰 혼란은 xml 네임 스페이스가 정보가없는 일종의 URL을 가리키고 있다는 것입니다. 그러나 진실은 네임 스페이스 아래에서 발명 한 사람이

xmlns:android="http://schemas.android.com/apk/res/android"

다음과 같이 호출 할 수도 있습니다.

xmlns:android="asjkl;fhgaslifujhaslkfjhliuqwhrqwjlrknqwljk.rho;il"

이것은 유일한 식별자입니다. 그러나 고유하고 고유 한 네임 스페이스에서 사용 된 태그 / 속성의 사양을 가리킬 수있는 URL을 입력해야합니다. 필요하지 않습니다.

왜 독특해야합니까? 네임 스페이스의 목적은 네임 스페이스를 고유하게하는 것이므로 네임 스페이스의 background 와 같은 속성을 다른 네임 스페이스 의 배경 과 구별 할 수 있습니다 .

이러한 고유성으로 인해 사용자 지정 특성을 만들면 이름 충돌이 발생할 염려가 없습니다.


안녕 Morfidon. 귀하의 답변에 해당 내용을 지정하는 참조에 대한 링크를 추가하거나 URL이 무엇이든 될 수 있습니까? 무엇이 독특해야합니까? 고유성을 명확히하십시오 : XML 네임 스페이스의 이름 또는 URL의 내용? 건배
올리버

@olibre 안드로이드 네임 스페이스를 사용하려면 이름을 사용해야합니다. 그것은 그들의 독특한 이름입니다. 그들은 거기에 URL을 넣기로 결정했습니다. 고유 한 네임 스페이스를 생성하는 경우 원하는 이름으로 고유 한 네임 스페이스를 호출 할 수 있습니다. 그 네임 스페이스 안에 무엇이 있는지 설명하는 장소를 가리키는 URL을 사용해야한다고 말했지만 안드로이드 네임 스페이스의 작성자조차도 그렇게하지 않았다는 것을 알 수 있습니다.
Morfidon

고마워요 Morfidon. 나는 Rob의 대답 을 읽는 동안 그 점을 마침내 이해했습니다 . 나는 잘 알려지지 않은 중요한 측면을 강조하기 때문에 당신의 대답을 좋아합니다. 그러나 답을 개선하고, 고유해야 할 부분을 명확히하고, 참고 문헌을 제공하고, 문구를 확인하고, 문구를 확인하십시오. 일부 독자는 현재 답변에 혼란을 줄 수 있습니다. 건배
올리버

1
이것이 내가 필요한 대답입니다! 따라서 사람들은 URI = URL을 생각하고 일부 문서가 해당 위치에 있어야하기 때문에이 속성 값에 URI를 사용하는 것을 혼동합니다. 그러나 AFAICT URI가 404를 반환하면 문제가 없습니다. 주소처럼 보이는 유일한 식별자 일뿐입니다. 해당 위치에서 스키마 또는 DTD를 찾을 것으로 예상되는 일부 특수 유효성 검사기가있을 수 있지만, 이것은 내가 생각하는 특별한 경우입니다. 내가 틀렸다면 정정 해주세요.
brennanyoung

1
@brennanyoung 그것은 당신이 말한 그대로 :)
Morfidon

12

xmlns-XML 네임 스페이스 요소 이름 충돌을 피하는 방법 일뿐입니다. 예를 들면 다음과 같습니다.

<config xmlns:rnc="URI1" xmlns:bsc="URI2">
  <rnc:node>
      <rnc:rncId>5</rnc:rncId>
  </rnc:node>

  <bsc:node>
      <bsc:cId>5</bsc:cId>
  </bsc:node>
</config>

node하나의 xml 파일에 두 개의 다른 요소가 있습니다. 네임 스페이스가 없으면이 파일은 유효하지 않습니다.


4

네임 스페이스가 있으므로 전역 적으로 고유 한 요소를 가질 수 있습니다. 그러나 99 %의 시간은 문제가되지 않지만 시맨틱 웹 의 관점에서 보면 중요해지기 시작합니다.

예를 들어, 적절한를 사용하여 다른 스키마의 XML 매시업을 만들 수 xmlns있습니다. 예를 들어, vCard 등으로 친구의 친구를 매쉬업하십시오 .


사소한 XML의 경우 다른 모든 네임 스페이스가 매우 중요하므로 무시해도 좋을 것입니다. + 나는 시맨틱 웹과 네임 스페이스 사이의 연결을 실제로 보지 못한다. 시맨틱 웹은 개념이며 네임 스페이스는 XML 표준의 일부이며 인터페이스 정의와 구현 세부 사항을 혼합하고 있습니다.
Newtopian
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.