XML 네임스페이스의 용도는 무엇입니까?
이것은 제가 항상 다른 사람들에게 설명하기 어려운 것입니다.XML 네임스페이스가 존재하는 이유는 무엇입니까?우리는 언제 그것들을 사용해야 하고 언제 사용하지 말아야 합니까?XML에서 네임스페이스로 작업할 때 일반적으로 발생하는 문제점은 무엇입니까?
또한 XML 스키마와 어떤 관계가 있습니까?XSD 스키마를 항상 네임스페이스와 연결해야 합니까?
요소와 속성 이름의 충돌에 대한 걱정 없이 여러 마크업 언어를 결합할 수 있도록 하기 위한 것입니다.
예를 들어, XSLT 코드의 임의의 부분을 살펴본 다음 네임스페이스를 사용하지 않고 출력에 "템플릿", "각각" 등의 요소가 포함되어야 하는 XSLT를 작성하려고 하면 어떻게 되는지 생각해 보십시오.구문 오류, 그게 뭐죠?
나보다 더 경험이 많은 사람들에게 조언과 함정을 맡기겠습니다.
XML 네임스페이스가 존재하는 이유는 무엇입니까?
왜냐하면, 1997년에, W3C의 매우 영향력 있는 몇몇 사람들은 그들을 원했고, 거절을 대답으로 받아들이려 하지 않았기 때문입니다.그것이 증명되었을 때에도, 저는 감히 결론적으로, 그들이 가지고 있다고 생각했던 "문제"를 해결하기 위한 더 나은 방법들이 있다고 말할 수 있지만, 그들은 여전히 그들의 욕망을 W3C 추천서에 기록하기 위해 영향력을 행사했습니다.
현재 XML 네임스페이스를 둘러싼 광범위한 신화에서 가장 큰 반향을 일으키고 있는 것은 이들에게 기술적인 장점이 있다는 것입니다. (이것은 단순히 존재하는 권장사항의 하류 효과이며, 따라서 마음의 공간을 점유하고 있다는 것입니다.) "이런, (좋은) 이유가 있을 거야!"라는 것이지, 잊어버릴 수 있는 각주는 아닙니다.)
우리는 언제 그것들을 사용해야 하고 언제 사용하지 말아야 합니까?
어쩔 수 없다면 절대 사용해서는 안됩니다.유감스럽게도 이해 관계자들이 이 BAD[*] 장치를 끊임없이 홍보하면서 오늘날 XML 네임스페이스와 씨름할 필요가 없는 사양 클러스터가 형성되었습니다.따라서 XML 네임스페이스를 직접 피하더라도 모든 방향에서 네임스페이스로 둘러싸인 크루드가 사용자에게 제공되지 않는 한 작업을 거부하는 툴셋을 발견할 수 있습니다.
XML에서 네임스페이스로 작업할 때 일반적으로 발생하는 문제점은 무엇입니까?
네임스페이스가 "기본값"으로 설정된 문서에 Xpath 식을 사용하는 것이 가장 일반적인 함정입니다. 즉, 네임스페이스는 식에 명시적이어야 합니다.또 다른 문제는 문서를 작성할 때 "올바른" 방법으로 문서를 사용하는 것입니다. 즉, 이 문서들은 허공에서 문제를 발생시킵니다.
또한 XML 스키마와 어떤 관계가 있습니까?XSD 스키마를 항상 네임스페이스와 연결해야 합니까?
XSD 스키마 사양은 위원회의 거의 모든 사람들이 XML 네임스페이스를 물고 있던 시기에 개발된 것 외에는 필요한 관계가 없습니다.그래서 그들은 가능한 한 깊이 연구했습니다.그럼에도 불구하고 이름 공간 없이 XSD 스키마를 사용하는 것은 가능하지만, XSD 스키마를 지원하는 거의 모든 툴셋에서 이름 공간을 사용하는 것을 "원하게" 가정하기 때문에 가파른 오르막길입니다.
[*] 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와 일치하는 한 일치하는 접두사를 선언할 수 있습니다.
요소 유형의 성으로 생각해 보세요.둘 다 밥이라고 부르는 친구가 있는데 그 친구 중 한 명에 대해 이야기하고 있다면 누군가가 어떤 밥을 이야기하고 있는지 물어볼 수도 있을 것입니다."밥"이라고 말하는 것은 별로 도움이 되지 않기 때문에, 당신은 "밥 스미스", 즉 "밥 존스"라고 말합니다.
Element Type도 마찬가지입니다.때때로 다른 사람들이 같은 이름을 고를 수 있기 때문에 짧은 이름으로는 충분하지 않습니다.그래서 당신은 URI를 "성"으로 포함시켜, 다른 봅들을 구별합니다.
XML은 상위 언어로, XML 기반 언어의 기초가 된다는 것을 의미합니다(말이 되지 않습니까?XML은 어떤 문장이든, 어떤 언어로도 쓸 수 있는 펜이라고 생각하세요.모든 것은 작가에게 달려 있고, 가급적이면 그 언어를 독자에게 알려야 합니다.
XML 네임스페이스는 기본적으로 "영어" 또는 "עברית"와 같이 언어의 이름입니다.나는 XML 문서의 수신자가 문서를 파싱하고 내부의 정보를 추출하는 것을 돕습니다.
내가 가구 공장을 가지고 있고 당신이 가구점을 가지고 있다고 가정해 보겠습니다.당신의 스토리지 애플리케이션과 나의 공급 애플리케이션은 완전히 관련이 없지만, 그것들이 XML 메시지들을 통해 의사소통할 때, 메시지들은 이해할 수 있고 양쪽 모두에 의해 쉽게 파싱될 수 있어야 합니다.
따라서 두 시스템 모두 언어 구문과 합의된 제한을 정의하는 스키마를 알아야 합니다.스키마를 사전과 문법 교과서라고 생각하세요.스키마는 두 시스템이 모두 알아야 할 문서이며, 각 시스템에서 구문 분석 코드를 작성하는 사용자는 반드시 알아야 하며, 네임스페이스 선언이 포함되어 있습니다.
각 네임스페이스는 URI로 명명되며, 대부분의 경우 URI를 정의하는 스키마 문서의 위치입니다.
물론 모든 XML 문서에 네임스페이스가 필요한 것은 아닙니다. 특히 원격 시스템에 정보를 전달하는 데 사용되지 않는 경우에는 더욱 그렇습니다.예를 들어 데이터베이스에 지속하기 위해 개체를 XML로 직렬화할 때입니다.
우리는 이름공간을 사용합니다. 왜냐하면 사람들이 자신의 개인 아이다호에서 같은 단어를 다른 의미로 사용하기를 원하기 때문입니다.일반적으로 맥락에 따라 사람의 의미를 결정할 수 있습니다.인사 데이터베이스에서 XML은 인사 기록입니다.XML은 차량 레지스트리 데이터베이스에서 차량 레지스트리 레코드입니다.
둘 다 "위치"라는 이름의 태그를 유지하지만, 태그는 각각 다른 것을 의미하고 다른 필드를 포함합니다.
멋지네요. 하지만 XML을 둘 다 동일한 데이터베이스에 저장해야 하거나 저장하고 싶다면 어떻게 해야 할까요?더 흥미로운 것은 두 데이터베이스 모두 다른 공통 데이터베이스(예: Accounts 데이터베이스)에서 XML 청크를 저장하려는 경우입니다.
XML 네임스페이스는 각 XML 태그 URI와 연결되어 태그 이름 앞에 URL이 있고 태그 이름의 일부입니다(물론 실제 XML 문서에서는 축약기를 사용하여 이렇게 함).URI를 신중하게 선택함으로써 태그 이름이 충돌하지 않을 것이라는 확신을 가지기 쉬우며, 이는 마치 두 위치 태그의 이름이 완전히 다르게 지어졌기 때문에 혼동이 없습니다.추가적으로, 완전히 다른 두 위치 태그에는 계정 데이터베이스의 내용이 포함될 수 있으며, 동일한 내용에 대해 이야기하고 있음을 명시적으로 명시할 수 있습니다.
이 모든 것을 유용하게 만드는 것은 XPATH입니다.
위의 내용을 사용하면 다음과 같은 XPATH 표현을 작성할 수 있습니다: find me anyaccounts:account overdue
이 xml의 모든 섹션.오어: 나 좀 찾아줘요.accounts:warning message
이 XML의 특정 청크의 어디에나 있는 항목들, 여기서 경고 메시지는 a의 하위 노드(심도는 아니지만)입니다.personnel:payment
결절 또는 결절vehicle:status
마디마디
이 XPATH 표현식은 XML을 XHTML 또는 XPDF로 변환하여 표시하는 XSLT 문서의 어딘가에서 사용될 수 있습니다.
보수는 얼마입니까?왜 그럴까요?XML 로그 파일을 검색할 수 있기 때문에 다른 시스템에서 생성된 "메시지" 태그와 혼동하지 않고 모든 계정의 기한이 지난 메시지를 어디에서나 꺼내 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 네임스페이스는 Extensible Markup Language 문서에서 사용되는 요소와 속성 이름을 URI 참조로 식별된 네임스페이스와 연결하여 한정하는 간단한 방법을 제공합니다.
이름공간은 문서 내에서 사용하는 이름을 명확하게 구분하는 데 사용됩니다.또한 이름 공간에 짧은 이름을 바인딩할 수 있으며, 이를 통해 원격 요소 또는 속성을 참조할 수 있습니다.이름 공간 자체는 문서에서 사용하는 요소와 속성을 정의하는 위치를 나타냅니다.더 알아야 할 것이 많지만, 그것이 그 핵심입니다.여기에 더 많은 정보가 있습니다.
언급URL : https://stackoverflow.com/questions/128389/what-are-xml-namespaces-for
'programing' 카테고리의 다른 글
C 표준 라이브러리의 기능을 C++에서 사용할 수 있습니까? (0) | 2023.10.24 |
---|---|
CSS: 글꼴 크기 100% - 무엇의 100%? (0) | 2023.10.24 |
복잡한 MySQL 쿼리 (0) | 2023.10.24 |
Android에서 RxJava를 사용할 시기 및 Android Architectural Components의 LiveData를 사용할 시기는? (0) | 2023.10.24 |
"IIS Express 웹 서버를 시작할 수 없습니다" 오류 (0) | 2023.10.24 |