2013-01-07 2 views
1

특성에 대한 네임 스페이스와 XML 스키마에 을 선언하는 방법에 대한 질문이 있습니다.네임 스페이스 "xml"의 특성을 사용하여 XML 유효성 검사

특성에 네임 스페이스를 사용하려는 이유는 XML DSig, 을 사용하고 서명 부분을 "ID"특성으로 지정해야한다는 것입니다.

ID를 지정하는 속성의 이름은 이고 이름은 "ID", "Id"또는 "id"일 수 있습니다.

그러나 "ID : "대신 "xml : id"를 사용하는 것이 좋습니다.

이 다음 페이지에 설명 예를 들면 다음과 같습니다 http://www.w3.org/TR/xml-id/

이 DSIG 서명을 위해 잘 작동합니다. 내 C++ 응용 프로그램에서 서명/확인을 위해 "xmlsec1"을 사용하고 있으며, 은 서명하고 서명을 확인할 수 있습니다. XML 파일에서

는 ID가 다음과 같이 지정됩니다 : "아이디 XML은"거의 법적 XML 있지만 사용되지 않는 네임 스페이스의 속성이다

<elm:MyElement xml:id="MyName" OtherAttribute="SomeValue"> 

참고. 그러나 XML 파일도 Xerces 스키마와 비교하여 유효성을 검사해야하며 거기에 몇 가지 문제가 있습니다.

문제는 Xerces-C의 문제보다 이 아니라 정확하게 스키마를 지정하지 않았기 때문일 수 있습니다. "ID를 XML"이 같은 계획에 :

나는대로 속성 이름을 지정하는 것을 시도했다

    <xs:attribute name="xml:id" use="required"> 
          <xs:simpleType> 
           <xs:restriction base="xs:string"> 
            <xs:enumeration value="MyName"/> 
           </xs:restriction> 
          </xs:simpleType> 
        </xs:attribute> 
그러나

, 나는 문서의 유효성을 검사 할 때, 나는 다음과 같은 오류 메시지가 :

속성,하지만 Xerces를 검증은 이 속성은 스키마에 따라 선언된다 을 생각하지 않는 것 :
Error at file XMLParserInput, line 1, char 441 
    Message: attribute '{http://www.w3.org/XML/1998/namespace}id' is not 
declared for element 'Routing' 

내 XML 문서는 "ID XML '이있다.

이제 내 질문에 XML 스키마를 받아들이도록 작성해야합니다. "xml : id"?

예를 들어, 내가 인터넷에서 검색 한, 나는 몇 가지 힌트를 가지고이 :

http://xsd.stylusstudio.com/2004Oct/post01004.htm

하지만 내 XML 스키마가 더 복잡하고, 여러 XSD 파일 여러 네임 스페이스로 구성되어, 그래서 Xerces로 유효성을 검사 할 수 없었습니다.

내 XML 파일은 다음과 유사한를 선언

<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:qwerty=" 
http://www.mycompany.se/qwert" xmlns:abcd="http://www.mycompany.se/abcd"> 

스키마 파일 (들)이 유사한 정보를 선언

<xs:schema xmlns:abcd="http://www.mycompany.se/abcd" xmlns:xs=" 
http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.mycompany.se/abcd" 

의 elementFormDefault = "자격을 갖춘"attributeFormDefault = "적정" >

xml : id를 사용하여 XML 파일의 유효성을 검사하기 위해 XML 스키마를 선언해야한다는 힌트를 줄 수 있습니까?

감사 /미카엘

답변

0

하나 쉬운 방법은 관련 요소에

<xs:anyAttribute namespace="http://www.w3.org/XML/1998/namespace" 
       processContents="skip" /> 

를 추가하는 것입니다. 모든 xml: 속성을 허용해야합니다. 당신은 실제로 다음 ID 속성을 확인하고 싶은 경우에 당신은 당신의 주요 스키마에 xml 네임 스페이스

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      targetNamespace="http://www.w3.org/1998/XML/Namespace"> 
    <xs:attribute name="id" type="xs:ID"/> 
</xs:schema> 

<xs:import>이 스키마를 별도의 스키마를 정의 할 필요가 다음 적절한 장소에서

<xs:attribute ref="xml:id" use="required" /> 

를 선언 할 것 .

+0

이 제안을 주셔서 감사합니다. 가능한 해결책 일 수 있습니다. 그러나이 속성의 유효성을 검사하지 않으며이 속성에 대해서도 유효성 검사를 수행하고자합니다. 유효성 검사를 수행하는 스키마에 xml : id를 추가하는 다른 가능한 방법이 있습니까? –

+0

@MikaelSvenning'xml : id'가 유효한 ID인지 제대로 확인하려면 대안을 추가했습니다. –

관련 문제