【问题标题】:restating of the existing content model - XHTML重述现有的内容模型 - XHTML
【发布时间】:2023-04-01 04:50:01
【问题描述】:

因为我需要 XHTML。

那么这是我的 DOCTYPE(代码):

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html SYSTEM "http://myweb.com/DTD/prueba.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Cosmos</title>
<meta http-equiv="Content-Type" content="application/xhtml+xml;
charset=UTF-8" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<link rel="icon" href="https://myweb.com/graficos/favicon.ico"
type="image/x-icon" />
<style type="text/css">@import url("https://myweb.com/css/style.css");</style>
</head><body>
<div><planet>Jupiter!</planet></div>
</body></html>

而“mydtd.tdt”的代码是:

<!ELEMENT planet ANY>
<!ENTITY % html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
%html;

但是 validator.w3.org 回复:

document type does not allow element "planet" here

我相信这个答案是因为corse的元素BODY的定义不包括元素“planet”,我去W3C,他们在https://www.w3.org/TR/xhtml-modularization/dtd_developing.html#sec_E.3.1中说。

" 在其他元素已经定义了内容模型的情况下,添加一个元素将需要在 myelement 之外重新声明现有的内容模型。 "

然后我可以按照 W3C 的说明编辑我的 DTD: https://www.w3.org/TR/xhtml-modularization/dtd_developing.html#s_dtd_dev_elems " 基本上,DTD 作者应该为每个元素编写元素声明: "

<!ATTLIST %MyModule.myelement.qname;
      myattribute    CDATA    #IMPLIED
      >

但我真的不知道如何修复我的 DTD 以添加我的元素/标签“行星”,请帮忙?

【问题讨论】:

    标签: xhtml dtd


    【解决方案1】:

    为了能够在 XML 文档中插入 &lt;planet&gt; 元素,您需要告诉 DTD 可以将其插入到何处。
    从技术上讲,这相当于重写整个 DTD - 因为您需要告诉每个现有元素它可以有新内容 - 但幸运的是 XHTML 1.1 DTD 是模块化的,您需要做的就是在包含它之前重新定义它的一个实体。

    假设新元素是一个短语元素,可以插入任何可以插入&lt;dfn&gt;&lt;cite&gt; 等内容的地方,我们可以使用InlPhras.class 实体来添加新元素。

    <!ENTITY % InlPhras.class
         "| em | strong | dfn | code | samp | kbd | var | cite | abbr | q | planet " >
    

    在您的 DTD 中包含 XHTML 1.1 DTD 之前执行此操作,这样您的整个文件将如下所示:

    <!ENTITY % InlPhras.class
         "| em | strong | dfn | code | samp | kbd | var | cite | abbr | q | planet " >
    <!ELEMENT planet ANY>
    
    <!ENTITY % html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    %html;
    

    然后它会工作。并验证。

    顺便问一下,您真的希望 ANY 用于新元素中的内容模型吗?这意味着在其中放入任何元素都是合法的,即使是&lt;body&gt;&lt;head&gt;。我不认为那是你想要的。

    【讨论】:

    • 您好 Lister 先生,我复制粘贴您的代码,结果是 Validation Output: 1 Error, "Line 8, Column 8: document type does not allow element "planet" here “可能有什么问题?
    • @Stackoverflow 你如何测试这个? W3C 验证器无法直接检查 DTD,因此您必须 1)将我的代码放入 DTD 文件并将其放在验证器可以找到它的位置,以及 2)修改 OP 的 XML 以指向新的 DTD;然后将其粘贴到作品中。
    • 感谢@Mr Lister,您可以在浏览器中看到页面加载正常:unir.team/Mr_Lister/Mr_Lister.php 但 W3C 说有问题...我们还想使用/添加标签 navlistdatalist 等...我们如何在不使用封闭符的情况下将这些标签添加到

      中?再次感谢 DTD:unir.team/Mr_Lister/prueba.dtd
    • @Stackoverflow 是的,我的回答是根据 OP 的需求量身定制的。就你而言,这取决于你想要什么,听起来你只需要使用 XHTML5,对吗?
    • 确定@Mr_Lister,我需要编写代码XHTML,还需要验证来自W3C 的任何页面,但我不知道如何使用标签navdatalist 传递验证器等...还有一些属性如 autocompletelist 等...我访问 mrlistersir.wordpress.com 但我没有找到电子邮件/电话,您可以创建聊天这里要我联系你吗?谢谢(chat.stackoverflow.com/rooms/new)
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签