在 DTD/XML 中创建逻辑

Create logic within DTD/XML

提问人:IamSebastn 提问时间:10/30/2023 更新时间:10/30/2023 访问量:18

问:

由于我的学习,我正在学习 XML/DTD。现在我有一个练习,我必须创建一个订单。有一点是,我有 2 种不同类型的客户。一个学生和一个非学生。 这个话题,我用一个简单的布尔值来解决。

<!ATTLIST Kunde isStudent (true | false) #REQUIRED>

但现在,如果客户是学生,我应该显示其他元素。如果他不是,他们就不是必需的。

我目前的结构是这样的:

<!ELEMENT Customer (Name, Address)>
<!ATTLIST Customer isStudent (true | false) #REQUIRED>

<!-- 
If "isStudent === true" the Customer-Element should also have 

<!ELEMENT StudentNumber (#PCDATA)>
<!ELEMENT UniversityName (#PCDATA)>

If "isStudent === false", they shouldn't/musn't be there
-->

<!ELEMENT Name (#PCDATA)>
<!ELEMENT Adress (Street, Number, PLZ, City)>

<!ELEMENT Street (#PCDATA)>
<!ELEMENT Number (#PCDATA)>
<!ELEMENT PLZ (#PCDATA)>
<!ELEMENT City (#PCDATA)>

所以我想知道......是否可以在 DTD 中创建逻辑?所以就像“如果这是真的,那就展示这个......”还是使用“?”标志创建元素的关键?

XML 属性 DTD

评论


答:

0赞 Michael Kay 10/30/2023 #1

不,DTD 不够强大,无法表达此类约束。还有其他XML模式技术可以做到这一点:例如RelaxNG,XSD 1.1(但不是1.0)或Schematron。