2008-09-22 2 views
0

key() 함수를 사용하여 메타 데이터를 가져 오는 스타일 시트가 있다고 가정 해 보겠습니다. 즉 우리는이 같은 인스턴스 문서가 :XML 스키마에서 제한/열거 대신 key/keyref를 사용할 수 있습니까?

<items> 

<item type="some_type"/> 

<item type="another_type"/> 

</items> 

및 추가 데이터 테이블은 우리가 처리하는 동안 항목과 연결하려는 :

<item-meta> 

<item type="some_type" meta="foo"/> 

<item type="another_type" meta="bar"/> 

<item type="yet_another_type" meta="baz"/> 

</item-meta> 
마지막으로

, 우리가에 스키마 유효성 검사를 수행한다고 가정 유형 - 속성을 항목 - 메타에서 발생하는 유형 세트로 제한하는 인스턴스 문서. 따라서 스키마에서 제한/열거 대신 key/keyref를 사용하려고합니다. 이것은 제한/열거를 사용하려면 유효한 유형 속성의 별도 목록을 작성해야하기 때문입니다.

그러나 key/keyref가 실제로 작동하는 것처럼 보이지 않습니다. (MSXML 6.0을 사용하여) 스키마 키의 selector가 xpath 인수에 document() 함수를 허용하지 않는 것처럼 보였으므로 항목 메타 데이터가 외부 파일에 표시되는지 또는 외부 메타 데이터에 표시되는지는 확인할 수 없습니다. 스키마 파일 자체. 열쇠를 찾을 수있는 곳은 인스턴스 문서뿐입니다.

우리가 실제로 유효한 유형의 목록을 갖고 싶지 않다면 사전 검증 변환을 수행하고 item-meta 항목을 가져온 다음 유효성 검사를 수행 한 다음 원본 변환을 수행해야합니다. XML 스키마와 스타일 시트를 비교적 직접적으로 사용해야하는 것은 너무 복잡해 보입니다.

더 좋은 방법이 있습니까?

답변

1

key/keyref의 선택자는 매우 제한된 xpath 구문 만 허용합니다. 짧지 만 완전히 정확하지는 않음 : 선택자는 선언 된 요소의 하위 노드를 가리켜 야합니다.

제한된 구문의 전체 정의는 -> here입니다.

그래서 더 나은 방법은 없습니다. 죄송합니다.

BTW : W3C는 XML 스키마 프로세서 구현 자의 생활 편의를 위해이 제한이 있음을 명시합니다. XML 스키마의 디자인 목표 중 하나는 스트리밍 모드에서 문서를 처리 할 수있게하는 것이 었습니다. XML 스키마의 무언가가 때때로 무작위 적으로 많은 것을 설명합니다.

0

조금 더 생각해 보았습니다. 스타일 시트에서 유효성 검사의 일부분을 수행하는 아이디어를 생각해 냈습니다. 스키마는 항목 유형을 일반 문자열로 정의하며 스타일 시트는 항목 메타 테이블에서 항목 유형을 조회 할 수없는 경우 메시지를 내보내고 처리를 중지합니다.

이 솔루션은 유효한 유형 목록을 두 번 이상 적어 두어야한다는 원래의 문제를 해결하지만 유효성 검사 논리가 이제 스타일 시트 논리와 섞여 있다는 문제를 야기합니다. 이 새로운 문제가 이전 버전보다 심각하지 않은지 여부를 알기에는 XSD + XSLT에 대한 충분한 경험이 없습니다.하지만 이전에 작성한 항목 - 메타 테이블을 각 인스턴스 문서로 가져 오는 것이 더 멋지게 보입니다. 사전 유효성 확인 변환.

0

일부 오류와 함께 XSLT를 중지 할 필요가 없습니다. 그냥 토론 스레드가 여기 없다는 것을 명심하시기 바랍니다는 그것과는 별도로

<error txt="Invalid-Item-Type 'invalid_type'"/> 

처럼 원래의 문제 점을 스키마 유효성을 검사하지 않습니다 뭔가를 생산하고 있다고 할 수 있습니다. 게시물이 위아래로 움직일 수 있으므로 적절하게 질문을 수정하는 것이 좋습니다.

여기에서 철학은 "하나의 질문이며 가장 좋은 답변이 나온다"는 것을 기억하십시오.

관련 문제