답변:
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/
<LinearLayout
접두사가없는 작품을 의미 합니까?
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에 대한 스키마 (정의)를 배치하지만 이는 일부 사람들의 관례 일뿐입니다.
접두사도 아무런 영향을 미치지 않습니다. 중요한 것은 접두사가 정의 된 네임 스페이스입니다. 다른 접두어로 시작하는 여러 태그는 모두 동일한 네임 스페이스에 매핑되는 것으로 간주됩니다.
접두사 경우 예를 들어, personxml
와 mycityxml
같은 네임 스페이스에 매핑 모두 (아래 조각 같이)를, 다음은 당신이 주어진 요소를 접두사로 문제가되지 것입니다 경우 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>
가장 큰 혼란은 xml 네임 스페이스가 정보가없는 일종의 URL을 가리키고 있다는 것입니다. 그러나 진실은 네임 스페이스 아래에서 발명 한 사람이
xmlns:android="http://schemas.android.com/apk/res/android"
다음과 같이 호출 할 수도 있습니다.
xmlns:android="asjkl;fhgaslifujhaslkfjhliuqwhrqwjlrknqwljk.rho;il"
이것은 유일한 식별자입니다. 그러나 고유하고 고유 한 네임 스페이스에서 사용 된 태그 / 속성의 사양을 가리킬 수있는 URL을 입력해야합니다. 필요하지 않습니다.
왜 독특해야합니까? 네임 스페이스의 목적은 네임 스페이스를 고유하게하는 것이므로 네임 스페이스의 background 와 같은 속성을 다른 네임 스페이스 의 배경 과 구별 할 수 있습니다 .
이러한 고유성으로 인해 사용자 지정 특성을 만들면 이름 충돌이 발생할 염려가 없습니다.
네임 스페이스가 있으므로 전역 적으로 고유 한 요소를 가질 수 있습니다. 그러나 99 %의 시간은 문제가되지 않지만 시맨틱 웹 의 관점에서 보면 중요해지기 시작합니다.
예를 들어, 적절한를 사용하여 다른 스키마의 XML 매시업을 만들 수 xmlns
있습니다. 예를 들어, vCard 등으로 친구의 친구를 매쉬업하십시오 .