접두사가 없는 targetNamespace 및 xmlns, 차이점은 무엇입니까?
xml 스키마 문서에서 targetNamespace와 접두사가 없는 xmlns가 모두 있는 경우.
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://example.com/" xmlns="http://example.com/">
그들 사이의 정확한 차이점은 무엇입니까?접두사가 없는 xmlns를 사용하면 접두사가 없는 모든 요소가 해당 네임스페이스를 얻을 수 있고 혼란스럽게도 targetNamespace도 마찬가지입니다.
targetNamespace는 XML 스키마 "artifact"입니다. 목적은 스키마 파일이 설명하는 특정 XML 네임스페이스를 나타내는 것입니다.
xmlns - XML 스키마가 XML 문서이기 때문에 XML 파일 자체에 대한 기본 XML 네임스페이스를 정의할 수 있습니다(xmlns 속성이 이 작업을 수행합니다). 그 의미는 저작 및 합성과 같은 여러 가지입니다.예를 들어, 스키마에 정의된 항목에 대해 접두사를 사용할 필요가 없으며, 나중에 동일한 파일의 다른 곳에서 참조됩니다(예: 전역 단순).속성 또는 요소에 대한 유형으로 사용되는 유형).
많은 XML Schema 저자들은 이를 "Best Practice"로 여깁니다.당신은 옳은 길을 가고 있군요.
XSD와 관련하여 targetNamespace는 스키마 구성 요소의 정규화된 이름의 네임스페이스 부분을 규정합니다. 여기에는 요소, 속성, 그룹 및 속성 그룹, 단순하고 복잡한 유형이 포함됩니다.XSD(요소 및 특성)에 정의된 일부 정규화된 이름은 XML 인스턴스 문서에서 "직접" 사용됩니다.유형과 같은 다른 것들은 인스턴스 XML 문서의 xsi:type 특성을 통해 참조할 수 있습니다.나머지(그룹, 속성 그룹)는 참조를 통해 스키마 구성을 용이하게 하기 위한 것입니다.
저는 또한 (일반적으로) 사람들이 XSD를 두 가지 각도에서 설계한다고 생각합니다.
기존 XML과 일치합니다. 이 경우 XML에서 네임스페이스를 사용할 경우 사용되는 각 네임스페이스에 대해 일치하는 대상 네임스페이스 속성을 가진 XSD 스키마 요소가 나타납니다.
순수한 모형그런 다음 UML 패키지 또는 데이터베이스 스키마, Java 패키지 또는 a와 유사한 targetNamespace를 생각합니다.NET 네임스페이스, 그리고 이 경우에 모든 것을 의미합니다.기본적으로 명명 충돌을 피하기 위한 메커니즘이지만, 주제 영역 등에서 모델을 분할하는 메커니즘이기도 합니다.
아직도 혼란스러운 분들은 이 세가지 xds를 생각해보세요.이들은 모두 하나의 전역 유형과 이를 참조하는 하나의 전역 요소 정의를 정의합니다.
먼저 위에 올린 것과 같은 xsd.스키마 네임스페이스에는 접두사 'xsd'를 사용하고 targetNamespace에는 기본 네임스페이스를 사용합니다.
<xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://example.com/"
xmlns="http://example.com/">
<xsd:element name="aGlobalElement" type="aGlobalType"/>
<xsd:simpleType name="aGlobalType">
<xsd:restriction base="xsd:string"/>
</xsd:simpleType>
</xsd:schema>
이제 동일한 xsd이지만 대상 네임스페이스에 대해 네임스페이스 접두사를 정의하고 사용합니다.
<xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://example.com/"
xmlns:tns="http://example.com/">
<xsd:element name="aGlobalElement" type="tns:aGlobalType"/>
<xsd:simpleType name="aGlobalType">
<xsd:restriction base="xsd:string"/>
</xsd:simpleType>
</xsd:schema>
...그리고 마지막으로 XML 스키마 네임스페이스에 'xsd' 대신 기본 네임스페이스를 사용하는 버전:
<schema
xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://example.com/"
xmlns:tns="http://example.com/">
<element name="aGlobalElement" type="tns:aGlobalType"/>
<simpleType name="aGlobalType">
<restriction base="string"/>
</simpleType>
</schema>
대부분의 스키마 작성자는 첫 번째 또는 마지막을 선택합니다. 기본 네임스페이스 기능을 사용할 수 있는 경우 무언가에 사용할 수도 있기 때문입니다.
xmlns
xmlns 특성은 설명된 요소의 기본 이름 공간을 설정합니다.따라서 기본 이름 공간은 설명된 요소 내부의 모든 요소에 적용되며, 요소는 자신의 다른 이름 공간을 명시적으로 선언하지 않습니다.
기본 이름 공간은 WSDL 파일의 표준 값 http://www.w3.org/ns/wsdl 으로 설정되어 있습니다.
targetNameSpace
이 속성은 웹 서비스의 이름 공간을 포함합니다.이 네임스페이스는 자유롭게 선택할 수 있지만, URI가 서비스의 WSDL을 가리켜야 한다는 관례가 있습니다.
xmlns:tns
이 네임스페이스는 targetNameSpace 특성과 동일한 URI로 설정해야 합니다.이렇게 하면 이 네임스페이스 접두사(tns)를 통해 대상 네임스페이스를 참조할 수 있습니다.
출처 : http://tutorials.jenkov.com/wsdl/description.html
네임스페이스는 범위와 같은 의미입니다.
targetNamespace
의 속성입니다.schema
element는 네임스페이스 즉, XSD 파일의 패키지를 정의합니다.관례적으로 우리는 URI/URL을 사용하지만 어떤 문자열도 사용할 수 있습니다.
xmlns
는 속성은 현재 요소 범위에 대한 xmlns 속성 값에서 가져온 요소 및 데이터 유형을 참조하는 데 사용됩니다.
예:
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
는 접두사가 다음과 같습니다.xsd
네임스페이스 앞에 접두사를 붙여야 함을 의미합니다.xsd:
xmlns="http://www.w3.org/2001/XMLSchema"
접두사가 없으면 기본값입니다.- xmlns:p="http://www.example.com/People "은 접두사가 다음과 같습니다.
p
네임스페이스 앞에 접두사를 붙여야 함을 의미합니다.p:
어디에xmlns:xsd
그리고.xmlns:p
QNames와.xmlns
로컬 이름입니다.
다음 이미지는 내가 아는 대로 자바 유추를 사용하여 XSD를 이해하는 데 도움이 됩니다.
다른 답변들은 여기서 좋으니 여기서 설명을 반복하지 않겠습니다.하지만 자바 배경에 있는 사람이 있다면 좀 더 간단하다는 것을 발견하세요. 여기 제가 생각해낸 비유가 있습니다.
.xsd
문서는 아티팩트입니다..jar
파일xmlns
가package com.example
성명서, 당신은 당신의 자바 수업의 최상단에서 선언합니다.
예를 들어, Java 프로젝트에 단일 패키지가 하나 있고 모든 클래스가 단일 외부 클래스 내에서 선언되고 정의되는 경우를 생각해 보십시오.예를 들면,
package com.furniture.models
public class FurnitureShop {
int noOfTables;
int noOfChairs;
int noOfBeds;
List<Table> tables;
List<Chair> chairs;
List<Bed> beds;
// and now instead of declaring and defining a class for table/chair/bed in a
// separate file, you just add it here
public static class Table {
int height;
int width;
int length;
...
}
public static class Chair {
String color;
ChairType chairType;
...
}
public static class Sofa {
int price;
String color;
...
}
}
이것은 다른 요소들이 하나로 묶이는 방법입니다..xsd
파일, 새 스키마의 경우.
targetNamespace
생성하는 아티팩트의 이름입니다.스스로 알 수 있듯,targetNamespace
스키마를 작성할 때 파일에서 사용됩니다.
일단, 아티팩트(또는.xsd
file)이 생성되며, 다음과 같이 다른 프로젝트에서 사용합니다.
자바 프로젝트에서 라이브러리를 가져오면pom.xml
(또는build.gradle
) 파일은 다음과 같습니다 -
<dependency>
<groupId>com.furniture</groupId>
<artifactId>furniture-apis</artifactId>
<version>1.1.1</version>
</dependency>
XML에서는 다음을 사용하여 스키마를 "가져오기"합니다.
<furniture xmlns="http://furniture.com"/>
=== 부록 ===
명확화 -
xmlns
둘 다 로 사용됩니다.package
성명서 뿐만 아니라import
자바로 문장을 입력합니다..xsd
파일,xmlns
"의 역할을 합니다.package
" 에 있는 반면, 진술..xml
파일, 그것은 ""의 역할을 합니다.import
" 성명서
xmlint를 이용한 철저한 테스트 끝에 여기서 확실한 설명을 찾은 것 같습니다.다음 스키마를 고려합니다.
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema
version="1.0"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://yyyzzz.com"
xmlns:p="http://abced.com"
xmlns:q="http://pqr.com"
xmlns="http://yyyzzz.com">
<xsd:element name="recipe" type="recipeType" />
<xsd:complexType name="recipeType">
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="desc" type="xsd:string" />
<xsd:attribute name="archetype" type="xsd:string" />
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:schema>
위 스키마는 아래 문서에 유효성을 확인합니다.
<?xml version="1.0"?>
<recipe xmlns="http://yyyzzz.com">
Deciphering the purpose of targetNamespace
</recipe>
이렇게 작동하는 이유는 xmlns="http://yyyzzz.com "이(가) 스키마에서 정의하는 요소에도 자동으로 바인딩되기 때문입니다!즉, 조리법과도 결합한다는 것입니다.유형요소.
이제, 동일한 xml 문서를 사용하지만 아래와 같이 약간 수정된 스키마를 사용하여 그 차이점을 확인하고 자세히 살펴봅니다.
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema
version="1.0"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://yyyzzz.com"
xmlns="http://eigenfield.aparicio.com"
xmlns:EGboy="http://yyyzzz.com">
<xsd:element name="recipe" type="EGboy:recipeType" />
<xsd:complexType name="recipeType">
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="desc" type="xsd:string" />
<xsd:attribute name="archetype" type="xsd:string" />
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:schema>
다른 xmln이 누락된 경우 무시하고 대신 type=을 자세히 살펴보십시오."EGboy:recipeType".xmlns는 값이 다르기 때문에 더 이상 의존할 수 없기 때문에 recipeType 앞에 EGboy라는 접두사를 붙여야 합니다.
xml 문서는 EGboy 접두사를 신경쓰지도 않습니다. 이 접두사는 스키마가 많은 경우에 적절한 xmlns를 참조하기 위한 것일 뿐입니다.
언급URL : https://stackoverflow.com/questions/7190572/targetnamespace-and-xmlns-without-prefix-what-is-the-difference
'programing' 카테고리의 다른 글
type cast void 포인터를 사용하는 이유는 무엇입니까? (0) | 2023.11.01 |
---|---|
ASP.NET 5 / MVC 6 Ajax 모델에서 컨트롤러까지 (0) | 2023.11.01 |
JNDI 이름에 대해 바인딩할 항목 없음 (0) | 2023.11.01 |
Swift에서 문자열의 시작(접두사) 또는 끝(첨자)을 확인하는 방법 (0) | 2023.11.01 |
PHP json_encode에 여러 배열을 전달하고 jQuery로 파싱하는 방법이 있습니까? (0) | 2023.11.01 |