2011-11-02 4 views
2

기본 네임 스페이스와 접두사가 붙은 네임 스페이스가 동일한 네임 스페이스 URI를 해결할 때 접두사가없는 특성이 접두사가 붙은 특성과 같지 않은데 왜 둘 다 동일한 로컬 이름을 사용합니까?XMLNS 접두어가없는 XML 속성이 동일한 로컬 이름을 가진 접두어가 붙은 속성과 같지 않은 이유는 무엇입니까?

"Namespaces in XML"사양은 단지 그렇게 말합니다. 그러나 그 이유는 매우 짧습니다. 누구나 이런 이유인지 알 수 있습니까? http://www.w3.org/TR/xml-names11/#uniqAttrs에서 섹션 "속성의 6.3 고유성"에서

발췌 : 그러나 각

<!-- http://www.w3.org is bound to n1 and n2 --> 
<x xmlns:n1="http://www.w3.org" 
    xmlns:n2="http://www.w3.org" > 
    <bad a="1"  a="2" /> 
    <bad n1:a="1" n2:a="2" /> 
</x> 

:

예를 들어

, 나쁜 빈 엘리먼트 태그의 각은 다음의 불법 두 번째는 기본 네임 스페이스가 특성 이름에 적용되지 않기 때문입니다.

<!-- http://www.w3.org is bound to n1 and is the default --> 
<x xmlns:n1="http://www.w3.org" 
    xmlns="http://www.w3.org" > 
    <good a="1"  b="2" /> 
    <good a="1"  n1:a="2" /> 
</x> 

파서는 두 속성의 존재를 확인하고 하나를 선택해야하기 때문에 네임 스페이스 XML을 구문 분석하기가 더 어려워집니다. 내 경우를 들어

,이 같은 내 XML 문서에 아톰 링크를 추가하려면 : 링크 요소의 네임 스페이스를 상속합니다 :

<root xmlns="..." xmlns:atom="..."> 
    <atom:link rel="self" type=".." href=".." /> 
</root> 

내가 원자의 특성이라고 생각합니다. Java에서 DOM을 사용하여 XML을 구문 분석하면 요소의 Atom 네임 스페이스가보고되었지만 특성의 네임 스페이스는보고되지 않았습니다.

답변

1

짧은 대답 : 고정되지 않은 속성은 항상 빈 이름 공간에 있습니다. 즉, 이름 공간이 없습니다. 예에서

: 당신의 원자 예에서

{http://www.w3.org}a 

, 모든 속성은 다음과 같습니다 두 번째로 확장있는 반면

<good a="1"  n1:a="2" /> 

첫 번째는

{}a 

으로 확장 할 빈 이름 공간에.

+1

나는 오늘 같은 실수를 범벅으로한다. 그러나이 경우, 왜 <좋은 ns2 : a = "1"xmlns : ns2 = ""/>'가 허용되지 않는지 이해할 수 없다. – rds

+0

'xmlns : ns2 = ""'는 NS를 언인 블레이 'ns2' 접두사를 사용하여 선언 바인딩을 만들고 그 범위가 될 것입니다. 따라서 이것을 쓰면, 접두어'ns2 '는 사용할 수 없습니다. NS에 구속력이 없습니다. – lkuty

+0

"비어있는 NS"가 존재하지 않습니다. 그것이 존재한다고 생각하면 혼란을 겪을 것입니다. Ronald Bourret의 [Namespace Myths Exploded] (http://www.rpbourret.com/xml/NamespaceMyths.htm)를 참조하십시오. – lkuty