可以从DTD-XML文件以编程方式创建Core Data模型吗?

时间:2014-04-30 20:27:36

标签: xml core-data dtd xml-dtd

我有以下DTD-XML文件(来自MSAccess),并将使用它以编程方式创建我的CoreData模型。

此处的每个ELEMENT都成为一个实体,与列出的每个ATTLIST属性具有一对一的关系。

这甚至可能吗?

<?xml version="1.0" encoding="UTF-8"?>

<!ELEMENT league (date, time, version, season, division+)>

<!ELEMENT date EMPTY>
<!ATTLIST date
    year  CDATA #REQUIRED
    month CDATA #REQUIRED
    date  CDATA #REQUIRED
    day   CDATA #REQUIRED
>

<!ELEMENT division (team+)>
<!ATTLIST division
    id    CDATA #REQUIRED
    label CDATA #REQUIRED
>

<!ELEMENT season EMPTY>
<!ATTLIST season
    season CDATA #REQUIRED
>

<!ELEMENT sports-statistics (league)>

<!ELEMENT team EMPTY>
<!ATTLIST team
    id    CDATA #REQUIRED
    city  CDATA #REQUIRED
    name  CDATA #REQUIRED
    alias CDATA #REQUIRED
>

<!ELEMENT time EMPTY>
<!ATTLIST time
hour CDATA #REQUIRED
    minute     CDATA #REQUIRED
    second     CDATA #IMPLIED
    timezone   CDATA #REQUIRED
    utc-hour   CDATA #REQUIRED
    utc-minute CDATA #REQUIRED
>

<!ELEMENT version EMPTY>
<!ATTLIST version
    number CDATA #REQUIRED
>

1 个答案:

答案 0 :(得分:0)

当然可以。

如果您使用的是iOS,则可以使用内置的NSXMLParser加载该文件并运行其内容。如果您希望加载文档并检查文档而不是获取解析器回调,请添加TouchXML。 [基本上,NSXMLParser执行SAX样式的解析,TouchXML使用DOM样式。“

加载XML后,您可以创建模型。 Core Data模型创建的每个方面都可用作Core Data API调用,因此您不需要使用模型编辑器。你想要

  1. 创建NSManagedObjectModel
  2. 的实例
  3. 为每个元素创建一个新的NSEntityDescription。使用[NSManagedObjectModel setEntities:]将这些与模型相关联。
  4. 为每个属性创建NSAttributeDescription,为实体类型之间的每个关系创建NSRelationshipDescription s。使用[NSEntityDescription setProperties:]将这些与实体描述相关联。
  5. (可选)保存NSManagedObjectModel,以便每次应用启动时都不必执行此操作。 NSManagedObjectModel没有任何自己的保存方法,但它符合NSCoding,所以请使用它。
  6. 请记住,在添加持久性存储文件之前,模型只是可变的。只有在没有数据的模型时才能更改它。加载数据后,必须将模型视为不可变。