2
我不知道我的問題是否正確提問。我有一個包含DTD的XML文檔。我已經定義了ATTLIST,並且我想限制或修改DTD,即如果我已經多次使用同一個屬性,則XML驗證會拋出錯誤或將失敗。 我的XML文檔看起來是這樣的:我可以修改/限制XML DTD的ATTLIST以允許使用UNIQUE屬性嗎?
<?xml version="1.0" encoding="utf-8"?>
<!-- DTD START -->
<!DOCTYPE dtype
[
<!ELEMENT dtype (ea?, eb?, ec, ed?) >
<!ELEMENT ea (data+) >
<!ELEMENT eb (ee+) >
<!ELEMENT ec (data+) >
<!ELEMENT ed (data+) >
<!ELEMENT ee (data+) >
<!ELEMENT data (#PCDATA) >
<!ATTLIST ee
ef CDATA #REQUIRED
>
<!ATTLIST data
element CDATA #REQUIRED
value CDATA #IMPLIED
unit CDATA #IMPLIED
min CDATA #IMPLIED
max CDATA #IMPLIED
avg CDATA #IMPLIED
>
]>
<!-- DTD END -->
<!-- DATA START -->
<dtype>
<ec>
<data element="A" unit="counts" min="0.6621" avg="0.6819" max="0.7089" />
<data element="B" unit="counts" min="0.0463" avg="0.0473" max="0.0503" />
<data element="C" unit="counts" min="0.1238" avg="0.1264" max="0.1344" />
</ec>
</dtype>
<!-- DATA END -->
<!-- should be detected as not ok ! -->
<!--
<dtype>
<ec>
<data element="A" unit="counts" min="0.6621" avg="0.6819" max="0.7089" />
<data element="B" unit="counts" min="0.0463" avg="0.0473" max="0.0503" />
<data element="B" unit="counts" min="0.1238" avg="0.1264" max="0.1344" />
<data element="C" unit="counts" min="0.1348" avg="0.1644" max="0.1654" />
</ec>
</dtype>
-->
我想限制DTD允許一個屬性element="B"
例如。
這可能嗎?
丹尼爾,感謝您的回答,但我仍然有一個問題。我第一次沒有正確發佈它,但是我的xml也可能看起來像這樣:'data element =「A」... /> ',這將無效 - 每個'可以在xml文件中出現多次,但我希望**每個部分**有效。任何提示如何做到這一點? –
akm
@akm - 我不認爲你可以用DTD來完成這項工作。我認爲你可以使用模式,但很長一段時間我不需要這樣做。如果你願意的話,當我有空閒的時候,我可以試着想出一個模式。 –
丹尼爾,感謝你的努力,但我認爲你不需要在這上面花時間。我只是想/希望有一個很容易實現的方法。這個XML是從我的SQL服務器生成的,需要將信息傳輸到我的計算引擎(_Mathematica_); xml生成過程應該確保沒有重複。也許,我只是在尋找一種「保險」來100%保證它。我將花更多時間在xml生成和讀取過程中擁有獨特的屬性。不管怎麼說,還是要謝謝你! – akm