2010-06-18 3 views
0

xhtml 데이터에 대한 내장 스키마 데이터 유형이 있습니까? 두 개의 "woozle"이 포함 된 "boozle"요소를 지정하려고한다고 가정합니다. 각 요소는 임의의 xhtml입니다.html/xhtml에 대한 내장 스키마 데이터 유형

./lab.rng:43 : 요소 심판 : 휴식-NG 파서 오류

불행하게도
namespace nifty = "http://brinckerhoff.org/nifty/" 

start = element nifty:boozle {woozle, woozle} 

woozle = element nifty:woozle {xhtml} 

, xmllint가 다음이 오류가 신호 : 나는 긴장 NG 소형 구문을 사용하여, 이런 식으로 뭔가를 쓰고 싶어 : 참조 xhtml에 일치하는 정의가 없습니다 ./lab.rng:43 : element ref : Relax-NG 파서 오류 : 내부에서 ref xhtml에 대한 정의가 없습니다.

내 질문은 다음과 같습니다. 위의 "xhtml"대신에?

답변

0

Ahhh ..... 그래, Relax NG 문서를 사용하면 더 많은 시간을 할애하여이 문제에 대한 두 가지 해결책을 제시 할 수 있습니다.

1)과 같이, 모든 일치하는 "anyElement"를 지정하는 이름의 클래스를 사용하여 단순히 이러한 요소를 확인하지 않습니다 때문에

 
anyElement = 
    element * { 
    (attribute * { text } 
    | text 
    | anyElement)* 
    } 

이, 적당히 끔찍한입니다. 그러나이 정의를 사용하면 위의 "xhtml"대신 "anyElement"를 넣을 수 있습니다.

2) 더 나은 해결책은 Relax NG의 "include"지시어를 사용하여 xhtml의 전체 사양을 포함하도록하는 것입니다. 하나를 찾을 수 있다고 가정합니다.

+0

대답에 대한 크레딧을 부여하는 것은 매우 나쁜 형태로 간주됩니까? –

+0

더 나은 솔루션은 여러 스키마 유효성 검사기 (네임 스페이스 용 및 xhtml 네임 스페이스 용)와 함께 XML 파이프 라인을 사용하는 것입니다. 나는 내 대답 주석에서 xhtml 스키마에 링크한다. – mdma

+0

이것은 무지 또는 고집으로 나타날 수 있지만 제안을 선언적 솔루션으로 변환하는 방법은 분명하지 않습니다. 간단히 말하자면 jing이나 xmllint 또는 다른 유사한 도구를 사용하여 XML을 검증 할 수있는 방법으로 Relax NG 사양을 작성하는 방법을 제안 하시겠습니까? 아니면 좀 더 복잡한 것을 제안 하시겠습니까? 진술 : 시간 내 주셔서 감사합니다. –

0

xhtml 요소가 xhtml 네임 스페이스에있는 동안 woozles와 boozle이 네임 스페이스에 있습니다. 스키마 유효성 검사 네임 스페이스 - 스키마가 네임 스페이스의 유효성을 검사하고 xhtml 스키마가 xhtml 네임 스페이스의 유효성을 검사합니다. 모든 하위 요소가 xhtml 네임 스페이스에 있지만 스키마에서 xhtml 네임 스페이스 자체의 유효성을 검사하지 않아야하므로 xhtml을 포함하도록 요소를 제한 할 수 있습니다.

xhtml 스키마를 사용하여 문서의 xhtml 네임 스페이스 노드의 유효성을 검사 할 수 있습니다. 이 스키마를 처리 파이프 라인에 추가합니다. 즉 두 번째 유효성 검사 단계입니다.

+0

여기서 연결하는 것은 아닙니다. 네가 올바르게 이해하고, 멋진 네임 스페이스의 요소와 xhtml 네임 스페이스의 요소를 모두 검증하는 relax NG 스키마를 지정하는 것이 불가능하고, 불행하지만 그럴 수 있다고 생각하는 사용자를 제안하고있다. * xhtml을 대신 할 수있는 * 아무것도 없다는 것과, 수동으로 유효성 검사 코드를 작성하여 스키마 검사로 넘어갈 필요가 있다는 것입니다. 불행한 일입니다. –

+0

유효성 검사는 멋진 부분에서 두 부분으로 나뉩니다. , 당신은 아이들이 xhtml 네임 스페이스에 있다고 말합니다.그런 다음 xhtml 스키마 (http://www.w3.org/TR/xhtml1-schema/)를 사용하여 xhtml 노드의 유효성을 검사합니다. 가장 간단한 방법은 두 개의 스키마 유효성 검사 패스 (xhtml relaxng 스키마와 xhtml w3c 스키마 용)에 대한 xml 파이프 라인을 사용하는 것입니다. – mdma

+0

Urg ... 너무 가까워. 원래 질문으로 돌아가려면 : * 아이들이 xhtml 네임 스페이스에 있다는 것을 나타 내기 위해 Relax NG 스키마에 넣는 것은 무엇입니까? 방금 합리적인 추측을 시도했지만 성공하지 못했습니다. 특히 내가 정말로 여기에 필요하다고 생각하는 것은 데이터 형식 인 la xsd에 대한 참조입니다. –

1

이름 공간과 스키마 은 RELAX NG에서 직각 인이며 XML 스키마에서는 단단히 결합되어 있습니다. 위의 anyElement의 정의와 같은 라인에

htmlElement = element xhtml:* { (attribute * {text} | text | htmlElement)* } 

: 당신은 당신의 요소는 XHTML 네임 스페이스에 있는지 확인하려면이 같은 규칙을 설정할 수 있습니다. 그러나 실제로 XHTML로 컨텐츠의 유효성을 검사하려면 XHTML 용 RELAX NG 스키마를 사용하고이를 포함해야합니다 (XHTML 1.0 strict가 필요한지 여부에 따라 여러 시작점이 있음). 그런 다음 해당 패턴을 참조하십시오. html 요소 또는 원하는 요소. 자신의 스키마에 전체 스키마를 포함 시키려면 포함 된 스키마의 시작 심볼을 덮어 쓰려면 "blahblah '{start =}를 포함해야합니다.

+0

감사! 말이된다. –

관련 문제