XML 스키마에서 공유 정의를 가져 오려고하면 공유 형식을 제대로 참조 할 수 있지만 공유 요소를 참조하면 유효성 검사 오류가 발생합니다.XML 스키마 : 공유 요소를 가져올 때 네임 스페이스 문제 발생
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://shared.com"
targetNamespace="http://shared.com">
<xs:element name="fooElement">
<xs:simpleType>
<xs:restriction base="xs:integer"/>
</xs:simpleType>
</xs:element>
<xs:simpleType name="barType">
<xs:restriction base="xs:integer"/>
</xs:simpleType>
</xs:schema>
지금이 XML 인스턴스를 고려하십시오
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:shared="http://shared.com">
<xs:import namespace="http://shared.com" schemaLocation="shared.xsd"/>
<xs:element name="example">
<xs:complexType>
<xs:sequence>
<xs:element ref="importedElement"/>
<xs:element ref="importedType"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="importedElement">
<xs:complexType>
<xs:sequence>
<xs:element ref="shared:fooElement"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="importedType">
<xs:complexType>
<xs:sequence>
<xs:element name="bar" type="shared:barType"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
이 공유 정의 (shared.xsd)은 다음과 같습니다
이
공유 정의를 가져 스키마 (example.xsd)입니다 : 검증되면<?xml version="1.0"?>
<example
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="example.xsd">
<importedElement>
<fooElement>42</fooElement>
</importedElement>
<importedType>
<bar>42</bar>
</importedType>
</example>
은 "importedType는"완벽하게 잘 작동하지만, "importedElement는"제공 의 다음과 같은 오류 :
Invalid content was found starting with element 'fooElement'. One of '{" http://shared.com ":fooElement}' is expected
나는 내 문제는 (따라서 어떻게 든 오해 "fooElement을 가지고 있지만 fooElement를 기다리고 있었다") 네임 스페이스 문제와 관련된 추측 것 - 여기에 무엇이 잘못되었는지에 대한 어떤 힌트? 그것이 더 네임 스페이스에있는 것처럼 당신은 fooElement
를 참조하는
내 질문에 답하기 때문에 답변을 수락했습니다. 불행히도, 그것은 내 문제를 해결하지 않습니다 : XML 인스턴스 문서는 고객에게 배포되며 변경할 수있는 옵션이 아닙니다. XML 인스턴스에서 조정이 필요하지 않은 공유 XSD *에서 요소 가져 오기를 허용하는 모든 네임 스페이스 - 마법? – netzwerg
글쎄, 무엇 때문에 공유 스키마에 네임 스페이스를 할당하게 되었습니까? 거기에 어떤 명령이 있습니까? 공유 스키마에 메일과 같은 네임 스페이스가 없도록 설정하고 가져 오기 대신 include를 사용하는 것이 어떻습니까? – xcut
나중에 JAXB를 사용하여 XML 문서에 액세스합니다. 가져 오기를 사용하면 공유 유형의 Java 대응 항목이 실제로 공유되지는 않지만 모든 XSD에 대해 다시 생성되므로 유틸리티 코드를 작성하는 것이 어려워집니다. – netzwerg