문제

이것은 제가 항상 다른 사람들에게 설명하기가 조금 어렵다고 생각하는 것입니다.XML 네임스페이스가 존재하는 이유는 무엇입니까?언제 사용해야 하며 언제 사용하지 말아야 합니까?XML에서 네임스페이스로 작업할 때 흔히 발생하는 함정은 무엇입니까?

또한 XML 스키마와 어떤 관련이 있습니까?XSD 스키마는 항상 네임스페이스와 연결되어야 합니까?

도움이 되었습니까?

해결책

요소 및 속성 이름의 충돌에 대해 걱정할 필요없이 여러 마크 업 언어를 결합 할 수 있습니다.

예를 들어, 약간의 XSLT 코드를 살펴본 다음 네임 스페이스를 사용하지 않았고 출력에 "템플릿", "각인"등이 포함되어야하는 XSLT를 작성하려는 경우 어떻게 될지 생각해보십시오. . 구문 오류는 무엇입니다.

나는 나보다 더 많은 경험을 가진 다른 사람들에게 조언과 함정을 남겨 둘 것이다.

다른 팁

XML 네임 스페이스가 존재하는 이유는 무엇입니까?

1997 년에 W3C의 매우 영향력있는 사람들은 그들을 원했고 답을 얻지 못할 것이기 때문입니다. 그것이 입증되었을 때조차도, 나는 그들이 생각한 "문제"를 해결하는 더 좋은 방법이 있다고 결론을 내렸다.

XML 네임 스페이스를 둘러싼 광범위한 신화에서 가장 큰 소리는 그들에게 기술적 인 장점이 있다는 것입니다. (이것은 단순히 존재하는 추천의 다운 스트림 효과입니다. 따라서 Mindspace를 점령합니다.

많은 고통, 이득이 없습니다.

언제 우리는 그것들을 사용해야하며 언제해야합니까?

도움을 줄 수 있다면 절대 사용해서는 안됩니다. 불행히도, 이해 당사자 들의이 나쁜 [*] 장치의 끊임없는 홍보는 오늘날 XML 네임 스페이스와 경쟁 할 필요가 없어서 오늘날 Clusterf*ck 사양의 사양을 촉진 시켰습니다. 따라서 XML 네임 스페이스를 직접 피해도 모든 방향에서 당신에게 오는 네임 스페이스가 강화 된 크루드를 찾을 수 있습니다.

XML에서 네임 스페이스로 작업 할 때 일반적인 함정은 무엇입니까?

매우 일반적인 함정 중 하나는 네임 스페이스가 "기본값"이있는 문서와 함께 XPath 표현식을 사용하는 것입니다. 네임 스페이스는 표현식에서 명시 적이어야합니다. 또 다른 문제는 문서를 구성 할 때 "올바르게"사용하는 것입니다. 그들은 얇은 공기에서 문제를 만듭니다.

또한 XML 스키마와 어떤 관련이 있습니까? XSD 스키마는 항상 네임 스페이스와 연관되어야합니까?

XSD 스키마 사양이위원회의 모든 사람들이 XML 네임 스페이스 비트를 치아에 가지고있는 시점에 개발되었다는 점을 제외하고는 필요한 관계가 없습니다. 그래서 그들은 최대한 깊이 일했습니다. 그럼에도 불구하고 네임 스페이스가없는 XSD 스키마를 사용하는 것은 가능하지만 XSD Schemas를 지원하는 거의 모든 도구 세트가 네임 스페이스를 "원하는"것으로 가정하면 가파른 오르막 슬로그입니다.

*] bad = 설계된대로 깨졌습니다

업데이트: 이 비 문제가 아닌 문제에 대한 오래된 에세이.

"Java/C#에 패키지를 사용하는 이유는 무엇입니까?"라고 묻는 것과 거의 같습니다.

  • 재사용 성: 다양한 유형의 XML 문서에서 정의하는 태그/속성 세트를 재사용 할 수 있습니다.
  • 모듈성: XML에 "측면"을 추가 해야하는 경우; XML 문서에 네임 스페이스를 추가하는 것은 전체 XML 스키마 정의를 변경하는 것보다 간단합니다.
  • "메인"네임 스페이스를 폴란드하지 마십시오: 파서가 거대한 스키마 정의로 작업하도록 강요하지 않고 필요한 네임 스페이스 만 사용하십시오.

IMHO의 가장 큰 함정은 문서를 해석하는 인간 상호 작용입니다.XML 문서를 처리하는 코드를 개발합니다.문서를 분석한 정보 세트 결과보다는 문서의 리터럴 표현에 집중하기가 너무 쉽습니다.

예를 들어다음 노드

<a xmlns="uri:foo"/>
<foo:a xmlns:foo="uri:foo"/>
<bar:a xmlns:bar="uri:foo"/>

의미상 모두 동일하지만 순진한 눈으로 보기에는 매우 다릅니다.

첫 번째 예에서는 XPath를 개발할 때 매우 흔한 실수가 발생합니다. 즉, "a"가 네임스페이스에 있다는 사실이 누락되어 //a가 일치하는 항목을 생성하지 않습니다.(또는 더 나쁘게도 여전히 다른 네임스페이스의 노드와 일치하고 있습니다!)

세 번째 예는 접두사 텍스트가 의미상 중요하다는 또 다른 이해의 결함을 드러냅니다.XPATH로 문서를 구문 분석할 때 URI가 문서의 URI와 일치하는 한 일치를 위해 원하는 접두사를 선언할 수 있습니다.

요소 유형의 성으로 생각하십시오. 밥이라는 두 명의 친구가 있고 그중 하나에 대해 이야기하고 있다면 누군가 밥이 당신에 대해 말하는 밥을 물을 수도 있습니다. "Bob"이라고 말하는 것은 그다지 도움이되지 않으므로 "Bob Smith"또는 "Bob Jones"라고 말합니다.

요소 유형과 동일합니다. 다른 사람들이 같은 이름을 선택할 수 있기 때문에 짧은 이름만으로는 충분하지 않습니다. 따라서 다른 밥을 구별하기 위해 URI를 "성"으로 포함시킵니다.

XML은 초고심이며, 이는 XML 기반 언어의 기초임을 의미합니다 (의미가 있습니까?). XML을 어떤 언어로든 문장을 쓸 수있는 펜으로 생각하십시오. 그것은 모두 작가에 달려 있으며, 바람직하게는 언어를 독자에게 알려야합니다.

XML 네임 스페이스 기본적으로 "영어"또는 "עבר거나"와 같은 언어의 이름입니다. XML 문서의 수신자가 구문 분석하고 내에서 정보를 추출하도록 도와줍니다.

가구 공장이 있고 가구 상점이 있다고 가정 해 봅시다. 스토리지 애플리케이션과 공급 애플리케이션은 완전히 관련이 없지만 XML 메시지를 통해 통신 할 때 메시지를 이해하기 쉽고 양쪽에 의해 쉽게 구문 분석해야합니다.

따라서 두 시스템 모두를 알아야합니다 개요, 언어 구문 및 합의 된 제한을 정의합니다. 스키마를 사전 및 문법 교과서로 생각하십시오. 스키마는 두 시스템 모두가 알아야 할 문서, 누구든지 각 시스템에서 구문 분석 코드를 작성하고 네임 스페이스의 선언을 포함하는 문서입니다.

각 네임 스페이스는 URI로 명명되었으며 대부분의 경우 스키마 문서의 위치입니다.

물론 모든 XML 문서에 네임 스페이스가 필요한 것은 아닙니다. 특히 정보를 원격 시스템으로 전달하는 데 사용되지 않는 경우. 예를 들어, 데이터베이스에서 지속되는 객체를 XML로 직렬화 할 때.

우리는 Xeep이 자신의 개인 아이다 호에서 다른 것을 의미하기 위해 같은 단어를 사용하기를 원하기 때문에 네임 스페이스를 사용합니다. 일반적으로 사람이 의미하는 바에서 문맥에서 결정할 수 있습니다. 인사 데이터베이스에서 XML은 인사 기록입니다. 차량 레지스트리 데이터베이스에서 XML은 차량 레지스트리 레코드입니다.

둘 다 "위치"라는 태그를 유지하지만 태그는 각각의 다른 것을 의미하며 다른 필드를 포함합니다.

이제 멋지다 : 그러나 동일한 데이터베이스에 XML을 모두 저장하려면 어떻게해야합니까? 또는 더 흥미롭게도 두 데이터베이스가 다른 공통 데이터베이스 (예 : 계정 데이터베이스)에서 XML 청크를 저장하려는 경우 어떻게해야합니까?

XML 네임 스페이스는 각 XML 태그 A URI와 관련하여 태그 이름 자체가 URL 앞에 URL이 있도록 태그 이름의 일부입니다 (물론 실제 XML 문서는 속기를 사용합니다). URI를주의 깊게 선택하면 태그 이름이 충돌하지 않을 것이라고 확신하기 쉽습니다. 마치 두 위치 태그의 이름이 완전히 다르게 명명 된 것처럼 혼동이 없습니다. 보너스로, 완전히 다른 두 개의 위치 태그에는 계정 데이터베이스의 물건이 포함될 수 있으며, 같은 것에 대해 이야기하고 있다고 명시 적으로 명시하고 있습니다.

이 모든 것을 유용하게 만드는 것은 XPath입니다.

위의 말로, 당신은 다음과 같은 말을하는 xpath 표현을 쓸 수 있습니다. accounts:account overdue 이 XML의 어디서나 섹션. 또는 : 나를 찾으십시오 accounts:warning message 경고 메시지가 자식 노드 (그러나 깊은) 의이 특정 XML 덩어리의 어느 곳에서나 항목 personnel:payment 노드 또는 a vehicle:status 마디.

XPath 표현식은 XSLT 문서의 어딘가에 사용될 수 있으며, 그 작업은 XML을 XHTML 또는 XPDF로 변환하여 표시됩니다.

보상은 무엇입니까? 왜 그렇게합니까? XML 로그 파일을 검색 할 수 있으므로 표시되는 곳마다 기한이 지난 모든 계정을 꺼내십시오. 다른 시스템에서 생성 한 "메시지"태그와 혼동하지 않고, 'em을 XHTML로 변환하고 CSS 태그를 통해 대담한 빨간색으로 표시하십시오. 절차 코드 스크랩을 쓰지 않고 모두.

예를 들어: 예제별 XML 네임 스페이스

내 말에 따르면 : 외부 회사에 XML 형식을 사용해야하는 경우 (예 : XML 문서에 동일한 이름을 가진 일부 정보를 제공 해야하는 경우 네임 스페이스가 필요합니다. 예시:

<sampleDoc>
   <header title="Hello world!">
      <items>
         <item name="Volvo" color="Blue"/>
      </items>
   </header>
</sampleDoc>

그리고 일부 데이터를이 문서에 병합하려면 이름이 같지만 다른 의미 (값)를 사용하려면 네임 스페이스를 사용해야합니다.

<sampleDoc>
   <header title="Hello world!">
      <items>
         <item name="Volvo" color="White" my_unique_namespace:color="#FFFFFF"/>
      </items>
   </header>
</sampleDoc>

물론 - 속성 이름을 변경할 수 있습니다. 예를 들어 "my_unique_color"입니다. 다른 문서에서 버드로 다시 같은 이름의 속성이있을 수 있습니다. 따라서 고유 한 네임 스페이스 (예 : 웹 도메인)가있는 경우 항상 문제가있는 동일한 요소 및/또는 속성을 사용할 수 있습니다.

로부터 W3 추천...

XML 네임 스페이스는 URI 참조로 식별 된 네임 스페이스와 연관시켜 확장 가능한 마크 업 언어 문서에 사용되는 자격 요소 및 속성 이름을위한 간단한 방법을 제공합니다.

네임 스페이스는 문서 내에서 사용하는 이름을 명확하게하는 데 사용됩니다. 또한 짧은 이름을 이름 공간에 바인딩 할 수있는 기능을 제공하여 원격 요소 또는 속성을 참조하는 데 사용할 수 있습니다. 이름 공간 자체는 문서에서 사용하는 요소와 속성을 정의하는 위치를 나타냅니다. 알아야 할 것이 더 많지만 그것은 그것의 핵심입니다. 더 많은 정보가 있습니다 여기.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top