2012-03-19 1 views
0

값이 QName으로 지정된 XML 스키마의 모든 요소를 ​​찾는 방법은 무엇입니까?

  • 나는 복잡한 XML 스키마, 수입/차례로 가져 오기/더욱 스키마 파일을 포함하는 다른 스키마 파일을 포함 하나가 ... 가정하자.
  • QName 유형으로 선언 된 값 (즉, 텍스트 노드)을 가진이 XML 스키마의 모든 요소를 ​​찾고 싶습니다.
  • 이러한 요소의 위치 (경로)를 XPath 문 (예 :/foo/bar)으로 표시하고자합니다.

Java 응용 프로그램을 작성하는 경우이 작업에 적합한 기술은 무엇입니까? XSOM과 같은 스키마 개체 모델입니까? Java XPath API입니까? 다른 것?

편집 : 스키마 문서를 쿼리

// Load the XSD into Saxon 
Processor processor = new Processor(true); 
SchemaManager schemaManager = processor.getSchemaManager(); 
DocumentBuilder documentBuilder = processor.newDocumentBuilder(); 
SAXSource saxSource = new SAXSource(new InputSource("path/to/yourSchema.xsd")); 
XdmNode schema = documentBuilder.build(saxSource); 
schemaManager.load(saxSource); 
// Export the SCM 
XdmDestination destination = new XdmDestination(); 
schemaManager.exportComponents(destination); 
XdmNode xdmNode = destination.getXdmNode(); 
System.out.println(xdmNode.toString()); 

답변

0

가 있습니다 : 색슨의 SCM (아래 마이클 케이의 추천 당) 접근에 JumpStart를 원하는 사람들을 위해, 여기에 몇 가지 자바 코드 (산세 예외 처리가)입니다 왜냐하면 XSD에는 똑같은 것을 말하기위한 여러 가지 방법이 있기 때문입니다. 예를 들어 명명 된 모델 그룹과 속성 그룹이 작업을 상당히 복잡하게 만들었 기 때문입니다.

QName과 QName에서 파생 된 유형을 찾고 있다면 정말 어렵습니다.

"컴파일 된"스키마에서 일종의 원시 스키마 파일을 사용하는 것보다 훨씬 쉽습니다.

XSOM을 사용하는 것이 한 가지 방법이지만 쿼리 기능 IIRC는 없습니다. 또 다른 접근법은 Saxon의 SCM 출력을 사용하는 것입니다. 이것은 XML 형식의 컴파일 된 "스키마 구성 요소 모델"의 표현입니다. 컴파일 된 스키마이므로 xs : include, xs : redefine 등의 모든 복잡성에 대해 걱정할 필요가 없습니다. 반면 XML을 사용하면 XQuery를 사용할 수 있습니다. (사용자 정의 함수가 필요한 재귀 조인을 포함하여 많은 조인이 포함되므로 XPath보다는 XQuery를 권장합니다.)