如何在Propel的模式中更加干燥.xml


How to be more DRY in Propel's schema.xml?

我在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"中,然后将以下内容添加到我的架构的开头.xml:

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

最后,在我希望插入 XML 代码段的地方,我使用实体引用:

<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 架构处理器处理实体。请在验证前替换实体。[(根)/vendor/propel/generator/lib/task/AbstractPropelDataModelTask.php的第 477 行]

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

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

目标"sql"的执行失败,原因如下:(root)/vendor/propel/generator/build-propel.xml:194:26:目标构建文件的执行失败。中止。 [平](root)/vendor/propel/generator/build-propel.xml:194:26:目标构建文件的执行失败。中止。

关键短语是(尚)不支持使用此XML架构处理器处理实体,因此它知道我正在尝试做什么!有没有人建议我如何以另一种方式完成此操作?

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

@Twigmac在

注释中建议这个问题与libxml有关,如果需要实体支持,Propel需要使用另一种机制读取模式。当我有时间时,我会提出Propel项目的增强票。