使用Notepad ++和XMLTools插件验证XML

时间:2018-03-24 06:48:30

标签: xml validation notepad++ dtd

我正在学习XML,我刚开始使用一个简单的xml文件和外部DTD。为了验证我使用Notepad ++和XMLTools插件。 (有没有人知道这是否符合标准,或者对我有更好的免费替代方案?)

这是我的外部dtd:

# [...other code... (e.g. imports, etc)]

def compare_images(img1, img2):
    # normalize to compensate for exposure difference
    img1 = to_grayscale(imread(img1).astype(float))
    img2 = to_grayscale(imread(img2).astype(float))

    img1 = normalize(img1)
    img2 = normalize(img2)
    # calculate the difference and its norms
    diff = img1 - img2  # elementwise for scipy arrays
    m_norm = sum(abs(diff))  # Manhattan norm
    s = m_norm/img1.size
    return s

def above_threshold(img1, img2):
    s = compare_images(img1, img2)
    return s > 10

def process_files():
    folder1 = os.getcwd()
    folder2 = os.path.join(folder1, "cd")
    print("Folder1: " + folder1)
    print("Folder2: " + folder2)

    for filename1 in os.listdir(folder1):
        print("File: " + filename1)
        if filename1.endswith(".png"):
            if all(above_threshold(filename1, filename2) for filename2 in os.listdir(folder2)):
                print("  Copying (similar image was not found)")
                shutil.copy(filename1, folder2)
            else:
                print("  Skipping (found similar image)")
        else:
            print("  Skipping (not a png file)")

一切正常,直到我尝试在DTD中允许<!ELEMENT auto (#PCDATA)> <!ATTLIST auto fahrgestellnummer CDATA #REQUIRED> <!ELEMENT autohaus (auto | #PCDATA)> <!ATTLIST autohaus id CDATA #REQUIRED> 和/或auto出现元素#PCDATA。我收到以下错误:

  

无法加载dtd externalDTD.dtd。

如果我在第3行中删除“autohaus”,则没有问题。使用| #PCDATA代替,也不起作用。

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

<!ELEMENT autohaus (auto | #PCDATA)>在DTD中不合法。

如果要声明混合内容,允许字符数据可选地穿插其他元素(按任意顺序),则必须先将#PCDATA关键字放在内容模型中,然后使用“星形”出现指示符。像这样:

<!ELEMENT autohaus (#PCDATA | auto)*>

参考:https://www.w3.org/TR/xml/#sec-mixed-content