Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在XSD中验证XML文档之间的ID?_Php_Xml_Xsd_Xsd Validation_Xml Validation - Fatal编程技术网

Php 如何在XSD中验证XML文档之间的ID?

Php 如何在XSD中验证XML文档之间的ID?,php,xml,xsd,xsd-validation,xml-validation,Php,Xml,Xsd,Xsd Validation,Xml Validation,我正在尝试为iOS和Android应用程序制作一个跨平台的字符串管理系统(这样我就不必翻译这两个应用程序,我可以将一个应用程序中的字符串重新使用到另一个应用程序中) 为此,我使用以下流程: 存储跨平台字符串标识符的XML(可能具有comment或iOS only,…)等属性) 按钮\u登录\u facebook 按钮\登录\苹果 ... 然后我有N种受支持语言的N种翻译: <!-- translation_en.xml --> <translation lang=&quo

我正在尝试为iOS和Android应用程序制作一个跨平台的字符串管理系统(这样我就不必翻译这两个应用程序,我可以将一个应用程序中的字符串重新使用到另一个应用程序中)

为此,我使用以下流程:

  • 存储跨平台字符串标识符的XML(可能具有
    comment
    iOS only
    ,…)等属性)

    
    按钮\u登录\u facebook
    按钮\登录\苹果
    ...
    
  • 然后我有N种受支持语言的N种翻译:

    <!-- translation_en.xml -->
    <translation lang="en">
      <string id="button_signin_facebook">Continue with Facebook</string>
      <string id="button_signin_apple">Continue with Apple ID</string>
      ...
    </translation>
    
    
    继续使用Facebook
    继续使用Apple ID
    ...
    
  • 在验证完整性之后,PHP脚本将处理所有这些,并为两个平台生成所有翻译文件(查看是否有未使用的字符串,是否创建了两次字符串等)

    现在我的问题是: 如何为
    translation_lang.xml
    文件创建XSD,强制执行
    string
    元素的
    id
    属性是
    identifiers.xml
    文件中所有
    id
    的“枚举”(或“引用”)
    (就像数据库中的外键一样)


    我是XSD新手,我发现我可以在XSD中进行枚举,但这不是我想要的。(标识符值需要在XML文件identifiers.XML中,而不是在模式中,因为它们不是固定的。)

    XSD不能表示单独XML文档之间的约束

    其他可能性:

  • 用XSLT、PHP或其他语言编写跨文档验证约束
  • 为了通过XSD进行验证,将单独的XML文档组合成单个复合XML文档

  • 谢谢你的回答。实际上,在生成平台字符串文件之前,我用PHP验证了所有这些,但是XSD验证对于IDE自动完成非常有用。如果使用解决方案2,如何在单个文件中表示外键?一旦标识符和引用位于单个文件中,您可以使用
    xsd:key
    xsd:keyref
    验证此类引用完整性约束。例如,请参阅。谢谢,我将查看:)跨文档验证的另一种可能性是使用XSD1.1断言。从技术上讲,模式中使用的XPath断言不能使用doc()函数引用外部文档,但您可能会发现并非所有处理器都施加了此限制。
    <!-- translation_en.xml -->
    <translation lang="en">
      <string id="button_signin_facebook">Continue with Facebook</string>
      <string id="button_signin_apple">Continue with Apple ID</string>
      ...
    </translation>