【问题标题】:How to make two attributes in XML to be unique (DTD)如何使 XML 中的两个属性唯一(DTD)
【发布时间】:2017-01-26 04:17:26
【问题描述】:

如何使 XML 中的两个属性唯一,例如在 SQL 中,我可以通过以下代码做到这一点:

create table tablename(
  StudentID varchar(20),
  SubjectID varchar(20),
  UNIQUE(StudentID,SubjectID)
)

另一方面,我在 XML 中有以下代码:

<root>
  <student StudentID="s1" />
  <subject SubjectID="sb1" />
  <tablename StudentID="s1" SubjectID="sb1" />
</root>

我怎样才能使属性StudentIDSubjectID 都成为唯一的?

【问题讨论】:

  • 请将您的代码包含在code 部分中,而不是作为带有编辑的图片。
  • 下次请注意代码格式;-)
  • “变得独一无二”是什么意思?就价值观而言,它们已经是独一无二的。您可以在 DTD 中将这些属性声明为类型 ID 以强制执行唯一性。你问的是这个吗?
  • 好的,所以我不想让 DTD 允许我写两次
  • StudentID/SubjectID 中的属性与studentsubject 中的相同命名属性有何关系?一个参考另一个?它们不相关吗?

标签: xml dtd


【解决方案1】:
<!ATTLIST student StudentID ID #REQUIRED>
<!ATTLIST subject SubjectID ID #REQUIRED>
<!ATTLIST tablename StudentID IDREF #REQUIRED
                    SubjectID IDREF #REQUIRED>

根据您的评论(“StudentID 是元素 Student 中的 ID,SubjectID 是元素 Subject 中的 ID,StudentIDSubjectIDtablename 中的 IDREF。我如何确定相同的值不会在这些属性中出现两次?”)听起来好像这是您在 DTD 中已经拥有的值。

换句话说:您已经确保相同的值不会在student/StudentIDsubject/SubjectID 属性中出现两次。在文档中,任何值都不能作为声明为 ID 的属性的值出现多次。

如果您的意思是“我如何确保没有两个 tablename 元素具有相同的 StudentIDSubjectID 对?”,答案是:使用应用程序代码。使用 DTD 没有好的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多