2013-06-11 3 views
0

단순하게하기 위해 동일한 네임 스페이스에 모든 파일 배열을 갖고 싶습니다. 개념적으로 관련이 있기 때문입니다. 다른 스키마 파일을 포함하고 기본적으로 글로벌 루트 요소 역할을하는 주 또는 중앙 xsd가 있습니다. 내 문제는 좋은 예에 의해 설명하지만, 나는 기본적으로 검증하기 위해 내 비 중앙 스키마를 얻을 수 있으며 네임 스페이스의 문제입니다 :동종 네임 스페이스 디자인 일관성있는 XSD를 만드는 방법?

스키마 1 (지원) : 2 (중앙)

<?xml version="1.0" encoding="UTF-8"?> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
      targetNamespace="http://www.company.org" 
      xmlns="http://www.person.org" 
      elementFormDefault="qualified"> 

    <xsd:simpleType name="test"> 
     <xsd:restriction base="xsd:string"> 
     </xsd:restriction> 
    </xsd:simpleType> 

    <xsd:complexType name="PersonType"> 
     <xsd:sequence> 
      <xsd:element name="Name" type="test" /> 
      <xsd:element name="SSN" type="xsd:string" /> 
     </xsd:sequence> 
    </xsd:complexType> 

</xsd:schema> 

스키마 :

<?xml version="1.0" encoding="UTF-8"?> 

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
      targetNamespace="http://www.company.org" 
      xmlns="http://www.company.org" 
      elementFormDefault="qualified"> 

    <xsd:include schemaLocation="http://www.person.org"/> 

    <xsd:element name="Company"> 
     <xsd:complexType> 
      <xsd:sequence> 
       <xsd:element name="Person" type="PersonType" 
          maxOccurs="unbounded"/> 
      </xsd:sequence> 
     </xsd:complexType> 
    </xsd:element> 
</xsd:schema> 

스키마 2는 유효하지만 스키마 1은 유효성을 검사하지 않습니다. "test"에는 네임 스페이스가 없으며 모든 파일에 대해 네임 스페이스를 사용하려는 나의 의도를 파괴하지 않고이를 제공하는 방법을 모르겠습니다.

답변

0

당신이 묻는 질문이 명확하지 않으므로 질문은 "스키마 문서 2가 유효성을 검사 할 때 스키마 문서 1이 유효성을 검사하지 않는 이유는 무엇입니까?"라고 추측합니다.

결과를 재현 할 수 없어 답변을 드릴 수 없습니다. 두 스키마.서는 모두 사용자가 제공 한 양식으로 오류를 _ 생시킵니다.

스키마 문서 1라는 타입 (http://www.person.org 시험)에, 복합 타입 (http://www.company.org, PersonType)에 국부적 소자 (http://www.company.org 이름)의 정의에서 언급한다. 그러나 네임 스페이스 http://www.person.org은 가져 오지 않았으므로 해당 네임 스페이스의 구성 요소에 대한 참조는 유효하지 않습니다.

사양 ""은 "test"가 QName으로 해석 될 때 해당 네임 스페이스 이름이 기본 네임 스페이스로 간주되므로 (http://www.person.org, test)에 대한 참조로 해석됩니다. 여기서 기본 네임 스페이스 (xsd : schema 요소에 선언 됨)는 http://www.person.org입니다.

- 이것은 내 부분에 투명한 추측입니다 - 스키마 문서 1의 7-10 행에 선언 된 (http://www.company.org, test) 이름의 유형을 참조하려는 경우 바인드해야합니다 네임 스페이스 접두사를 네임 스페이스 http://www.company.org에 붙여 해당 접두사를 사용합니다. 그

<xsd:element name="Name" type="test" 
      xmlns="http://www.company.org"/> 

참고 : 그것은 (접두사 생각하는 것을 방지하기 위해, 기본 네임 스페이스를 사용하여)

<xsd:element name="Name" type="tns:test" 
      xmlns:tns="http://www.company.org"/> 

하거나 이름의 선언을 변경, 예를 들어, 일 것이다 7-10 행에 선언 된 단순 유형은 확장 된 이름 (http://www.company.org, test)이 있습니다. " 'test'에는 네임 스페이스가 없음을 알리는 것이 무엇인지 모르겠지만 가정을 점검하고 싶을 수 있습니다.

스키마 문서 2은 xsd : include에서 6 행에 지정한 스키마 위치가 역 참조시 XSD 스키마 문서 (HTML 페이지)가 아닌 문서를 생성하기 때문에 오류가 발생합니다.

이 정보가 도움이되기를 바랍니다.