복붙노트

[SPRING] XML 네임 스페이스는 어떻게 작동합니까?

SPRING

XML 네임 스페이스는 어떻게 작동합니까?

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"

       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.1.xsd">

  <context:component-scan
      base-package="com.springinaction.chapter01.knight" />

</beans>

위의 예는 여러 네임 스페이스가있는 XML 파일의 예를 보여줍니다. 이 네임 스페이스의 목적은 무엇이며 가장 중요한 것은 인터넷 연결이없는 곳에서도 작동한다는 것입니다.

xsi : schemaLocation으로 시작하는 두 번째 비트는 XML 문서의 구조를 확인하는 데 사용되는 XML 스키마 파일을 포함한다고 생각합니다. 네트워크에없는 컴퓨터에서이 구성 파일을 사용하는 응용 프로그램을 실행하면 어떻게 계속 작동합니까? URL이 어떻게 JAR 파일의 별명입니까?

해결법

  1. ==============================

    1.이 XML 문서가 있다고 가정 해 보겠습니다.

    이 XML 문서가 있다고 가정 해 보겠습니다.

    <?xml version="1.0" encoding="UTF-8"?>
    <html>
          <body>
            Your text here
          </body>
          <body>
            <height>182 cm</height>
            <weight>83 kg</weight>
          </body>
    </html>
    

    여기에는 HTML 렌더러에 의미 론적 의미가있는 body 태그가있는 HTML이 포함됩니다. 또한 특정 사람에 대한 정보를 전달하는 또 다른 body 태그가 있습니다. 네임 스페이스는이 태그의 의미 범위를 정의합니다. 네임 스페이스가 없으면 (예에서와 같이) 구문 분석기가 구문적으로 동일하므로 차이점을 알리는 것은 불가능합니다.

    다음은 동일한 문서의 의미 상 올바른 버전입니다.

    <?xml version="1.0" encoding="UTF-8"?>
    <html:html xmlns:html="http://www.w3.org/TR/xhtml1/">
      <html:body>
        Your text here
      </html:body>
      <human:body xmlns:html="http://www.example.com/human/">
        <human:height>182 cm</human:height>
        <human:weight>83 kg</human:weight>
      </human:body>
    </html:html>
    

    따라서 네임 스페이스 덕택에 서로 다른 의미의 태그가 충돌하는 것에 대해 걱정할 필요가 없습니다.

    네임 스페이스 URI 자체는 실제로 해결되지 않으며 임의적입니다 (따라서 오프라인으로 사용할 수 있음).

  2. ==============================

    2.많은 네임 스페이스 이름이 브라우저에 입력 할 수있는 URL처럼 보이는 사실을 무시하십시오. 그들은 단지 문자의 임의의 문자열입니다, 그들은 웹상에서 자원의 주소가 아닙니다. 사람들이이 컨벤션을 채택한 이유는 이름을 "소유하고있는"사람이 누구인지 보여주기 때문입니다. 이름 공간 이름으로 "xsd1.0"을 선택한 경우보다 http://www.w3.org/2001/XMLSchema가 참조하는 것이 더 명확합니다. 실수로 다른 사람이 선택한 이름과 충돌 할 확률이 적습니다. 어떤 사람들은 관련 위치에 문서를 넣을 수 있다는 사실을 좋아하지만 XML 소프트웨어는 문서를 자동으로 찾지 않습니다.

    많은 네임 스페이스 이름이 브라우저에 입력 할 수있는 URL처럼 보이는 사실을 무시하십시오. 그들은 단지 문자의 임의의 문자열입니다, 그들은 웹상에서 자원의 주소가 아닙니다. 사람들이이 컨벤션을 채택한 이유는 이름을 "소유하고있는"사람이 누구인지 보여주기 때문입니다. 이름 공간 이름으로 "xsd1.0"을 선택한 경우보다 http://www.w3.org/2001/XMLSchema가 참조하는 것이 더 명확합니다. 실수로 다른 사람이 선택한 이름과 충돌 할 확률이 적습니다. 어떤 사람들은 관련 위치에 문서를 넣을 수 있다는 사실을 좋아하지만 XML 소프트웨어는 문서를 자동으로 찾지 않습니다.

  3. ==============================

    3.XML 네임 스페이스는 요소 이름의 구성 요소이며 xmlns : = ""를 작성할 때 접두사에 바인딩 할 수 있습니다. 이렇게하면 서로 다른 XML 스키마 간의 이름 지정 충돌을 피할 수 있으므로 동일한 이름을 가진 두 스키마의 요소를 혼합 할 수 있습니다. 예를 들어, 두 가지 스키마가 서로 다른 의미를 갖는 링크 요소를 가질 수 있으며 네임 스페이스 접두사를 사용하면 foo : link 또는 bar : link를 작성하여 두 가지 스키마를 구별 할 수 있습니다. 네임 스페이스는 일반적으로 URL 형식이지만 파서는 문자열로 취급하므로 URL에서 아무 것도 가져 오지 않습니다.

    XML 네임 스페이스는 요소 이름의 구성 요소이며 xmlns : = ""를 작성할 때 접두사에 바인딩 할 수 있습니다. 이렇게하면 서로 다른 XML 스키마 간의 이름 지정 충돌을 피할 수 있으므로 동일한 이름을 가진 두 스키마의 요소를 혼합 할 수 있습니다. 예를 들어, 두 가지 스키마가 서로 다른 의미를 갖는 링크 요소를 가질 수 있으며 네임 스페이스 접두사를 사용하면 foo : link 또는 bar : link를 작성하여 두 가지 스키마를 구별 할 수 있습니다. 네임 스페이스는 일반적으로 URL 형식이지만 파서는 문자열로 취급하므로 URL에서 아무 것도 가져 오지 않습니다.

    두 번째 부분 인 XSI : SchemaLocation 요소가 옳습니다. 네트워크 연결없이 여전히 스키마의 유효성을 검사 할 수있는 이유에 대해서는이 대답을 참조하십시오.

  4. ==============================

    4.일반적으로 네임 스페이스는 태그 간의 충돌을 피하는 것이지만 장면 뒤에서는 일부 스키마에 대한 파서의 처리 명령입니다. 예를 들어 다른 문서 유형, 엄격한 Xhtml 등이있는 브라우저에서는 브라우저에 어딘가에 저장된 스키마가 있고 파서는 구조를 확인하기위한 스키마를 참조합니다.

    일반적으로 네임 스페이스는 태그 간의 충돌을 피하는 것이지만 장면 뒤에서는 일부 스키마에 대한 파서의 처리 명령입니다. 예를 들어 다른 문서 유형, 엄격한 Xhtml 등이있는 브라우저에서는 브라우저에 어딘가에 저장된 스키마가 있고 파서는 구조를 확인하기위한 스키마를 참조합니다.

    Spring에서 특정 스키마를 사용할 수있게되면 해당 스키마가있는 참조가 필요하며 URI 스키마가 의미가 없음을 의미하지는 않습니다. 관련 .jar 파일이 class-path에 필요하므로 파서가이를 참조합니다. org.springframework.context-4.1.jar. 이 jar 파일을 살펴보면 spring-context-2.5.xsd 파일이있는 org.springframework.context.config 패키지를 찾을 수 있습니다. 정의 : xmlns : context = "http://www.springframework.org/schema/context"

    xsi:schemaLocation="http://www.springframework.org/schema/context/spring-context-2.5.xsd">
    

    xmlns는 편집기를 통해 미리 구성된 방법을 사용하여 xmlns : context에서 제공되는

     <context:annotation-config> 
    

    TURN을 사용하면 Bean 클래스에서 다양한 주석을 감지 할 수 있습니다.   @Required @Autowired, @PostConstruct, @PreDestroy 및 @Resource 등.

    그래서 파서는 실제로 콩을 파싱하는 동안 의미를 발견 할 것입니다.

    스키마가 필요하며 적어도 IDE 또는 응용 프로그램이 유효성 검사에 사용할 코드를 다운로드해야합니다. 그렇지 않으면 유효성 검사 예외가 생성됩니다. 그 항아리 내에서 로컬로 사용할 수 있으면 다운로드를 찾지 않습니다.

  5. from https://stackoverflow.com/questions/8863233/how-do-xml-namespaces-work by cc-by-sa and MIT license