如何在 XSD 中对数据库表建模?

2023-12-05

为地址等数据库表建模似乎很简单,就像 XSD 中的这样:

  <xsd:complexType name="address_Type">
    <!-- the columns of the database table for addresses -->
    <xsd:sequence>
      <xsd:element name="street" type="xsd:string" />
      <xsd:element name="city" type="xsd:string" />
      <xsd:element name="state" type="xsd:string" />
    </xsd:sequence>
  </xsd:complexType>

然后,您可以使用此表加上一些其他不相关的数据(例如用户名)来定义 XML 格式,如下所示:

  <xsd:element name="user" type="user" />
  <!-- =========================================== -->
  <xsd:complexType name="user">
    <xsd:sequence>
      <!-- username stands for all non-address fields -->
      <xsd:element name="username" type="xsd:string" />
      <!-- wrapper element for the address fields -->
      <xsd:element name="address" type="address_Type" />
    </xsd:sequence>
  </xsd:complexType>

XML 可能是这样的:

<?xml version="1.0" encoding="utf-8"?>
<user>
  <username>Albert Einstein</username>
  <!-- with wrapper element for address -->
  <address>
    <street>Main Street</street>
    <city>Ghost Town</city>
    <state>Up State</state>
  </address>
</user>

此方法可以轻松扩展到具有地址列表或与其他表中的记录相结合的地址记录的 XML。通过这种方式,一个 XSD 可以涵盖许多 XML 格式。

然而,如果有人认为,如果我只包含地址对象的 1 个实例,为什么我需要那个愚蠢的“地址”包装元素,得到这个 XML:

<?xml version="1.0" encoding="utf-8"?>
<user>
  <username>Albert Einstein</username>
  <!-- no wrapper element for address -->
  <street>Main Street</street>
  <city>Ghost Town</city>
  <state>Up State</state>
</user>

对我来说,现在我们似乎不能使用与上面 XSD 中相同的复杂类型作为地址。

在我的公司,IT 组织是分散的,如果我开始大喊“你应该添加包装元素”,我可能会感到喉咙痛。或者头痛。因此,我需要改进我的 XSD,以应对带有和不带有包装器元素的 XML。

我尝试添加一个没有名称的 xsd:element,但这不起作用:

<xsd:element type="address_Type" />

我找不到 xsd: 具有 type 属性的实体来指向除 xsd:element 之外的复杂类型。

我的问题是是否还有一种方法可以重新使用最后一个 XML 的复杂类型?


如果您希望在不使用包装元素的情况下从现有内容模型组成新的内容模型,请考虑使用xs:group机制:

<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

  <xsd:element name="user" type="user" />

  <xsd:complexType name="user">
    <xsd:sequence>
      <xsd:element name="username" type="xsd:string" />
      <!-- 
         ...
         Many more xsd:element or xsd:groups might appear here.
         ...
      -->
      <xsd:group ref="address"/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:group name="address">
    <xsd:sequence>
      <xsd:element name="street" type="xsd:string" />
      <xsd:element name="city" type="xsd:string" />
      <xsd:element name="state" type="xsd:string" />
    </xsd:sequence>
  </xsd:group>  

</xsd:schema>

如果您想允许包装器可选,您可以使用xsd:choice:

<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="user" type="user" />

  <xsd:complexType name="user">
    <xsd:sequence>
      <xsd:element name="username" type="xsd:string" />
      <xsd:choice>
        <xsd:group ref="address"/>
        <xsd:element name="address">
          <xsd:complexType>
            <xsd:group ref="address"/>
          </xsd:complexType>
        </xsd:element>
      </xsd:choice>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:group name="address">
    <xsd:sequence>
      <xsd:element name="street" type="xsd:string" />
      <xsd:element name="city" type="xsd:string" />
      <xsd:element name="state" type="xsd:string" />
    </xsd:sequence>
  </xsd:group>  

</xsd:schema>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 XSD 中对数据库表建模? 的相关文章

随机推荐

  • 定义函数并从函数返回函数?

    如何在函数内定义并返回函数 例如 我们有一个类似的函数 float foo float val return val val 现在 需要的是像 bar 这样的函数 typedef float func t float Rubish pseu
  • 在 Prolog 中生成整数的最佳方法

    我想生成整数 并且正在寻找实现此目的的最佳方法 例子 number2 N N 0 N 1 N 2 and so on 现在我只是使用length 2 number2 N length N 但我认为应该有一些更好的方法 无需创建临时列表 我可
  • 根据前一行数据自动计算sql表中的列

    我使用 sql server 作为后端在 asp net c 中开发我的应用程序 现在我需要创建一个带有自动计算列 期末余额 的表 如下所示 Date in stock out stock closing balance 2 3 2013
  • Python 编码风格中的空格

    Python 教程说 在运算符周围和逗号之后使用空格 但不要直接在括号结构内使用空格 a f 1 2 g 3 4 不直接在括号结构内 到底是什么意思 这大概来自于PEP 8 Python 代码风格指南 具体请参阅 表达式和语句中的空格 部分
  • 如何找到元组列表中每个相似条目的平均值?

    我有这个元组列表 Jem 10 Sam 10 Sam 2 Jem 9 Jem 10 如何求每个名字加上的数字的平均值 即用 Jem 存储在一个元组中的所有数字的平均值 然后输出它们 在此示例中 输出将是 Jem 9 66666666667
  • 500 无证错误:在 FastAPI 中返回响应时出现内部服务器错误

    我正在使用 FastAPI 通过 ML 模型进行预测 当我给一个task id and input 应用程序应将其添加到后台任务并相应地返回响应 然而 我得到Error 500当我尝试这样做时 添加后task id globally 它在正
  • 如何处理 URISyntaxException

    我收到此错误消息 java net URISyntaxException Illegal character in query at index 31 http finance yahoo com q h s IXIC My Url htt
  • 通过公式从单元格中提取所需数据

    我一直在使用下面的公式从单元格中提取所需的结果 但现在我试图从单元格中获取更多数据 并且我最终尝试从单元格中获取更多值 但它不起作用 我附上了一张谷歌表格 其中提供了数据和所需的结果以及我的公式 任何帮助将不胜感激 ArrayFormula
  • 在下拉选择中,如何从数据库填写完整的表单字段

    如何根据从下拉列表中选择的值从数据库填写完整的表单输入字段 示例 在应用程序中 通过选择客户名称 它会使用数据库中存储的详细信息填充完整的表单输入字段 Sample Code
  • 在 matlab 中以一般形式绘制二次曲面

    I have Quadric Surface equation 我知道A B C 如何在 matlab 中绘制方程 最好的选择是生成函数的 3D 等高线图 其中函数值为 0 处具有单个等高线 要以合理的精度完成此操作 请在多个点 x y z
  • 让控制台等待用户输入关闭

    我有一个控制台应用程序 在执行其任务后 必须向用户提供反馈 例如 操作完成 或 操作失败 以及详细的错误 问题是 如果我只是 让它运行 输出消息将被打印 但控制台将很快关闭 没有时间阅读消息 据我记得 在 C 中 每个控制台应用程序都会以
  • 使用 php/mysql 在 googlemaps 上动态绘制折线

    我是 google 地图 API 的新手 我为我的手机编写了一个小应用程序 可以定期将其位置更新到 SQL 数据库 我想在我的浏览器中的谷歌地图上显示此信息 理想情况下 我想定期轮询数据库 如果有任何新的坐标到达 请将它们添加到行中 描述它
  • swig + mono:找不到库的 C# 示例错误

    我在 Mac OS X 10 6 4 上使用 swig 2 0 1 mono 2 6 2 8 整体构建没问题 C 示例的构建也没问题 问题是 当我运行示例 mono runme exe 时 我总是收到以下错误 Unhandled Excep
  • numpy 数组中值数组的位置

    这是一个小代码来说明问题 A array 1 2 1 0 5 3 f of A f A this is precomputed and expensive values array 1 2 1 0 location of values in
  • 为什么这个 Gnuplot 中的 autotitle 错误?

    Data Model Decreasing Constant Increasing 2025 73 78 80 85 87 92 2035 63 68 80 85 97 107 2050 42 57 75 90 104 5 119 5 基于
  • CFNetwork SSLHandshake 在使用 localhost 的 iOS 模拟器上失败 (-9807)

    我正在尝试连接openssl s server和 iOS 客户端使用 TCP SSL 但得到CFNetwork SSLHandshake failed 9807 Objective C 代码 从这里 void viewDidLoad sup
  • 从 Java 使用 .net WCF 服务

    我是 Java 新手 认为在我已经熟悉的 NET WCF 服务之上实现客户端应用程序是一次很好的学习练习 我从最新的 JAX WS 运行 wsimport bat https jax ws java net 来生成客户端代理 但是我仍然坚持
  • 用CSS显示不同大小的div

    如何显示不同高度的 div 使其彼此靠近 无论其高度如何 并具有特定的边距 就像建筑物一样我的意思是类似这个网站中的 divhttp via me 我使用了 float left 但它仅与最后一个 div 一起浮动并留下空白 这是我使用的代
  • Make:覆盖标志

    我对以下的回复有点困惑覆盖 Werror 标志的快速方法 所以我在这里问我的具体问题 我有多个 Makefile 一起工作 并且 CFLAGS 已设置为 Werror Wall 和许多其他 但在其中一个 Makefile 中 我希望错误不要
  • 如何在 XSD 中对数据库表建模?

    为地址等数据库表建模似乎很简单 就像 XSD 中的这样