수색…


비고

XML의 요소 W 속성 이름은 QName (규정 된 이름)이라고합니다.

QName은 다음으로 구성됩니다.

  • 네임 스페이스 (URI)
  • 접두사 (콜론을 포함하지 않기 때문에 NCName, NC)
  • 로컬 명 (NCName)

네임 스페이스와 로컬 이름 만 두 개의 QName을 비교하는 데 관련이 있습니다. 접두사는 네임 스페이스에 대한 프록시 일뿐입니다.

네임 스페이스와 접두사는 선택 사항이지만 접두사가 있으면 네임 스페이스가 항상 존재합니다 (구문 수준에서 보장되므로 잘못 할 수는 없습니다).

QName의 어휘 표현은 prefix:local-name 입니다. 네임 스페이스는 특수 xmlns:... 속성을 사용하여 별도로 바인딩됩니다 (알림 : xml 로 시작하는 속성은 XML 로 예약 됨).

접두사가 비어 있으면 QName의 어휘 표현에 콜론이 사용되지 않으며 local-name 만 포함됩니다. 빈 접두사가있는 QName은 네임 스페이스가 없거나 (기본 네임 스페이스가 범위에없는 경우) 기본 네임 스페이스에 있습니다.

네임 스페이스에 접두사를 바인딩

네임 스페이스는 URI이지만 자세한 정보를 피하기 위해 접두사는 프록시로 사용됩니다.

다음 예제에서 접두사 my-prefix 는 특수 속성 xmlns:my-prefix 를 사용하여 http://www.example.com/my-namespace 네임 스페이스에 바인딩됩니다 ( my-prefix 는 다른 접두사로 바꿀 수 있음) :

<?xml version="1.0"?>
<my-prefix:foo xmlns:my-prefix="http://www.example.com/my-namespace">
  <!-- the element my-prefix:foo
       lives in the namespace http://www.example.com/my-namespace -->
</my-prefix:foo>

네임 스페이스 부재

XML에서 요소 및 속성 이름은 네임 스페이스에 있습니다.

기본적으로 네임 스페이스가 없습니다.

<?xml version="1.0"?>
<foo attr="value">
  <!-- the foo element is in no namespace, neither is the attr attribute -->
</foo>

접두사의 부적합

이 두 문서는 이름 공간이 중요하므로 접두어가 아닌 의미 상 동등합니다.

<?xml version="1.0"?>
<myns:foo xmlns:myns="http://www.example.com/my-namespace">
</myns:foo>

<?xml version="1.0"?>
<ns:foo xmlns:ns="http://www.example.com/my-namespace">
</ns:foo>

기본 네임 스페이스

기본 네임 스페이스는 접두어가없는 네임 스페이스입니다. 특별한 xmlns 속성으로 선언 될 수 있습니다.

<?xml version="1.0"?>
<foo xmlns="http://www.example.com/my-namespace">
  <!-- the element foo is in the namespace
       http://www.example.com/my-namespace -->
</foo>

기본 네임 스페이스가 선언되지 않은 경우 접두사가없는 이름은 네임 스페이스에 없습니다.

접두사가없는 속성 이름

요소와 속성은 기본 네임 스페이스와 다르게 동작합니다. 이것은 종종 혼란의 원천입니다.

접두어가없는 이름의 속성 은 기본 네임 스페이스가 범위 내에있는 경우에도 네임 스페이스에 없습니다.

<?xml version="1.0"?>
<foo attr="value" xmlns="http://www.example.com/my-namespace">
  <!-- The attribute attr is in no namespace, even though
       a default namespace is in scope. The element foo,
       however, is in the default namespace. -->
</foo>

네임 스페이스 바인딩 범위

네임 스페이스 바인딩 (특수 xmlns 또는 xmlns:... 속성)은이 요소를 포함하여 둘러싸는 요소의 모든 자손에 대해 범위 내에 있습니다.

<?xml version="1.0"?>
<root>
  <my:element xmlns:my="http://www.example.com/ns1">
    <!-- here, the prefix my is bound to http://www.example.com/ns1 -->
  </my:element>
  <my:element xmlns:my="http://www.example.com/ns2">
    <!-- here, the prefix my is bound to http://www.example.com/ns2 -->
  </my:element>
</root>

바인딩은 중첩 된 요소에서 오버라이드 될 수 있습니다 (이것은 가독성에 영향을줍니다).

<?xml version="1.0"?>
<my:element xmlns:my="http://www.example.com/ns1">
  <!-- here, the prefix my is bound to http://www.example.com/ns1 -->
  <my:first-child-element/>

  <my:child-element xmlns:my="http://www.example.com/ns2">
    <!-- here, the prefix my is bound to http://www.example.com/ns2,
         including for the element my:child-element -->
  </my:child-element>

  <!-- here, the prefix my is bound to http://www.example.com/ns1 -->
  <my:last-child-element/>

</my:element>

루트 요소에 모든 네임 스페이스 바인딩을 선언하는 것이 매우 일반적이므로 가독성이 향상됩니다.

<?xml version="1.0"?>
<root
  xmlns="http://www.example.com/default-namespace"
  xmlns:ns1="http://www.example.com/ns1"
  xmlns:ns2="http://www.example.com/ns2">
  
  <ns1:element>
    <ns2:other-element/>
  </ns1:element>

</root>


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow