XML 네임 스페이스는 무엇입니까?
이것은 제가 항상 다른 사람들에게 설명하기가 조금 어렵습니다. XML 네임 스페이스가 존재하는 이유는 무엇입니까? 언제 사용하고 사용하지 않아야합니까? XML에서 네임 스페이스로 작업 할 때 일반적인 함정은 무엇입니까?
또한 XML 스키마와 어떤 관련이 있습니까? XSD 스키마는 항상 네임 스페이스와 연결되어야합니까?
요소와 속성 이름의 충돌에 대해 걱정할 필요없이 여러 마크 업 언어를 결합 할 수 있습니다.
예를 들어 XSLT 코드를 살펴본 다음 네임 스페이스를 사용하지 않고 출력에 "template", "for-each"등의 요소가 포함되어야하는 XSLT를 작성하려고하면 어떤 일이 발생할지 생각해보십시오. . 구문 오류는 무엇입니까?
나는 나보다 경험이 많은 다른 사람들에게 조언과 함정을 맡길 것입니다.
XML 네임 스페이스가 존재하는 이유는 무엇입니까?
1997 년에 W3C에서 매우 영향력있는 일부 사람들이 그들을 원했고 대답을 거부하지 않았기 때문입니다. 시연되었을 때조차도 그들이 가지고 있다고 생각한 "문제"를 해결하는 더 좋은 방법이 있었지만 W3C 권장 사항에 자신의 욕구를 기록하기 위해 여전히 영향력을 행사했다고 결론을 내 렸습니다.
지금까지 XML 네임 스페이스를 둘러싼 광범위한 신화에서 가장 큰 이유는 기술적 장점이 있다는 것입니다. (이것은 어딘가에서 잊을 수있는 각주와는 대조적으로 단순히 존재하고 따라서 마인드 스페이스를 점유하는 권고의 다운 스트림 효과입니다. "이런, (좋은) 이유가 있어야합니다!").
언제 사용하고 사용하지 않아야합니까?
당신이 그것을 도울 수 있다면 절대 사용해서는 안됩니다. 안타깝게도 이해 관계자가이 BAD [*] 장치를 끊임없이 홍보하면서 오늘날 어느 시점에서나 다른 시점에서 XML 네임 스페이스와 경쟁 할 필요가없는 사실상 불가능한 사양의 클러스터를 조성했습니다. 따라서 XML 네임 스페이스를 직접 피하더라도 모든 방향에서 네임 스페이스가 포함 된 크 러드가 다가오는 것을 발견 할 수 있습니다. 더 나쁜 것은 그러한 크 러드를 제공하지 않으면 작동을 거부하는 도구 세트입니다.
XML에서 네임 스페이스로 작업 할 때 일반적인 함정은 무엇입니까?
하나의 매우 일반적인 함정은 네임 스페이스가 "기본값"인 문서에서 Xpath 표현식을 사용하는 것입니다. 네임 스페이스는 표현식에서 명시 적이어야합니다. 또 다른 문제는 문서 를 작성할 때 "올바르게"사용하는 것 입니다. 즉, 허공에서 문제가 발생합니다 .
또한 XML 스키마와 어떤 관련이 있습니까? XSD 스키마는 항상 네임 스페이스와 연결되어야합니까?
위원회의 거의 모든 사람들이 XML 네임 스페이스 비트를 가지고있을 때 XSD 스키마 사양이 개발되었다는 점을 제외하고는 필요한 관계가 없습니다. 그래서 그들은 가능한 한 깊게 작업했습니다. 그럼에도 불구하고 네임 스페이스없이 XSD 스키마를 사용하는 것은 가능하지만 XSD 스키마를 지원하는 거의 모든 도구 세트가 네임 스페이스 사용을 "원"한다고 가정하기 때문에 가파른 오르막입니다.
[*] BAD = 설계된대로 손상됨
업데이트 : 문제없는 문제에 대한이 문제 해결에 대한 오래된 에세이 .
"Java / C # 용 패키지를 사용하는 이유"를 묻는 것과 거의 같습니다.
- 재사용 성 : 여러 유형의 xml 문서에서 정의한 태그 / 속성 세트를 재사용 할 수 있습니다.
- 모듈성 : XML에 "측면"을 추가해야하는 경우; xml 문서에 네임 스페이스를 추가하는 것은 전체 xml 스키마 정의를 변경하는 것보다 간단합니다.
- "main"네임 스페이스를 poluting하지 마십시오 : 파서가 거대한 스키마 정의를 사용하도록 강제하지 않고 필요한 네임 스페이스를 사용하십시오.
IMHO의 가장 큰 함정은 XML 문서를 처리하기위한 코드를 개발하기 위해 문서를 해석하는 인간 상호 작용입니다. 문서를 구문 분석 한 정보 집합 결과보다는 문서의 리터럴 표현에 집중하기가 너무 쉽습니다.
예 : 다음 노드
<a xmlns="uri:foo"/>
<foo:a xmlns:foo="uri:foo"/>
<bar:a xmlns:bar="uri:foo"/>
모두 의미 상 동일하지만 순진한 눈과는 매우 다릅니다.
첫 번째 예제는 XPath를 개발하는 매우 일반적인 실수를 생성합니다. "a"가 네임 스페이스에 있다는 사실이 누락되었습니다. 따라서 // a는 일치하지 않습니다. (또는 다른 네임 스페이스에서 여전히 일치하는 노드가 더 나쁩니다!)
세 번째 예제는 접두사 텍스트가 의미 상 중요하다는 이해에 또 다른 결함을 엽니 다. XPATH로 문서를 구문 분석 할 때 uri가 문서의 것과 일치하는 한 내가 원하는 접두사를 선언 할 수 있습니다.
요소 유형의 성으로 생각하십시오. 둘 다 Bob이라는 친구가 두 명 있고 그중 하나에 대해 이야기하고 있다면 누군가 당신이 말하는 Bob을 물을 것입니다. "Bob"이라고 말하는 것은별로 도움이되지 않으므로 "Bob Smith"또는 "Bob Jones"라고 말합니다.
요소 유형도 동일합니다. 다른 사람들이 같은 이름을 고를 수 있기 때문에 짧은 이름으로는 충분하지 않을 수 있습니다. 따라서 다른 Bob을 구별하기 위해 URI를 "성"으로 포함합니다.
XML은 모든 XML 기반 언어의 기초가된다는 것을 의미하는 초 국어입니다 (맞습니까?). XML을 어떤 언어로든 어떤 문장이든 쓸 수있는 펜으로 생각하십시오. 그것은 모두 작가에 달려 있으며, 언어는 독자에게 알려야합니다.
XML 네임 스페이스 는 기본적으로 "영어"또는 "히브리어"와 같은 언어의 이름입니다. 나는 XML 문서의 수신자가 그것을 구문 분석하고 그 안의 정보를 추출하도록 돕습니다.
제가 가구 공장이 있고 가구점이 있다고 가정 해 봅시다. 스토리지 애플리케이션과 내 공급 애플리케이션은 전혀 관련이 없지만 XML 메시지를 통해 통신 할 때 메시지를 이해할 수 있고 양쪽에서 쉽게 구문 분석 할 수 있어야합니다.
따라서 두 시스템 모두 언어 구문과 합의 된 제한을 정의하는 Schema 를 알아야합니다 . 스키마를 사전과 문법 교과서로 생각하십시오. 스키마는 두 시스템 모두 알아야하며 각 시스템에서 구문 분석 코드를 작성하는 사람이 알아야하며 네임 스페이스의 선언을 포함하는 문서입니다.
각 네임 스페이스는 URI로 이름이 지정되며 대부분의 경우이를 정의하는 스키마 문서의 위치입니다.
물론 모든 XML 문서에 네임 스페이스가 필요한 것은 아닙니다. 특히 원격 시스템에 정보를 전달하는 데 사용되지 않는 경우에는 더욱 그렇습니다. 예를 들어, 데이터베이스에서 유지하기 위해 객체를 XML로 직렬화하는 경우입니다.
우리는 네임 스페이스를 사용합니다. 왜냐하면 사람들은 같은 단어를 사용하여 자신의 개인 아이다 호에서 다른 것을 의미하기를 원하기 때문입니다. 일반적으로 문맥에서 사람이 의미하는 바를 결정할 수 있습니다. 인사 데이터베이스에서 XML은 인사 기록입니다. 차량 등록 데이터베이스에서 XML은 차량 등록 레코드입니다.
둘 다 "location"이라는 태그를 유지하지만 태그는 각각에 대해 다른 의미를 가지며 다른 필드를 포함합니다.
이제 멋지다.하지만 둘 다의 XML을 동일한 데이터베이스에 저장해야하거나 저장하려면 어떻게해야할까요? 또는 더 흥미롭게도 두 데이터베이스가 다른 공통 데이터베이스 (예 : 계정 데이터베이스)의 XML 청크를 저장하려면 어떻게해야합니까?
XML 네임 스페이스는 각 XML 태그와 URI를 연결하여 태그 이름 자체가 태그 이름의 일부인 URL을 앞에 갖도록합니다 (물론 실제 XML 문서에서는이 작업을 수행하는 속기 사용). URI를 신중하게 선택하면 태그 이름이 충돌하지 않을 것임을 쉽게 확신 할 수 있습니다. 마치 두 위치 태그의 이름이 완전히 다른 것이므로 혼동이 없습니다. 보너스로 완전히 다른 두 위치 태그에는 계정 데이터베이스의 항목이 포함될 수 있으며 동일한 항목에 대해 언급하고 있음을 명시 적으로 표시 할 수 있습니다.
이 모든 것을 유용하게 만드는 것은 XPATH입니다.
With the above, you can start to write XPATH expressions that say things like: find me any accounts:account overdue
sections anywhere in this xml. Or: find me any accounts:warning message
items anywhere in this particular chunk of XML, where the warning message is a child node (however deep) of either a personnel:payment
node or a vehicle:status
node.
That XPATH expression might be used somewhere in an XSLT document, whose job it is to convert the XML into XHTML or XPDF, for display.
What's the payoff? Why do it? Because you can search the XML logfile, pull out all the accounts overdue messages wherever they appear, without confusing them with "message" tags produced by other systems, convert 'em to xhtml, and display them in bold red via a css tag: all without writing a scrap of procedural code.
For example: XML Namespaces by Example
In my words: If you must use some XML format for external company ( for example ) and you need provide in XML document some informations, which has same name, you need a namespace. Example:
<sampleDoc>
<header title="Hello world!">
<items>
<item name="Volvo" color="Blue"/>
</items>
</header>
</sampleDoc>
and you want merge some data into this document, which has a same name, but another sense ( so value to ), you should use a namespace:
<sampleDoc>
<header title="Hello world!">
<items>
<item name="Volvo" color="White" my_unique_namespace:color="#FFFFFF"/>
</items>
</header>
</sampleDoc>
Ofcourse - you can change a name of attribute. For example to "my_unique_color". Bud in another document, there can be attribute with same name again. So, if you have a unique namespace ( our web domain for example ), you can always use the same names of elements and/or attributes withoud any problems.
From the W3 recommendation...
XML namespaces provide a simple method for qualifying element and attribute names used in Extensible Markup Language documents by associating them with namespaces identified by URI references.
Namespaces are used to disambiguate names that you use within the document. It also gives you the ability to bind a short name to a name space that can then be used to refer to a remote element or attribute. The name space itself refers to the location that defines the elements and attributes you use in the document. There is a lot more to know, but that is the heart of it. There is a lot more information here.
참고URL : https://stackoverflow.com/questions/128389/what-are-xml-namespaces-for
'Program Tip' 카테고리의 다른 글
git에서 커밋 마스터 포인트를 어떻게 변경할 수 있습니까? (0) | 2020.11.08 |
---|---|
Eclipse / Maven : JUnit 테스트를 실행할 때 컴파일되지 않음 (0) | 2020.11.08 |
StackOverflowException을 방지 및 / 또는 처리하려면 어떻게해야합니까? (0) | 2020.11.08 |
브라우저가 gzip 요청을 보낼 수없는 이유는 무엇입니까? (0) | 2020.11.08 |
CDT 위에 Eclipse JDT 설치 (0) | 2020.11.08 |