使用DTD和XML交叉引用文件(仅限)
我需要编写两个XML文件,并使用DTD限制它们。我是否能够将一个XML文件中的元素ID限制为另一个文件中的引用ID使用DTD和XML交叉引用文件(仅限),xml,file,dtd,Xml,File,Dtd,我需要编写两个XML文件,并使用DTD限制它们。我是否能够将一个XML文件中的元素ID限制为另一个文件中的引用ID <!ELEMENT SURVEY (QUESTION+)> <!ATTLIST SURVEY [...]> <!ELEMENT QUESTION ([...])> <!ATTLIST QUESTION
<!ELEMENT SURVEY (QUESTION+)>
<!ATTLIST SURVEY
[...]>
<!ELEMENT QUESTION ([...])>
<!ATTLIST QUESTION
Id ID #REQUIRED
Text CDATA #REQUIRED
[...] >
我希望在一个包含答案的不同XML文件中,答案的ID必须引用第一个文件中问题的ID。也就是说,回答中只能回答调查中的一个问题要素
<!ELEMENT RESPONSES (STUDENT+)>
<!ELEMENT STUDENT (QUESTION*)>
<!ATTLIST STUDENT
id ID #REQUIRED>
<!ELEMENT QUESTION (ANSWER+)>
<!ATTLIST QUESTION
**id IDREF #REQUIRED>**
[...]
**
[...]
如果这两个文件是分开的,您将无法使用DTD限制这一点。IDREF
type属性将无法解析。您很可能会遇到错误,例如“带有标识符的元素”?“必须出现在文档中”(??
=您的IDREF
类型属性的值)
要仅使用DTD强制执行此操作,您需要组合数据集(测量文件和响应文件)。合并可以是物理合并两个数据集,也可以创建第三个实例,通过实体引用将两个数据集合并在一起。这将允许您验证单个实例。如果这样做的话,如果其中一个数据集发生变化,就不必再次组合数据
您必须进行一些更改,以便两个数据集可以共存;尤其是“问题”元素及其属性
下面是我思考的一个例子:
SURVEY.xml
<SURVEY>
<QUESTION id="Q1" text="Question #1">
<ANSWER>Answer to question #1.</ANSWER>
</QUESTION>
</SURVEY>
<RESPONSES>
<STUDENT id="S1">
<QUESTION ref="Q1">
<ANSWER>Students answer to question #1.</ANSWER>
</QUESTION>
</STUDENT>
</RESPONSES>
对问题1的答复。
RESPONSES.xml
<SURVEY>
<QUESTION id="Q1" text="Question #1">
<ANSWER>Answer to question #1.</ANSWER>
</QUESTION>
</SURVEY>
<RESPONSES>
<STUDENT id="S1">
<QUESTION ref="Q1">
<ANSWER>Students answer to question #1.</ANSWER>
</QUESTION>
</STUDENT>
</RESPONSES>
学生回答问题1。
COMBINED.xml
<SURVEY>
<QUESTION id="Q1" text="Question #1">
<ANSWER>Answer to question #1.</ANSWER>
</QUESTION>
</SURVEY>
<RESPONSES>
<STUDENT id="S1">
<QUESTION ref="Q1">
<ANSWER>Students answer to question #1.</ANSWER>
</QUESTION>
</STUDENT>
</RESPONSES>
(如果SURVEY.xml/RESPONSES.xml发生更改,则该DTD将被验证,不需要更改。我还将DTD放置在内部子集中,但它可以用作外部DTD。)
]>
&调查文件;
&响应文件;
除了只使用DTD之外,还可以使用XSLT或XQuery之类的工具来检查数据。(如果有帮助的话,我可以添加一个XSLT示例。)您可能可以使用Schema实现这一点,但我不确定。这正是我需要的答案。非常感谢。@K-man-不客气。请考虑通过点击答案左边的复选标记来接受我的答案。谢谢!