2013-08-18 3 views
1

속성이 다른 xml을 위해 만들어진 xsd의 다른 xml에 있는지 확인하고 싶습니다. 난이 XSD를 가지고 예는
문서 간 참조 유효성을 검사하는 방법은 무엇입니까?

<xs:schema version="1.0" 
     xmlns:xs="http://www.w3.org/2001/XMLSchema" 
     elementFormDefault="qualified"> 
<xs:element name="models"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="model" maxOccurs="unbounded" minOccurs="1"> 
       <xs:complexType> 
        <xs:attribute name="name" type="xs:string" use="required"/> 
       </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    <xs:unique name="uniqueModelName"> 
     <xs:selector xpath="./model"/> 
     <xs:field xpath="@name"/> 
    </xs:unique> 
</xs:element> 

나는 다른 XSD

<xs:element name="language"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="word" maxOccurs="unbounded"> 
       <xs:complexType> 
        <xs:sequence> 
         <xs:element name="value" maxOccurs="unbounded" minOccurs="1"> 
          <xs:complexType> 
           <xs:attribute name="lange" type="xs:string" use="required"/> 
          </xs:complexType> 
         </xs:element> 
        </xs:sequence> 
        <xs:attribute name="key" type="xs:string" use="required"/> 
       </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

가 나는 특성은 제 XSD에 model라는 요소 name 존재이다라는 것을 보장 할 요소 key의 요소 value의 두 번째 xsd
의 속성 즉, 첫 번째 xsd에 name이라는 특성 값이 있으면 두 번째 xsd에 존재하면 오류가 발생해야합니다.
XML 예제 : 두 번째의 xsd

<model name="A"/> 
<model name="B"/> 

XML : 첫번째의 xsd
XML

<word key="A"> 
    <value lange="english">Add</value> 
    <value lange="frensh">ajouter</value> 
</word> 
이 두 번째 XML에는 태그 word이 없기 때문에이 오류가 발생 알려야합니다

속성 B 이것이 xsd :)에서 발생할 수 있습니까?
이 어떤 요소가 (다른 문서 조상과 형제로부터 모두에서 분리) 분리되어 검증 될 수 있도록

<word key="A"> 
    <value lange="english">Add</value> 
    <value lange="frensh">ajouter</value> 
</word> 
<word key="B"> 
    <value lange="english">Add</value> 
    <value lange="frensh">ajouter</value> 
</word> 
+0

나는 같은 문제가있어, plz 도와주세요 !!!! – Steve

답변

2

XSD 유효성은 문맥 없도록 설계되어 올바른된다. XSD에서는 교차 문서 유효성 검사를 염두에 두지 않습니다.

다양한 종류의 문서 간 유효성 검사가 가능하도록 설계된 Service Modeling Language를 사용하여 Schematron (기본적으로 임의의 XPath 표현식을 작성하여 문서를 제한 할 수 있음)으로 설명하거나 모든 튜링 완벽한 프로그래밍 언어. 물론 프로세스를 고안하여 외부 XML 문서를 확인하고 적절한 XSD 유형을 구성 할 수 있습니다 (특히 해당 속성의 유효한 값 나열). 생성 된 XSD를 사용하여 초기 XML 문서의 유효성을 검사합니다. .

+0

글쎄 실제로 내가 할 수있는 방법을 찾았습니다 :) 그것은 두 xml에 동일한 xsd를주고 xsd에 루트 태그를 넣은 다음 선택 태그를 넣은 후이 선택이 두 xml의 근본이며, 유일한 편집은 두 개의 XML에 추가 루트를 추가 한 것이므로 이제는 두 개의 XML에 제한을 넣을 수 있습니다 – Tarek

+0

죄송합니다. 나는 당신의 질문을 오해 했음에 틀림 없다. –

+0

@C. M. Sperberg-McQueen : 어떻게 Schematron이 도움이됩니까? – reinierpost