【问题标题】:How to be more DRY in Propel's schema.xml?如何在 Propel 的 schema.xml 中更加干燥?
【发布时间】:2013-09-07 09:14:18
【问题描述】:

我在 Propel 中有通常的“schema.xml”,并注意到有一些重复的 XML 标记块。我有一个表,它有 10 个子表 - 每个子表都需要一些代码来指定这种关系(在 <table> 内):

<column name="id" type="integer" required="true" primaryKey="true" />
<foreign-key foreignTable="process_step">
    <reference local="id" foreign="id" />
</foreign-key>
<behavior name="delegate">
    <parameter name="to" value="process_step" />
</behavior>

因此,我将上述代码放在单独的文件“process-step-pk.xml”中,然后将以下内容添加到我的 schema.xml 的开头:

<!DOCTYPE stylesheet [
    <!ENTITY process_step_pk SYSTEM "process-step-pk.xml">
]>

最后我想插入 XML sn-p 的地方,我使用了实体引用:

<table name="process_step_load">
    &process_step_pk;
    <column name="url" type="varchar" size="1024" />
    <column name="method" type="varchar" size="6" required="true" default="get" />
</table>

这是我尝试构建课程时得到的结果:

[PHP 错误] DOMDocument::schemaValidate(): 内部错误:xmlSchemaVDocWalk,当前正在验证的节点树中至少有一个实体引用。 (尚)不支持使用此 XML 模式处理器处理实体。请在验证前替换实体.. [(root)/vendor/propel/generator/lib/task/AbstractPropelDataModelTask​​.php 的第 477 行]

目标“sql-template”的执行失败,原因如下:(root)/vendor/propel/generator/build-propel.xml:209:10: XML 模式文件 ((root)/db/schema.xml ) 不验证。有关验证失败的原因,请参阅上面的警告(如果您没有看到任何内容,请确保将 error_reporting 设置为显示 E_WARNING)。

[phingcall] (root)/vendor/propel/generator/build-propel.xml:209:10:XML 模式文件 ((root)/db/schema.xml) 未验证。有关验证失败的原因,请参阅上面的警告(如果您没有看到任何内容,请确保将 error_reporting 设置为显示 E_WARNING)。

由于以下原因,目标“sql”的执行失败:(root)/vendor/propel/generator/build-propel.xml:194:26:目标构建文件的执行失败。中止。 [phing] (root)/vendor/propel/generator/build-propel.xml:194:26:目标构建文件的执行失败。中止。

关键短语是不支持使用此 XML Schema 处理器处理实体,所以它知道我要做什么!有没有人建议我如何以另一种方式完成此任务?

我在 OS X 10.6.8 的控制台上使用 PHP 5.3.25。

【问题讨论】:

  • 您使用的是哪个 PHP 版本?这可能是libxml 错误。
  • 好点@twigmac,没想到包括那个;现在添加。
  • 我能够在我的环境中重现该错误,该环境在 Debian Squeeze 上使用 PHP 5.3.3。似乎错误可以追溯到 libxml,遗憾的是,除了通过覆盖 xml 验证部分来修改或重写 Propel 任务之外,我没有任何其他想法。我想这是你可以做的,但不是你想做的。
  • 感谢您的尝试。我无法立即访问 5.4 或 5.5,但如果它有机会解决问题,我可以设置一个 VM。你觉得可能吗? (我认为问题出在 Propel 中)。
  • 我不认为它会解决问题。关于 Propel 或 libxml 是否应该替换实体有 room for speculation。我认为Propel应该。也许您可以通过Propel mailing listPropel bug 查看并提交您的需求?

标签: php xml database-schema propel


【解决方案1】:

@Twigmac 在 cmets 中建议此问题与 libxml 有关,如果需要实体支持,Propel 将需要使用另一种机制读取模式。当我有时间时,我会为 Propel 项目提出增强票。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多