FormDefault 요소는 XSD에서 무엇을 합니까?
인가란 입니까?elementFormDefault
언제 사용해야 합니까?
에 몇 가지 .elementFormDefault
값:
qualified - 요소 및 특성이 스키마의 targetNamespace에 있습니다.
unqualified - 요소 및 특성에 네임스페이스가 없습니다.
그래서 이 정의에 따르면 스키마가 qualified로 설정되어 있다면 유형에 네임스페이스를 붙여야 하는 이유가 무엇일까 생각합니다.그리고 그 문제에 대해 자격이 없는 것으로 설정된 시나리오는 무엇입니까?구글 검색을 해봤지만, 이해하기 매우 어려운 몇 개의 W3C 페이지밖에 없었습니다.
지금 작업 인데 왜 인데 로 요?target:TypeAssignments
때를 targetNamespace
xmlns:target
?
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:target="http://www.levijackson.net/web340/ns"
targetNamespace="http://www.levijackson.net/web340/ns"
elementFormDefault="qualified">
<element name="assignments">
<complexType>
<sequence>
<element name="assignments" type="target:TypeAssignments"
minOccurs="1" maxOccurs="unbounded"/>
</sequence>
</complexType>
</element>
<complexType name="TypeAssignments">
<sequence>
<element name="assignment" type="target:assignmentInfo"
minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</complexType>
<complexType name="assignmentInfo">
<sequence>
<element name="name" type="string"/>
<element name="page" type="target:TypePage"/>
<element name="file" type="target:TypeFile"
minOccurs="0" maxOccurs="unbounded"/>
</sequence>
<attribute name="id" type="string" use="required"/>
</complexType>
<simpleType name="TypePage">
<restriction base="integer">
<minInclusive value="50" />
<maxInclusive value="498" />
</restriction>
</simpleType>
<simpleType name="TypeFile">
<restriction base="string">
<enumeration value=".xml" />
<enumeration value=".dtd" />
<enumeration value=".xsd" />
</restriction>
</simpleType>
</schema>
ElementFormDefault는 스키마에 있는 유형의 네임스페이스와는 무관하며 스키마를 준수하는 XML 문서에 있는 요소의 네임스페이스에 관한 것입니다.
사양의 관련 섹션은 다음과 같습니다.
Element Declaration Schema Component Property {target namespace} Representation If form is present and its ·actual value· is qualified, or if form is absent and the ·actual value· of elementFormDefault on the <schema> ancestor is qualified, then the ·actual value· of the targetNamespace [attribute] of the parent <schema> element information item, or ·absent· if there is none, otherwise ·absent·.
즉, 스키마 맨 위에 선언한 targetNamespace가 스키마 호환 XML 문서의 요소에만 적용된다는 것입니다. 요소FormDefault가 "qualified"이거나 요소가 스키마에 명시적으로 form="qualified"로 선언된 경우에만 해당됩니다.
예를 들어,요소FormDefault가 정규화되지 않은 경우 -
<element name="name" type="string" form="qualified"></element>
<element name="page" type="target:TypePage"></element>
는 "name" 요소가 대상 Namespace에 있고 "page" 요소가 null 네임스페이스에 있을 것으로 예상합니다.
모든 요소 선언에 form="qualified"를 입력해야 하는 상황을 방지하기 위해 elementFormDefault="qualified"를 입력하면 요소 선언에 form="unqualified"를 입력하여 무시하지 않는 한 대상 Namespace가 각 요소에 적용됩니다.
ComplexType 합니다를 합니다.AuthorType
에 의해 사용된author
<xsd:complexType name="AuthorType">
<!-- compositor goes here -->
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="phone" type="tns:Phone"/>
</xsd:sequence>
<xsd:attribute name="id" type="tns:AuthorId"/>
</xsd:complexType>
<xsd:element name="author" type="tns:AuthorType"/>
한다면elementFormDefault="unqualified"
다음 XML 인스턴스가 유효합니다.
<x:author xmlns:x="http://example.org/publishing">
<name>Aaron Skonnard</name>
<phone>(801)390-4552</phone>
</x:author>
작성자의 이름 특성은 네임스페이스를 지정하지 않고 허용됩니다(무자격).입니다의 한 .<xsd:complexType>
로컬에서 complexType으로 간주됩니다.
한다면elementFormDefault="qualified"
그런 다음 인스턴스는 로컬 요소를 검증해야 합니다.
<x:author xmlns:x="http://example.org/publishing">
<x:name>Aaron Skonnard</name>
<x:phone>(801)390-4552</phone>
</x:author>
자세한 내용은 이 링크를 참조해 주시기 바랍니다.
새롭고 상세한 답변과 설명은 자주 묻는 질문에...
단답형:추가하지 않으면elementFormDefault="qualified"
.xsd:schema
, 그 다음에 채무 불이행자unqualified
value는 로컬로 선언된 요소가 네임스페이스에 없음을 의미합니다.
인지에 이 많습니다.elementFormDefault
하지만 이것은 간단한 예로 빨리 밝혀질 수 있습니다.
XSD의 간소화된 버전:
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:target="http://www.levijackson.net/web340/ns"
targetNamespace="http://www.levijackson.net/web340/ns">
<element name="assignments">
<complexType>
<sequence>
<element name="assignment" type="target:assignmentInfo"
minOccurs="1" maxOccurs="unbounded"/>
</sequence>
</complexType>
</element>
<complexType name="assignmentInfo">
<sequence>
<element name="name" type="string"/>
</sequence>
<attribute name="id" type="string" use="required"/>
</complexType>
</schema>
주요 사항:
-
assignment
요소는 로컬로 정의됩니다. - XSD에 로컬로 정의된 요소는 기본적으로 네임스페이스에 없습니다.
- 그 는 입니다의 입니다.
elementFormDefault
이다.unqualified
. - 이것은 거의 틀림없이 XSD 제작자들의 설계 실수입니다.
- 입니다를 입니다.
elementFormDefault="qualified"
해서tassignment
예상하는 대로 대상 네임스페이스에 있습니다.
- 그 는 입니다의 입니다.
- 그것은 거의 사용되지 않습니다.
form
책임을 돌리다xs:element
언에elementFormDefault
기본값을 설정합니다.
유효해 보이는 XML
이 XML은 위의 XSD에 따라 유효해야 할 것으로 보입니다.
<assignments xmlns="http://www.levijackson.net/web340/ns"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.levijackson.net/web340/ns try.xsd">
<assignment id="a1">
<name>John</name>
</assignment>
</assignments>
공지사항:
assignments
.assignments
항목목()http://www.levijackson.net/web340/ns
).
당혹스러운 유효성 검사 오류
유효한 것처럼 보이지만 위 XML에서 다음과 같은 혼동스러운 유효성 검사 오류가 발생합니다.
[오류] try.xml:4:23: cvc-complex-type.2.4.a: 요소 '할당'으로 시작하는 내용이 잘못되었습니다.'{assignment}' 중 하나가 필요합니다.
주의:
- 요소를 찾을 것으로 예상했지만 실제로 요소를 발견했기 때문에 내용이 잘못되었다고 말하는 것 같은 이 진단을 저주한 개발자는 당신이 처음이 아닐 것입니다. (WTF)
- 이것이 진정으로 의미하는 것은: 더
{
그리고.}
assignment
즉,입니다.assignment
이름 공간이 없습니다.불행하게도, 그들이 발견한 것은assignment
는 non non nespace다와(와) 네임스페이스에서 하지 않았습니다.
해결책
- 대부분의 경우: 추가
elementFormDefault="qualified"
xsd:schema
XSD의 요소입니다.이것은 XSD에서 로컬로 선언될 때 유효한 XML이 대상 네임스페이스에 요소를 배치해야 한다는 것을 의미합니다. 그렇지 않으면 유효한 XML이 로컬로 선언된 요소를 네임스페이스가 없는 곳에 배치해야 합니다. - 그 시대의 극소수:XML을 XSD의 요구 사항에 맞게 변경합니다.
assignment
네임스페이스가 없습니다.는 예를 들어다를 할 수 .xmlns=""
assignment
요소.
크레딧:이 답변에 대해 유익한 피드백을 주신 마이클 케이 씨께 감사드립니다.
요소FormDefault와 함께 유의할 점은 스키마의 최상위 레벨에 정의된 글로벌 요소와는 달리 복잡한 Type 블록 내에서 일반적으로 명명된 요소인 로컬 정의 요소에 적용된다는 것입니다.elementFormDefault="qualified"를 사용하면 스키마의 대상 네임스페이스를 문서의 기본 네임스페이스로 사용하여 xml 문서 내에서 스키마의 로컬 요소를 지정할 수 있습니다.
실제로 elementFormDefault="qualified"를 사용하여 중첩된 블록의 요소를 선언할 수 있습니다. 그렇지 않으면 최상위 레벨의 모든 요소를 선언하고 ref 속성을 사용하여 중첩된 요소의 스키마에서 참조해야 하므로 훨씬 덜 콤팩트한 스키마가 됩니다.
XML Schema Primer의 이 부분은 다음과 같습니다. http://www.w3.org/TR/xmlschema-0/ #NS
elementFormDefault="qualified"는 스키마 문서 자체(.xsd 파일)의 네임스페이스가 아니라 XML 인스턴스 문서(.xml 파일)의 네임스페이스 사용을 제어하는 데 사용됩니다.
elementFormDefault="qualified"를 지정하여 이 스키마로 유효성을 확인한 문서에 네임스페이스 선언을 사용하도록 강제합니다.
이 값을 지정하여 요소가 자격이 없는 것이 아니라 자격이 있는 것으로 선언하는 것이 일반적입니다.그러나 속성 FormDefault="unqualified"는 기본값이므로 네임스페이스를 한정하지 않으려면 스키마 문서에서 지정할 필요가 없습니다.
XMLspy(최소 2011 버전)는 요소FormDefault="qualified"를 사용할 경우 정의된 대상NameSpace를 needs합니다.그렇지 않으면 검증되지 않습니다.또한 네임스페이스 접두사를 사용하여 xmls를 생성하지 않습니다.
언급URL : https://stackoverflow.com/questions/1463138/what-does-elementformdefault-do-in-xsd
'programing' 카테고리의 다른 글
MySQL: N개의 행을 선택하지만 하나의 열에 고유한 값만 있음 (0) | 2023.10.17 |
---|---|
Docker CentOS - mariadb(종료 상태 0, 예상됨) (0) | 2023.10.12 |
삽입 전 MariaDB 트리거가 작동하지 않습니다. (0) | 2023.10.12 |
window.location.pathname에 헤더 추가 (0) | 2023.10.12 |
jQuery 팝업 버블/툴팁 (0) | 2023.10.12 |