문제

내가 노력하고 사용 XML 을 포함하여 관리하는 데 도움이 큰 XML 은 구조는 필요에 의해 사용할 수 있도록 모두 인간과 기계입니다.

하지만 경험하고 문제의 무수하려고 할 때 XML 을 생성하는 파일의 유효성을 검증할 수 있에 대한 기존의 스키마.여기에 간단한 예제는 나가고자 노력하고 있습니다.

내"main.xml"파일의 유효성을 검사하지 않습니다.

<?xml version="1.0" encoding="UTF-8"?>
<!-- Main.xml - This fails to validate. -->
<ns1:main xsi:schemaLocation="http://www.example.com/main main.xsd"
          xmlns:ns1="http://www.example.com/main"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns:xi="http://www.w3.org/2001/XInclude">

    <name>String</name>
    <xi:include href="child.xml"/> <!-- What I'm trying to do. -->

</ns1:main>

은"child.xml"파일의 유효성을 검사로 독립 파일입니다.

<?xml version="1.0" encoding="UTF-8"?>
<!-- Child.xml - This validates fine, as a standalone file. -->
<ns1:child xsi:schemaLocation="http://www.example.com/main main.xsd"
           xmlns:ns1="http://www.example.com/main"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <name>String</name>
    <age>String</age>

 </ns1:child>

여기에 내 스키마:

 <?xml version="1.0" encoding="UTF-8"?>
 <!-- Main.xsd - My Simplified Schema -->
 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
            xmlns:ns1="http://www.example.com/main"
            targetNamespace="http://www.example.com/main">

    <!-- Main Element (References Child) -->
    <xs:element name="main">
         <xs:complexType>
             <xs:sequence>
                 <xs:element name="name" type="xs:string"/>
                 <xs:element ref="ns1:child"/>
             </xs:sequence>
         </xs:complexType>
    </xs:element>

    <!-- Child Element -->
    <xs:element name="child">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="name" type="xs:string"/>
                <xs:element name="age" type="xs:string"/>
            </xs:sequence>
        </xs:complexType>
     </xs:element>

</xs:schema>

나의 문제는 물론 관련된 네임스페이스 그러나 나는 손실에 대한 해결하는 방법이 내 문제입니다.

도움이 되었습니까?

해결책

처럼 Skaffman 이미 지적하면 XML 스키마 및 XinClude는 호환되지 않습니다.

유효성 검사 오류 메시지 xmllint 이것을 명확하게 말합니다 :

main.xml:9: element include: Schemas validity error : Element  '{http://www.w3.org/2001/XInclude}include': This element is not expected. Expected is ( {http://www.example.com/main}child ).
main.xml fails to validate

인용 W3C 추천: "XinClude는 XML 스키마를 적용하여 생성 된 증강 인포셋과의 관계를 정의하지 않습니다. 이러한 증강 인포셋은 입력 정보를 제공 할 수 있거나 이러한 증강은 포함으로 인한 Infoset에 적용될 수 있습니다."

따라서 먼저 xincludes를 적용하여 전체 XML 파일을 구성하고 나중에이 파일을 검증해야합니다.

편집 : 사용할 수 있습니다 xmllint main.xml을 확인하기 위해 -xinclude를 사용하십시오.

다른 팁

동의함으로 grantwparks-XInclude 및 XML 스키마로 함께 사용할 수 있습니다.세부사항들이 의도적으로 독립적입니다.분명히 저자의 XInclude 하고 싶었을 제공 할 수있는 자유를 포함 처리하기 전에 유효성 또는 후 유효성 검사를 수행합니다.

스레드에 velocityreviews 문제를 설명합하고 응답을 이해하는 문제였 이 게시물 xml.com, 을 인용하는것에서:

가장 일반적인 질문에 대한 대 XInclude 가 어떻게 포함 과 상호 작용하는 유효성 검사 XSL 변환,그리고 다른 프로세스 에 적용할 수 있는 XML 문서입니다.짧은 대답은 그것이 하지 않습니다.XInclusion 의 일부가 아닌 다른 XML 과정입니다.그것은 별도의 단계는하지 않을 수도 있습니다 수행 할 때 어디서 당신에게 유용합니다.

예를 들어,유효성 검사에 대한 스키마.문서 수 있습니다 검증을 포함하기 전에,후에 포함입니다.당신이 검증 문서기 전에 시:요소를 포함 대체,다음 스키마가를 선언이 요소를 포함처럼 그 을 선언하는 다른 요소입니다.할 경우 문서의 유효성을 검사한 후에 xi:의 요소를 포함하는 교 스키마를 선언 대체 요소입니다.성 및 유효성 검사에는 별도로, 직교하는 프로세스를 수행할 수 있는 어떤 순서로는 편에서는 지역 환경

그래서 어떤 것을 졸를 얻는 것입 XML 도구를 처리하는 시:요소를 포함하기 전에 유효성 검사(는 무슨 예의 OP 필요).예를 들어,XML 편집기에서의 이클립스가 설정에"프로세스 XML 포함에서"XML->XML 파일->유효성 검사(를 사용하여 RSA8.5),는 필요하를 받을 수 있도록 편집하는 프로세스 사이에 포함하기 전에 유효성 검사를 수행합니다.

Andy

XML 스키마와 XinClude 사양이 서로 호환 될 수 있다고 생각하지 않습니다. 개별 XML 프로세서는이를 허용 할 수 있지만 다른 XML 프로세서는 그렇지 않습니다.

일반적으로 두 사람이 함께 사용해서는 안된다고 말합니다.

추신 : 왜 이것이 네임 스페이스 문제라고 생각하는지 잘 모르겠습니다. 그 인상을주는 것은 무엇입니까?

나는 이것이 XinClude와 스키마 사이의 비 호환성으로 인해 발생한다고 생각하지 않습니다. 검증 전에 포함이 처리되지 않는 것처럼 보입니다. 따라서 스키마는 "Child"요소 만 메인에 "포함"요소를 허용하지 않습니다. 유효성 검사 전에 XML 프로세서를 프로세스하도록 강요 할 수있는 경우 ...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top