2012-09-04 6 views
2

다음과 같은 데이터가있을 수 내 .XML 구조 : 나는 1 일 문자열 또는 2. 여러 하나에 classParams을 허용하도록이 .dtd 파일을 정의하려면 어떻게DTD 구문 - 하위 요소 또는 PCDATA을 허용

<entry id="one-string"> 
      <class>nmWinMultiReports_main</class> 
      <classParams>string</classParams> 
     </entry> 
<entry id="multiple-elements"> 
      <class>nmJavaScript_main</class> 
      <classParams> 
       <pluginid>monitorPlugin</pluginid> 
       <bla>string</bla> 
       <tag>abc</tag> 
      </classParams> 
     </entry> 

을 하위 요소 (각각 한 번)?

내가 시도 :

<!ELEMENT class (#PCDATA) > 
<!ELEMENT classParams (#PCDATA | pluginid | bla | tag) > 
     <!ELEMENT pluginid (#PCDATA) > 
     <!ELEMENT bla (#PCDATA) > 
     <!ELEMENT tag (#PCDATA) > 

답변

1

내가 그것을했다 :

<!ELEMENT classParams (#PCDATA | pluginid | bla | tag)* > 
+0

유용합니다. 왜이 제품이 효과가 있고 다른 제품이 효과가 없는지? 그것이 실제로하고있는 것처럼 보이는 것입니까? –

2
당신이 설명하는 제약 조건을 적용 할 수

의 DTD; 또한

<!ELEMENT string (#PCDATA) > 
<!ELEMENT classParams (string 
         | (pluginid, bla, tag)) 
> 

,

경우 : 그 제약 조건 같은 것을 얻을 수있는 가장 쉬운 방법은 새로운 요소를 ( string를 호출)를 추가하고 선언 classParams을 복용으로 하나 string 또는 자녀 등 pluginid 등의 순서입니다

<!ELEMENT entry (class, (classParams | classParamString)) > 
<!ELEMENT classParamString (#PCDATA) > 
<!ELEMENT classParams (pluginid, bla, tag) > 
:
<classParams><string>foo</string></classParams> 

이 너무 무거운 것, 당신은 내용으로 classParams 또는 classParamString 중 하나를 복용으로 entry을 선언 할 수 0

+0

답변 해 주셔서 감사합니다. 나는 현재 나의 구조를 사용하고있을 것이지만 앞으로는 당신의 접근법을 사용할 것입니다. – Patrick

0

이렇게하면 다음과 같이 달성 할 수도 있습니다.

<!ELEMENT classParams ANY> 
+3

제공하는 솔루션에 대한 자세한 정보를 추가 할 수 있습니까? – abarisone