2012-02-22 3 views
2

How do I find all text nodes in an XML document with a namespace using XPath?에서 SO 사용자는 XML 문서의 텍스트 노드를 네임 스페이스 한정으로 지정할 수 없다고 주장했습니다. XPath 1.0 specthis doc on QNames은 어설 션에 동의합니다.왜 XML 스키마에서 QName이 요소의 값이 될 수 있습니까?

OTOH,이 XML

<?xml version="1.0" encoding="UTF-8"?> 
<Root xmlns:bob="http://www.bob.com"> 
    <Hello>bob:World</Hello> 
</Root> 

그리고이 XML 스키마를 고려하십시오

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="Root"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="Hello" type="xs:QName" /> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

이 유형 QName의 수 Hello를 선언합니다. http://www.bob.com 네임 스페이스가 XML 문서에서 제거되면 유효성이 검사되지 않습니다.

이 작업을 수행하는 실제 예를보고 싶으십니까? faultcodes in the SOAP 1.2 spec은 제가 실행 한 것입니다.

  1. 왜 XML 스키마가의 QName이 요소의 값이 될 수 있도록 않습니다

    그래서 여기 내 질문입니까? 이것은 다른 사양과 모순되는 것 같습니다.

  2. XML 파서가 텍스트 노드를 네임 스페이스 정규화 된 것으로 이해하지 않지만 스키마 유효성 검사기 및 SOAP 프로세서와 같은 다른 프로세서가 수행한다고해도 과언이 아닙니까?
+0

이 질문을 해주셔서 감사합니다. 우주에서 유일하게 다른 사람이 문제인 것으로 보입니다. 내가 가진 문제는 XSLT 프로세서가 QNames로 오류 코드를 해석 할 수없는 것처럼 보이므로 XSLT의 비누 1.1과 비누 1.2간에 변환 할 수있는 확실한 방법이 없다는 것입니다. –

+0

귀하가 링크를 찾는 것과 관련하여 "XML 문서의 텍스트 노드가 네임 스페이스를 검증 할 수 없다"는 것에 동의한다고 주장합니다. 그러나 그 형식에 대한 설명은이 문서에서 찾을 수 없습니다. –

답변

2

혼란스러운 개념이 있습니다.

요소 및 특성에는 이름이 있으며 이름은 네임 스페이스로 한정됩니다. 텍스트 노드에는 이름이 없으므로 이름이 네임 스페이스 한정 일 수 없습니다.

속성 및 텍스트 노드는 모두 콘텐츠의 QNames를 가질 수 있습니다. 두 경우 모두 네임 스페이스 접두사는 포함하는 요소의 범위 내 이름 공간, 즉 요소 및 해당 조상에 선언 된 모든 네임 스페이스에 대해 확인됩니다. 이는 문제의 요소 나 속성의 이름과는 전혀 관련이 없습니다.

그러나 요소 또는 특성 내용의 QName은 스키마 유효성 검사기에서만 XML 구문 분석기에서 감지 할 수 있다고 지적하는 것이 맞습니다. 또한 이것을 문제로 확인하는 것이 옳습니다. 그러나 사양 간의 모순이 아닙니다. XML 구문 분석기가 노드에 숫자 나 날짜가 있지만 스키마 검사기에서 인식 할 수 없다는 점과 완전히 일치합니다.

+0

명확히 해 주셔서 감사합니다, 마이클. –

관련 문제